From 3713339ffc31bfb7bcb805f2662923a9123b21e7 Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 18 Oct 2026 16:46:57 -0700 Subject: [PATCH] chore: adopt pre-existing working-tree state before trunk merge Uncommitted machine/session edits (live config, models, docs drift) were blocking the merge of origin/main. Committed as-is to preserve them; the merge that follows resolves overlapping prose files toward upstream canonical, with local variants recoverable from this commit. Pre-merge copies also in .AGENTTRASH/pre-merge-2026-10-18/. --- AGENTS.md | 35 +++--- agent/config.yml | 119 ++++++++++++++---- agent/models.yml | 150 +++++++++++++---------- omp-docs/core/index.md | 10 +- omp-docs/log.md | 37 ++++++ omp-docs/pi/index.md | 11 +- omp-docs/system/dankclaw.md | 94 +++++++------- omp-docs/system/dankserver.md | 58 +++++---- omp-docs/system/index.md | 10 +- omp-docs/tools/gitea/architecture.md | 9 +- omp-docs/tools/gitea/data-persistence.md | 19 ++- omp-docs/tools/gitea/index.md | 32 ++--- omp-docs/tools/gitea/management.md | 9 +- omp-docs/tools/llama-cpp/index.md | 2 +- 14 files changed, 378 insertions(+), 217 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index ac0e276..4351b70 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -13,26 +13,32 @@ with YAML frontmatter, spec at `omp-docs/references/okf-spec.md`). (`dank/command-center` on the Dankclaw instance). There is no staging copy: **the checkout is the deployment.** Branch switches swap live config files out from under the running agent — keep feature branches short-lived, and never end - a work session checked out on anything but `develop` or `main`. + a work session checked out on anything but `main`. - Contents that belong here: `AGENTS.md`, `omp-docs/` (knowledge base), `scripts/` (small system utilities), `agent/` + `plugins/` (harness config and plugin manifests). Everything else under this directory is runtime state and is gitignored on principle — see `.gitignore`. History must mean "the configuration changed", not "the agent breathed". -## Git-flow SDLC (full flow, from day one) +## Trunk-based SDLC (since 2026-10-18; replaces the old git-flow regime) +- `main` is the only long-lived branch. Frank is the only dev; `develop` and the + release-branch ceremony are retired — no `develop`, no back-merges, no + `release/X.Y.Z` branches. +- **Before every work item: fetch and branch off the freshest `origin/main`.** + If main moves under you, merge it into your branch (never rebase — Frank + dislikes the history rewrite). - Work item = Gitea issue on `dank/command-center` (Gitea at 192.168.0.143:3000, owner `dank`). Small fixes may go straight to a branch; anything with more than one moving part gets an issue first. - Branch naming: `/-`, type ∈ feat|fix|docs|chore. - Release cuts: `release/X.Y.Z` from `develop`; hotfixes: `hotfix/` from `main`. -- **Merge, never rebase**, when updating a branch against a moved main — Frank - dislikes the history rewrite. **Never merge a PR without an explicit OK from Frank.** -- Merge into `develop` with `--no-ff` so feature arcs stay visible in history. -- Releases: cut `release/X.Y.Z` from `develop`, verify, merge to `main`, tag - `vX.Y.Z`, back-merge `main` into `develop`. Tags are the deploy markers every - other machine pulls to. +- **Pull requests target `main` directly.** Merge with `--no-ff` so feature arcs + stay visible in history. **Never merge a PR without an explicit OK from Frank.** +- **The moment a PR is open, open it in Frank's browser** — `xdg-open ` + lands a tab in his Firefox; never make him hunt for it in Gitea. +- Releases: tag `vX.Y.Z` straight on `main` after verifying; tags are the deploy + markers every other machine pulls to. Hotfixes are ordinary branches off the + tag you are fixing forward from. - Trash convention: never `rm` anything user-authored — move it to `.AGENTTRASH/` (gitignored). Deletion is a pruning session with Frank present. @@ -71,8 +77,8 @@ secret in every agent's context window on every machine that pulls this repo. | box | role | GPU | notes | |-----|------|-----|-------| | Dev workstation | client box, never runs inference | laptop iGPU + dGPU (non-unified) | mainline llama.cpp at `~/GitPackages/llama.cpp/build/bin/`; this repo lives here at `~/.omp` | -| Dankclaw | bench target, runs the large serving model | Strix Halo APU — **unified memory** | ROCmFPX fork at `~/GitPackages/ROCmFPX/build-qwen38/bin/`; prod service `frank-default-large`, port 7770; ssh: `ssh dankclaw` | -| Dankserver | FreeToken box | RTX 3090 dGPU — non-unified | runs `frank-default-small`; ssh: `ssh dankserver` | +| Dankclaw | bench target, secondary models + service stack | Strix Halo APU (**unified memory**) + RTX 3090 (moved over from Dankserver 2026-09) | prod services `frank-dragoon` (halogen-flash-server, :7770, iGPU) and `frank-zealot` (llama.cpp PrismML fork, :7771, 3090); runbooks in the serverAppConfigs vault (`~/Projects/serverAppConfig/serverAppConfigs-docs/LLM/`); ssh: `ssh dankclaw` | +| Dankserver | main-model box | 2× Radeon AI PRO R9700 — non-unified (was RTX 3090 until 2026-09) | runs `frank-archon` (radiance, TP=2, :7770) — **this repo's operator session runs on it**; ssh: `ssh dankserver` | ## Environment gotchas @@ -84,9 +90,10 @@ secret in every agent's context window on every machine that pulls this repo. - SSH into both servers is BatchMode-capable from here: `ssh -o BatchMode=yes dankclaw ''` — read-only probes are always allowed; state changes on remote boxes are not, without a per-run OK. -- `frank-default-large` on Dankclaw is a **production service** shared with this - repo's operator: never stop, mask, or restart it (or any production service on - any box) without an explicit, current, per-run OK from Frank. +- `frank-archon` (Dankserver), `frank-dragoon`, and `frank-zealot` (Dankclaw) + are **production services** shared with this repo's operator: never stop, + mask, or restart them (or any production service on any box) without an + explicit, current, per-run OK from Frank. ## File-organization doctrine (why this repo stays readable) diff --git a/agent/config.yml b/agent/config.yml index d79d481..6fcf6e8 100644 --- a/agent/config.yml +++ b/agent/config.yml @@ -1,5 +1,6 @@ providers: - openrouterVariant: floor + openrouterVariant: online + fetch: auto modelRoles: slow: llamacpp (dankclaw)/frank-dragoon:medium vision: llamacpp (dankclaw-3090)/frank-zealot:xhigh @@ -18,9 +19,10 @@ modelRoles: memory: llamacpp (dankclaw-3090)/frank-zealot:medium symbolPreset: nerd composer: - shape: claude + shape: band + tokenRate: true theme: - dark: dark-terminal + dark: dark-gruvbox light: light setupVersion: 2 browser: @@ -57,8 +59,7 @@ retry: - openai-codex/gpt-5.5 - xai-oauth/grok-4.5 - web/ollama - speech: - [] + speech: [] llamacpp (dankserver)/frank-archon: - llamacpp (dankclaw)/frank-dragoon maxRetries: 10 @@ -67,7 +68,7 @@ searxng: exa: enabled: false memory: - backend: local + backend: sharpshooter autolearn: enabled: true autoContinue: true @@ -75,12 +76,12 @@ compaction: remoteEndpoint: http://192.168.0.143:7771/v1/chat/completions methodOrder: - shake + - snapcompact - soft - handoff - - snapcompact - remote idleThresholdTokens: 100000 - thresholdPercent: 85 + thresholdPercent: 95 idleEnabled: true thresholdTokens: -1 dropUseless: false @@ -90,43 +91,75 @@ compaction: enabled: true experimentalContextManagement: false interruptMode: immediate -defaultThinkingLevel: medium +defaultThinkingLevel: xhigh hideThinkingBlock: false -proseOnlyThinking: true +proseOnlyThinking: false terminal: showProgress: true -disabledExtensions: - [] +disabledExtensions: [] statusLine: separator: powerline - preset: nerd + preset: custom contextLine: embedded transparent: true compactThinkingLevel: true showHookStatus: true + sessionAccent: true + leftSegments: + - session_name + - vim + - mode + - hostname + - path + - git + - pr + rightSegments: + - model + - cost + - context_pct + - time_spent + segmentOptions: + model: + showThinkingLevel: true + path: + abbreviate: true + stripWorkPrefix: true + maxLength: 120 + git: + showBranch: false + showStaged: true + showUnstaged: true + showUntracked: true tui: textSizing: true codexResetFireworks: false hyperlinks: auto tight: true + resizeScrollback: rebuild + titleSpinner: pulse display: shimmer: kitt smoothStreaming: true showTokenUsage: true + pinnedAgents: collapsed + subagentLivePreview: true task: showResolvedModelBadge: true - maxConcurrency: 2 + maxConcurrency: 3 agentModelOverrides: designer: llamacpp (dankclaw-3090)/frank-zealot librarian: llamacpp (dankclaw-3090)/frank-zealot - reviewer: llamacpp (dankclaw-3090)/frank-zealot - scout: llamacpp (dankclaw-3090)/frank-zealot - security-reviewer: llamacpp (dankclaw-3090)/frank-zealot + reviewer: llamacpp (dankserver)/frank-archon + scout: llamacpp (dankserver)/frank-archon + security-reviewer: llamacpp (dankclaw)/frank-dragoon sonic: llamacpp (dankclaw-3090)/frank-zealot - task: llamacpp (dankclaw-3090)/frank-zealot + task: llamacpp (dankserver)/frank-archon + eager: default + enableLsp: true snapcompact: systemPrompt: none toolResults: false + shape: auto extendedContext: false ttsr: contextMode: discard @@ -136,12 +169,12 @@ checkpoint: enabled: true readLineNumbers: true startup: - showSplash: false + showSplash: true changelogMode: summary update: channel: stable features: - unexpectedStopDetection: smart + unexpectedStopDetection: mechanical stt: submitTrigger: say-submit enabled: true @@ -160,6 +193,7 @@ images: - litterbox edit: mode: hashline + fuzzyThreshold: 0.9 dev: autoqaConsent: granted astGrep: @@ -169,7 +203,7 @@ vault: tts: localVoice: bm_george speech: - enabled: false + enabled: true mode: yield enhanced: true voice: am_fenrir @@ -178,6 +212,9 @@ secrets: read: renderMarkdown: true toolResultPreview: true + defaultLimit: 1000 + summarize: + prose: false lsp: formatOnWrite: true diagnosticsOnEdit: true @@ -187,4 +224,42 @@ speechgen: live: voice: vale contextPromotion: - enabled: true \ No newline at end of file + enabled: true +title: + icons: emoji + generator: tiny +followUpMode: one-at-a-time +tools: + approvalMode: yolo + format: auto +marketplace: + autoUpdate: notify +bash: + allowCompoundCommands: true + gitGuard: true +bashInterceptor: + enabled: false +shellMinimizer: + sourceOutlineLevel: default +generate_image: + enabled: false +computer: + enabled: true + display: active +ratchet: + enabled: true +github: + enabled: true +security: + enabled: true +todo: + reminders: true +mcp: + notifications: false +plan: + defaultOnStartup: false +isolation: + backend: auto +worktree: + onStart: create + onExit: keep \ No newline at end of file diff --git a/agent/models.yml b/agent/models.yml index ab7f20e..5b37976 100644 --- a/agent/models.yml +++ b/agent/models.yml @@ -16,25 +16,25 @@ providers: auth: none models: - id: frank-archon - # Model id renamed from frank-primary on 2026-10-08 (official + # Model id renamed from frank-archon on 2026-10-08 (official # unit-name scheme; the systemd service, scripts and runbooks keep - # the frank-primary name — service names are unchanged). + # the frank-archon name — service names are unchanged). # Server-side compaction routes to compaction.remoteEndpoint in # config.yml (192.168.0.143:7771 — frank-zealot's 3090); the # compactionModel candidate keeps the wire model id valid there. compactionModel: llamacpp (dankclaw-3090)/frank-zealot - name: "frank-archon (dankserver)" + name: "frank-archon" # Dankserver: BOTH Radeon AI PRO R9700s (gfx1201, TP=2 over the # 2026-09-20 board swap's root ports, wht6 wire). Engine: # radiance (StillDeadcode, Apache-2.0) from the digest-pinned # stilldeadcode/radiance image (index digest sha256:4c3f4845..., 287 # MiB, kernels prebuilt for gfx1201), plain `podman run` through - # scripts/serve-frank-primary.sh, root unit (User=dank, dank's + # scripts/serve-frank-archon.sh, root unit (User=dank, dank's # rootless podman storage). Serving the OFFICIAL # Qwen/Qwen3.8-Flash-Next-FP8 at NATIVE modelopt block-FP8 # precision — a rad-convert no-recipe pure copy into # qwen4exp-fp8-native.rad (172.76 GiB measured by plan-only), built by - # scripts/build-frank-primary-rad.sh against a staging dir whose + # scripts/build-frank-archon-rad.sh against a staging dir whose # config.json drops quantization_config so the shipped qwen4exp # plugin's (qwen4exp, "") selection key matches; per-weight # encodings are untouched. Experts stream from a 40 GiB/rank @@ -44,7 +44,7 @@ providers: # froggeric's fixed qwen3.8 v22.5 # (scripts/qwen38-froggeric-v22.5.jinja) via # --override-chat-template. Rollback: git tag - # frank-primary-freetoken-pr587-20261005 (FreeToken, one card). + # frank-archon-freetoken-pr587-20261005 (FreeToken, one card). contextWindow: 200000 # maxTokens must survive the harness compaction gap AND the chars/4 # token-estimate under-run on code-heavy prompts. The clamp is @@ -96,8 +96,8 @@ providers: auth: none models: - id: frank-dragoon - # Model id renamed from frank-large on 2026-10-08 (official - # unit-name scheme; the service/unit/scripts keep the frank-large + # Model id renamed from frank-dragoon on 2026-10-08 (official + # unit-name scheme; the service/unit/scripts keep the frank-dragoon # name — service names are unchanged). name: "frank-dragoon (dankclaw-gpu)" # Server-side compaction runs on the compaction.remoteEndpoint in @@ -107,37 +107,45 @@ providers: compactionModel: llamacpp (dankclaw-3090)/frank-zealot # halogen-flash-server 0.16.2 (ghcr.io/peonist-ai/ # halogen-flash-server@sha256:0c61bf84, digest-pinned) serving the - # Quat3rnion ABLITERATED Swift1.5 finetune of peonist's - # Qwen3.8-Flash-Next v2 checkpoint (qwen38-flash-next-v2-swift15- - # abliterated.hgn, ~62 GiB resident, + REQUIRED n-gram table + - # vision tower) on the Strix Halo iGPU: TWO slots at - # HALOGEN_CTX=262144 each with the MTP head ALWAYS ON + # Quat3rnion NATIVE v2 ABLITERATED conversion of orcarouter's pinned + # BF16 Qwen3.8-Flash-Next (qwen38-flash-next-v2-abliterated.hgn, + # ~62 GiB resident, + REQUIRED n-gram table + vision tower, both + # hardlinked from the swift15 dir) on the Strix Halo iGPU: TWO slots + # over ONE 401,408-position KV pool (= 2 x ctx, raised 2026-10-18) at + # HALOGEN_CTX=200704 (the ceiling lowered from the card's 262,144 on + # 2026-10-17; ~10.8 GiB reserved where 200,704 cost 5.5, 262,144 cost + # 7.2 and 524,288 measured 14.6), with the MTP head ALWAYS ON # (HALOGEN_SPEC_ADAPT=0 — the default adaptive policy halves - # decode). Card: 53-57 t/s greedy, ~1,640 t/s prefill at 34k, ~72% - # fewer thinking tokens than the censored 27B. ABLITERATED base - # (refusals should not return) and VISION ON (OpenAI image_url + # decode). Measured 2026-10-17: 50 t/s greedy decode, 1,604 t/s + # cold prefill at 59k, NIAH 18/18. ABLITERATED base (no refusals: + # 0/5 on the hostile census) and VISION ON (OpenAI image_url # parts; >=256 px images or it answers "video"). Runbook: - # serverAppConfigs-docs/LLM/frank-large-flash-server-v2-swift15.md. - # Per-SLOT window the harness may fill — deliberately BELOW the - # engine ceiling (HALOGEN_CTX=262144): the clamp below leaves a - # 45k gap that absorbs the estimate error. - contextWindow: 217088 + # serverAppConfigs-docs/LLM/frank-dragoon-flash-server-v2-native.md. + # Window the harness may fill — deliberately BELOW the engine + # ceiling (HALOGEN_CTX=200704, lowered from 262,144 on 2026-10-17): + # the clamp below leaves the 45k gap that absorbs the estimate error. + # Both slots SHARE one 401,408-position KV pool — exactly two full + # windows — so TWO maximum-length conversations can be resident at the + # same time (at the old pool == ctx 200,704 only two of <=100k could). + # The per-request ceiling is unchanged, so this window is unchanged. + contextWindow: 155648 # The clamp is max_tokens = min(maxTokens, contextWindow − est − # 4096); the chars/4 est UNDER-counts the rendered prompt by ~3 % # on code/agent traffic (measured 2026-10-07: est 152,938 -> - # server 157,388). Worst-case request = ctx − 4096 + 3 % est - # error ≈ 219k, inside the 262,144 engine ceiling with ~43k - # margin (robust to a 10 % under-count). Compaction fires at 85 % - # of the window = 184,524 est ≈ 190k measured (Frank's 180k - # target) and rides on frank-zealot: input ≈ threshold − - # keepRecent(20k) ≈ 170k, inside its 200,704 slot. - # HALOGEN_MAX_TOKENS_CAP in frank-large.env must stay >= this. + # server 157,388). Worst-case request = window − 4096 + 3 % est + # error ≈ 156.2k, inside the 200,704 engine ceiling with ~44k + # margin (robust to a ~25 % under-count). Compaction fires at 85 % + # of the window = 132,300 est ≈ 136k measured — the 180k target of + # the 262,144 era is unreachable now (the window itself is 155,648) + # — and rides on frank-zealot: input ≈ threshold − keepRecent(20k) + # ≈ 112k, inside its 200,704 slot. + # HALOGEN_MAX_TOKENS_CAP in frank-dragoon.env must stay >= this. maxTokens: 45056 reasoning: true # VISION ON as of 2026-10-06: the v2 vision tower loads beside the # checkpoint (HALOGEN_VISION_TOWER; red-PNG probe verified on the # card). image_url content parts only — the legacy top-level - # images field is the frank-secondary trap, do not repeat it here. + # images field is the frank-zealot trap, do not repeat it here. input: [text, image] compat: # flash-server emits thinking as `reasoning_content` — same @@ -155,7 +163,7 @@ providers: max: xhigh # The card's thinking recipe, on the wire. The flash-server # engine HAS a server-side sampler (HALOGEN_TEMPERATURE/TOP_P/ - # TOP_K = 1.0 / 0.95 / 20 in frank-large.env) — these match it, + # TOP_K = 1.0 / 0.95 / 20 in frank-dragoon.env) — these match it, # so per-request values are consistent, not load-bearing. extraBody: temperature: 1.0 @@ -167,35 +175,47 @@ providers: auth: none models: - id: frank-zealot - # Model id renamed from frank-secondary on 2026-10-08 (official + # Model id renamed from frank-zealot on 2026-10-08 (official # unit-name scheme; the service/unit/scripts keep the - # frank-secondary name — service names are unchanged). + # frank-zealot name — service names are unchanged). name: "frank-zealot (dankclaw-3090)" # Server-side compaction routes to compaction.remoteEndpoint in # config.yml (192.168.0.143:7771 — this endpoint); the # compactionModel candidate keeps the wire model id valid there. compactionModel: llamacpp (dankclaw-3090)/frank-zealot - # Dankclaw's RTX 3090: llama.cpp (master, CUDA sm_86 build) serving - # HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive at Q6_K - # (7,359,259,008 B) — qwen35 dense hybrid (32 layers: 8 full-attention - # + 24 Gated DeltaNet, 4 KV heads x 256 dim, native 262,144), TWO - # conversations (--ctx-size 401408 / --parallel 2) at Frank's 200k cap - # each. Exact KV: f16 K + f16 V. Vision via the publisher's OWN - # BF16 mmproj (921,704,448 B) — the model is natively multimodal. - # **MTP IS OFF** because the file carries no nextn/mtp tensors — - # SPEC_TYPE=none strips both spec flags. Priced from the MiMo Q6_K - # boots at this geometry (21,276/2,849 at ubatch 1024; 21,846/2,279 at - # 2048). 2026-10-07 (late) swap from Gemma4-26B-A4B Q4_K_M (1x200,704). - # Runbook: - # serverAppConfigs-docs/LLM/frank-secondary-llama-qwen35-9b-q6k-2x200704.md. - # contextWindow is the PER-SLOT window (Frank's cap): a longer - # prompt needs compaction. - contextWindow: 200704 + # Dankclaw's RTX 3090: llama.cpp PrismML fork build (vendor 10777, + # commit e3de71522 — the ONLY loader for this payload's custom tensor + # type 142 + prism.hadamard.* metadata, and the minimum build that + # pairs MTP with a quantized V cache) serving + # prism-ml/Ternary-Bonsai-2-9B-gguf at PQ2_0 (2,675,410,720 B) WITH the + # MTP head in the file — qwen35 hybrid, 32 layers (8 full-attention + + # 24 Gated DeltaNet), 4 KV heads x 256 dim, native 262,144 — in THREE + # conversations (--ctx-size 786432 / --parallel 3), each slot at the + # model's TRAINED window. + # KV is q8_0 K + q8_0 V (17 KiB/token over the 8 full layers = + # 13,056 MiB pool, ledger-exact); f16 KV would bill 26,112 MiB and + # cannot boot this card. Boot ledger 17,876 used / 6,249 free. Vision + # through the publisher's Q8_0 mmproj (624,229,664 B — Q8_0 is the + # publisher's requirement for concurrent image requests), whose + # worst-case lands outside the engine's fit projection. **MTP OFF — + # measured, not assumed**: the draft context bills its own f16 KV over + # the WHOLE pool (3,072 MiB) and at ubatch 2048 that squeeze halves + # decode (167.2 → 109.2 t/s); SPEC_TYPE=draft-mtp + UBATCH_SIZE=1024 is + # the 213.5 t/s arm if the card ever has room. 2026-10-18 swap from + # Ternary-Bonsai-2-27B PQ2_0 at 2 × 200,704. Measured: 167.2 t/s + # single-stream greedy decode, 280.2 t/s across three concurrent + # streams, 2,877 t/s prefill at 106,418. Base-alignment: censored base + # lineage; unlike the 27B there is NO CRACK re-export matching this + # file. Runbook: + # serverAppConfigs-docs/LLM/frank-zealot-llama-prism-bonsai9-mtp.md. + # contextWindow is the PER-SLOT window (= the native 262,144): a longer + # prompt needs compaction — llama.cpp answers a 400, never truncates. + contextWindow: 262144 # Prompt + budget must fit inside the slot window; thinking counts # against the budget. Compaction fires at 85 % of the window = - # 170,598 est; worst-case prompt + budget ≈ 170,598 × 1.03 + - # 16,384 ≈ 192,100 ≤ 200,704 — a longer prompt is a 400 naming - # the limit, never a truncation. + # 222,822 est; worst-case prompt + budget ≈ 222,822 × 1.03 + + # 16,384 ≈ 245,891 ≤ 262,144. This endpoint is the fleet's + # compaction hub: the widest window in the fleet. maxTokens: 16384 reasoning: true input: [text, image] @@ -204,29 +224,33 @@ providers: # `reasoning_content` — the same field the MiMo/Ornith eras used; # harness reads unchanged. reasoningContentField: "reasoning_content" - # The Qwen3.5 chat template has NO reasoning_effort variable (unlike - # the Qwen3.8-template endpoints, where an unmapped level is a hard - # Jinja raise). llama.cpp passes chat_template_kwargs through to - # Jinja, and Jinja ignores variables a template never reads — so the - # map is inert here, kept so role-level overrides resolve identically - # across the fleet. + # Bonsai-2's template DOES read reasoning_effort (the Qwen3.5-9B + # template did not — the map used to be inert here): it accepts ONLY + # xhigh (default), medium, low and calls raise_exception on anything + # else, so an unmapped harness level is a hard HTTP 500 on the role's + # first request, naming Jinja and not the model. The fold below is + # therefore load-bearing, identical to the frank-archon/dragoon law. + # llama.cpp passes chat_template_kwargs through to Jinja. reasoningEffortMap: minimal: low low: low medium: medium high: xhigh max: xhigh - # The Qwen3.5 publisher recipe (model card, thinking mode): - # temperature 0.6 / top_p 0.95 / top_k 20 / min_p 0. Non-thinking - # mode is 0.7/0.8/20/0 — the harness runs thinking mode. + # The payload's OWN sampling metadata (general.sampling.* in the + # GGUF): temperature 1.0 / top_p 0.95 / top_k 20 — thinking-mode + # recipe, the same trio the other Qwen3.8-family endpoints carry. + # (The old 0.6 was the Qwen3.5-9B publisher's card, not this file.) # extraBody is merged last and wins over the harness default. extraBody: - temperature: 0.6 + temperature: 1.0 top_p: 0.95 top_k: 20 min_p: 0.0 presence_penalty: 0.0 chat_template_kwargs: enable_thinking: true - # (no preserve_thinking: that kwarg belongs to the Qwen3.8 - # templates; nothing in this template reads it) + # The template DOES read preserve_thinking: when false it drops + # prior assistants' blocks from history. Keep them — + # multi-turn tool traffic on this endpoint is the majority. + preserve_thinking: true diff --git a/omp-docs/core/index.md b/omp-docs/core/index.md index 4748631..c6c375e 100644 --- a/omp-docs/core/index.md +++ b/omp-docs/core/index.md @@ -1,12 +1,18 @@ # Core Documentation -These files define the structural conventions that govern the pi agent system itself. They are the grammar rules — boring until you break them, then devastating. +These files define the structural conventions that govern the agent system itself. They are the grammar rules — boring until you break them, then devastating. + +> **Archive note (2026-10-18).** The settings pages (`settings.md`, `settings.json`) +> capture the retired **pi** harness configuration (`frank-default-*` endpoints, +> RTX 3090-era hardware) and are historical records. The live config is +> `agent/config.yml` + `agent/models.yml` in this repo; current fleet endpoints +> are on [System hosts](/system/index.md). The AGENTS.md format pages remain current. ## Concept Files * [AGENTS.md Format Specification](agents-md-format.md) — Canonical structure and conventions for the system-level instruction file that governs agent behavior. * [AGENTS.md Index](index-doc.md) — Overview of the cached tool documentation system and how to add new entries. -* [Pi Settings System](settings.md) — Current system configuration: providers, models, packages, subagent overrides, and runtime options. +* [Pi Settings System](settings.md) — pi-era `settings.json` record (archive): providers, models, packages, subagent overrides. ## Change Tracking diff --git a/omp-docs/log.md b/omp-docs/log.md index 0b467fa..82841dd 100644 --- a/omp-docs/log.md +++ b/omp-docs/log.md @@ -11,6 +11,43 @@ timestamp: 2026-08-28 # Bundle Change Log +## 2026-10-18 — Fleet law: filed PRs open in Frank's browser immediately + +Both repos' git rules now require it: the moment a PR is opened, `xdg-open ` drops a Firefox tab on the workstation (AGENTS.md § Trunk-based SDLC here; § Git Workflow step 6 in `dank/serverAppConfigs`, riding their PR #6 branch). + +## 2026-10-18 — Trunk law: extension route closed unmerged; direct repo alignment instead + +Built and live-verified a cwd-scoped `before_agent_start` extension (quote probes: fires under `~/Projects`, silent elsewhere; kept as `.AGENTTRASH/trunk-law.js`). **Operator closed PR #9 unmerged** in favor of editing each repo's own AGENTS.md. Durable finding from the exploration: every context-file provider (AGENTS.md walk-up, `.omp/` dirs, CLAUDE.md) resolves at or below the repo root — a `~/Projects/AGENTS.md` for ancestor scope can never load; user-level `APPEND_SYSTEM.md` broadcasts to *all* sessions. Second finding: **serverAppConfigs never had git-flow** — its AGENTS.md mandated no branch regime at all (direct commit+push); a trunk + PR law is being added there by PR in that repo, not corrected. + +## 2026-10-18 — SDLC switched to trunk-based development + +`develop` retired by operator decision (single-dev repo; the branch bought nothing and cost a back-merge every release). New law in AGENTS.md § *Trunk-based SDLC*: branch off the freshest `origin/main` before every work item, PRs target `main` directly, `--no-ff` merges, tags `vX.Y.Z` straight on main. No back-merges, no release branches. The last back-merge (`527596a`) lands with this switch; the managed skill `gitflow-back-merge-plumbing` is now historical. + +## 2026-10-18 — Sibling-vault overlap census; system docs realigned to live ground truth + +Census of `omp-docs/` against `~/Projects/serverAppConfig/serverAppConfigs-docs/` (subagent + live-ssh verification) found four contradicting pairs; all OURS-side stale pages corrected, THEIRS side flagged only (their repo, their PR flow). Ground truth from read-only probes on both boxes 2026-10-18. + +* **Hardware drift corrected** (`system/dankserver.md`, `system/dankclaw.md` rewritten, `AGENTS.md` machine table): RTX 3090 moved Dankserver→Dankclaw 2026-09; dankserver now 2× Radeon AI PRO R9700 (7700X stays — the "board swap" story is false), 246 GiB RAM, no swap; dankclaw 121 GiB RAM + 64 GiB swap. Served models per live units: frank-archon (:7770 dankserver, radiance TP=2 iq4r), frank-dragoon (:7770 dankclaw, halogen NATIVE v2, iGPU), frank-zealot (:7771 dankclaw, llama.cpp PrismML, Ternary-Bonsai-2-27B PQ2_0, 3090). Both kernels 7.0.0-38-generic; dankclaw :7770 needs no auth. +* **Gitea pages corrected** (`tools/gitea/` index + 3 subpages): `gitea-caddy` quadlet retired — fleet Caddy fronts the domain; data tree is `/home/dank/Containers/gitea/{data,postgres,env}` (2026-09-01 standard), `/opt/gitea/` is a do-not-use leftover; LAN IP, live domain, no WAN address. +* **Pi-era pages demarcated as archive** (`pi/index.md`, `core/index.md` banners; `core/index.md` said settings.md was "Current"): `frank-default-small/large` endpoints, role tables, and 3090/4070 hardware rows now read as pi-era records. `tools/llama-cpp/index.md` fleet note modernized to the one remaining llama.cpp endpoint (zealot :7771). +* **Their-side staleness flagged, NOT edited** (for operator clarification): `Agent/OMP Harness.md` still says thresholdPercent 70 — live config is **95** (`agent/config.yml:84`); `index.md:18` says Dankserver Ubuntu 24.04 vs their own specs page 26.04; `Dankclaw/Stack.md` "current mapping (2026-09-03)" predates the ACTIVE dragoon/zealot runbooks it links beside; `index.md:548` links the superseded pi-era KB at `~/.pi/agent/docs/`. +* Consistent duplicates (no action): niri/noctalia desktop pages, Caddy reference. Divergence clarified: their "composer" = OpenWebUI chat box; ours = omp composer shape — unrelated subjects. + +## 2026-10-18 — Status line docs truth audit (full-source re-verification) + +Exhaustive claim-by-claim re-audit of [OMP Status Line Customization](/pi/statusline.md) against the minified `dist/cli.js` bundle plus a live screenshot matrix (band × {off, percentage, embedded}, claude × off). Page carries an **Audit log** section; four first-pass claims were false and are corrected (see there): claude's rule is *not* the context meter (meter is `box`/`band` only; the "red rule" was the session-accent filler), the "Tern-only" composer-bar claim was bogus (the readout is `composer.tokenRate`, default off), `segmentOptions` are **not** gated to `preset: custom` (only the segment arrays are), and the `mode` segment's states are Plan/Prewalk/Goal/Vibe/Loop (no yolo). Page expanded with: the 7-preset defaults table, per-shape `statusAttachment`/`bottomBar` model (8 built-ins + plugin shape registry), `contextLine` per-value behavior, the 27-segment catalog with triggers/options, `segmentOptions` schema, and the full `statusLine.*`/`composer.*` knob registry. The bundle's own "(box composer only)" knob description for `contextLine` is upstream-wrong — band honors it. + +ServerAppConfigs-docs overlap census: flagged separately for the operator (morning report); no doc merged/changed on either side. + +## 2026-10-18 — Status line rebuilt on custom segments; frank-archon display name slimmed + +Interactive tune-up of the omp status bar (grilling session, live loop: config edit → watcher repaint → niri screenshot verify). New knowledge page: [OMP Status Line Customization](/pi/statusline.md). + +* **Mechanics discovered:** `leftSegments`/`rightSegments` are inert unless `preset: custom` (fleet was on `nerd` with dead arrays; `segmentOptions` *do* merge under named presets); `composer.shape` routes them — `band` merges both arrays into one row above the editor (title rides the working row), `claude` splits them into top chip + bottom strip. The context meter exists **only in `box`/`band`** — `contextLine`: `off` plain rule, `embedded` hoists the context segment into the labeled inline meter (`60% ——— × 200K`), `percentage`/`annotated` paint an unlabeled proportional rule meter (all four live-verified); every other shape's rule is a constant session-accent filler. Working row (session title + tok/s readout gated by `composer.tokenRate`, default off) is composer chrome — model/thinking can never join it. Eight composer shapes ship in the bundle; plugins can register more. +* **Final bar (`band`, after a `claude` sojourn):** left = `session_name · vim · mode · hostname · path · git(no branch text) · pr`; right cluster in array order = `model · cost · time_spent` (`context_pct` hoists out of the run to paint the labeled inline meter `60% ——— × 200K` as a flexible spacer between the groups). Cut: tok/s duplicate, clock, cache trio, `context_total`, `subagents`, `session` hash, and `token_in`/`token_out` (cumulative totals live in `/session`). `path`: logical `project/worktree` label (`stripWorkPrefix: true`, kept after a live `false` trial of the full cwd); branch text dropped (worktree branches are autogenerated), dirty badges kept. +* **models.yml:** frank-archon display `name` slimmed to `"frank-archon"` (endpoint suffix dropped; `id` untouched). +* **Out of scope noted:** worktree name generation (`wt--`) is omp-internal; possible upstream feature request. + ## 2026-10-09 — Blankpad DE redesign: desk profiles, keybind rework, Handy fleet wiring Branch `blankpad-de-redesign` (worktree `wt/de-redesign-20261009`). Full sweep + redesign of the niri/noctalia/Handy stack on blankpad. diff --git a/omp-docs/pi/index.md b/omp-docs/pi/index.md index 656caf4..a444c85 100644 --- a/omp-docs/pi/index.md +++ b/omp-docs/pi/index.md @@ -1,13 +1,18 @@ # Pi Configuration -Documentation for the pi coding agent installation on ](../system/index.md). -Everything here is configured locally on the workstation; the LLM providers are the -two llama.cpp servers (Dankserver, Dankclaw). +> **Archive note (2026-10-18).** Most pages in this directory document the retired +> **pi** harness (settings.json / models.json, `frank-default-*` endpoints, verified +> 2026-08-28). The live harness is **omp** — its config is `agent/config.yml` + +> `agent/models.yml` in this repo, the current fleet endpoints are on +> [System hosts](/system/index.md), and omp-specific knowledge lands in pages like +> [OMP Status Line Customization](/pi/statusline.md) below. Read pi pages as +> historical records, not current state. ## Configuration Files - [Pi Settings System (settings.json)](/core/settings.md) — Main `settings.json` reference. Providers, models, packages, subagent overrides. - [Pi Models Configuration](/pi/models.md) — `models.json` reference. Provider definitions, model specs, endpoints. +- [OMP Status Line Customization](/pi/statusline.md) — How presets, composer shapes, and segment arrays actually interact; the fleet's tuned bar. ## Extensions diff --git a/omp-docs/system/dankclaw.md b/omp-docs/system/dankclaw.md index 91e9f69..5601937 100644 --- a/omp-docs/system/dankclaw.md +++ b/omp-docs/system/dankclaw.md @@ -1,83 +1,79 @@ --- type: reference title: Dankclaw -description: Secondary inference server at 192.168.0.143. Runs llama.cpp (frank-default-large). +description: Inference and services box at 192.168.0.143 — frank-dragoon (halogen-flash-server, Strix Halo iGPU, :7770) and frank-zealot (llama.cpp on the RTX 3090, :7771), plus Gitea/Caddy/OpenWebUI services. tags: - network - llamacpp - inference - server - comfyui - - unverified generated: by: chief-designer/agent at: 2026-08-26T00:00:00Z -verified: 2026-08-28 +verified: 2026-10-18 --- # Dankclaw -Secondary llama.cpp inference server for the Frank Program. Serves larger models used by planner, worker, reviewer, oracle, and context-builder subagents. +Strix Halo mini-PC carrying the fleet's secondary models and most of the +service stack (Gitea, Caddy, OpenWebUI, SearXNG). Two GPU-class devices: the +Radeon 8060S iGPU with 119 GiB unified memory, and the RTX 3090 moved over +from Dankserver in September 2026. ## Connection Details | Property | Value | |----------|-------| | **Hostname** | dankclaw | -| **IP Address** | 192.168.0.143 | -| **Port** | 7770 | -| **Base URL** | `http://192.168.0.143:7770/v1` | -| **API** | OpenAI-compatible completions | -| **Authentication** | API key configured | +| **IP Address** | 192.168.0.143 (LAN) | +| **Auth** | none required on :7770 (verified 2026-10-18) | -## Models +## Inference Services -| Model ID | Context Window | Reasoning | Input Types | -|----------|---------------|-----------|-------------| -| `frank-default-large` | 262,144 tokens | Yes | Text, *Image* (unverified) | +| Model ID | Unit | Endpoint | Engine / weights | +|----------|------|----------|------------------| +| `frank-dragoon` | `frank-dragoon.service` (root) | `:7770` | halogen-flash-server container — Quat3rnion NATIVE v2 abliterated Qwen3.8-Flash-Next, MTP spec decode, 2 slots over ONE 200,704-position pool, vision ON, **Strix Halo iGPU** (unified memory) | +| `frank-zealot` | `frank-zealot.service` (root) | `:7771` | llama.cpp (PrismML fork, build 10754) — Ternary-Bonsai-2-27B PQ2_0 GGUF (qwen35 hybrid), 2×200,704 slots, q8_0 K+V, mmproj vision, **RTX 3090** | -## Services - -### llama.cpp - -| Property | Value | -|----------|-------| -| **Port** | 7770 | -| **Models** | `frank-default-large` | - -## Hardware - -| Property | Value | -|----------|-------| -| **CPU** | AMD Ryzen AI MAX+ 395 (16C/16T, Strix Halo) | -| **GPU** | Radeon 8060S integrated (gfx1151, amdgpu) | -| **RAM** | 119 GiB | -| **Storage** | Kingston SNV3S1000G NVMe (931.5 GB), ~676 GB free | -| **OS** | Ubuntu 26.04 LTS, kernel 7.0.0-30-generic | -| **ROCm** | 7.2.4 (driver: 7.0.0-30-generic) | -| **Python** | 3.14.4 (system) | - -## Usage - -Dankclaw handles complex tasks delegated by subagent overrides. The `frank-default-large` model provides extended context. *Multimodal input support is unverified.* +Harness-side context windows (`agent/models.yml`): dragoon 155,648, +zealot 200,704 per slot. The models.yml display labels "(dankclaw-gpu)" / +"(dankclaw-3090)" predate naming cleanup; the hardware column above is +current. Subagent roles `scout`, `sonic`, `designer`, `librarian`, +`security-reviewer` route to frank-zealot; `reviewer`/`task` run on +frank-archon (Dankserver). ```bash -# Health check -curl http://192.168.0.143:7770/health - -# Test with large model -curl http://192.168.0.143:7770/v1/chat/completions \ - -H "Content-Type: application/json" \ - -H "Authorization: Bearer " \ - -d '{"model":"frank-default-large","messages":[{"role":"user","content":"Hello"}],"max_tokens":32}' +curl http://192.168.0.143:7770/v1/models # dragoon +curl http://192.168.0.143:7771/v1/models # zealot ``` -## Related Knowledge Bases (sibling project on the workstation) +## Hardware (verified live 2026-10-18) -- **serverAppConfigs** — `/home/dank/Projects/serverAppConfigs/` — Podman deployment config for this host (AI, search, development, observability stack, incl. the Hermes compose service) **plus the LLM inference fleet** (frank-default-large, CIRU ROCmFPX llama.cpp, :7770). The former `vllmScripts` repo merged into it on 2026-08-22 (history preserved). Start at `/home/dank/Projects/serverAppConfigs/docs/index.md` (see `dankclaw/compose.yaml` + `docs/Dankclaw/`; LLM fleet at `docs/LLM/index.md`, deploy runbook at `docs/LLM/deployment.md`). +| Property | Value | +|----------|-------| +| **CPU/APU** | AMD Ryzen AI MAX+ 395 (Strix Halo, Radeon 8060S, gfx1151) | +| **dGPU** | NVIDIA GeForce RTX 3090 (moved from Dankserver 2026-09) | +| **RAM** | 121 GiB (mostly usable as GPU unified memory) | +| **Swap** | 64 GiB | +| **OS** | Ubuntu 26.04 LTS, kernel 7.0.0-38-generic | + +The pre-rename story (`frank-default-large` on ROCmFPX llama.cpp/CIRU, +262,144-token context) was superseded by the 2026-10-08/09 model-id rename +and the dragoon/zealot engine swaps; the 119→121 GiB RAM figure follows the +live `free` reading. + +## Related Knowledge Bases (sibling project) + +- **serverAppConfigs** — deployment repo + vault, on this workstation at + `~/Projects/serverAppConfig/` (docs vault: `~/Projects/serverAppConfig/serverAppConfigs-docs/`). + Live runbooks: `LLM/frank-dragoon-flash-server-v2-native.md` and + `LLM/frank-zealot-llama-prism-bonsai2-pq20.md` — deploy-side source of + truth for engines, flags, and restart procedures. Service stack docs under + `Dankclaw/`, `Infrastructure/`. ## See Also -- [[models|models]] — Provider definitions -- [[dankserver|dankserver]] — Primary server +- [[dankserver|dankserver]] — the main-model box (frank-archon) +- [/tools/gitea/index.md](/tools/gitea/index.md) — Gitea stack on this host - [[network|network]] — Network topology diff --git a/omp-docs/system/dankserver.md b/omp-docs/system/dankserver.md index 9c62697..714a617 100644 --- a/omp-docs/system/dankserver.md +++ b/omp-docs/system/dankserver.md @@ -1,22 +1,24 @@ --- type: reference title: Dankserver -description: Primary llama.cpp inference server at 192.168.0.235:7770, serving frank-default-small with 163,840-token context window. +description: Radiance inference server at 192.168.0.235:7770, serving frank-archon (Qwen3.8-Flash-Next iq4r, 2x R9700 TP=2, 200,000-token context). tags: - network - llamacpp - inference - server - - unverified generated: by: chief-designer/agent -verified: 2026-08-28 +verified: 2026-10-18 status: stable --- # Dankserver -Primary llama.cpp inference server for the Frank Program. Serves `frank-default-small` — a fast, capable model with image support. +Primary inference server for the Frank Program. Serves `frank-archon`, the +main agent model, from a pair of Radeon AI PRO R9700s (tensor-parallel 2). +The RTX 3090 that used to live here was removed 2026-09-15 and now runs on +Dankclaw. ## Connection Details @@ -28,19 +30,24 @@ Primary llama.cpp inference server for the Frank Program. Serves `frank-default- | **Base URL** | `http://192.168.0.235:7770/v1` | | **API** | OpenAI-compatible completions | | **Authentication** | None | +| **Systemd unit** | `frank-archon.service` (root) | ## Model | Property | Value | |----------|-------| -| **Model ID** | `frank-default-small` | -| **Context Window** | 163,840 tokens | -| **Reasoning** | Supported | -| **Input Types** | Text, *Image* (unverified) | +| **Model ID** | `frank-archon` (display name `frank-archon`) | +| **Weights** | Qwen3.8-Flash-Next, radiance iq4r (publisher build) | +| **Engine** | radiance, tensor-parallel 2 across both R9700s | +| **Context Window** | 200,000 tokens (harness `models.yml`; served pool may differ — see runbook) | + +`frank-medium` (former dual-GPU mid tier) is masked and retired. ## Usage -Dankserver serves the small subagent model `frank-default-small`. Small subagent roles route here unless a role override picks a different model. +Dankserver carries the main-session model. Subagent role overrides in +`agent/models.yml` route here for `task` and `reviewer`; scout/sonic/designer +route to Dankclaw. ```bash # Health check @@ -49,27 +56,34 @@ curl http://192.168.0.235:7770/health # Quick test curl http://192.168.0.235:7770/v1/chat/completions \ -H "Content-Type: application/json" \ - -d '{"model":"frank-default-small","messages":[{"role":"user","content":"Hello"}],"max_tokens":32}' + -d '{"model":"frank-archon","messages":[{"role":"user","content":"Hello"}],"max_tokens":32}' ``` -## Hardware +## Hardware (verified live 2026-10-18) | Property | Value | |----------|-------| -| **CPU** | AMD Ryzen 7 7700X (8C/16T, Raphael) | -| **GPU** | NVIDIA GeForce RTX 3090 (24 GiB VRAM, EVGA) | -| **RAM** | 60 GiB | -| **Swap** | 64 GiB (/swapfile) | -| **Storage** | Kingston SNV3S1000G NVMe (931.5 GB) + md0 RAID (6×18.2T Toshiba, /mnt/entropy, 91T) | -| **OS** | Ubuntu 26.04 LTS, kernel 7.0.0-30-generic | -| **NVIDIA Driver** | 595.84 | +| **CPU** | AMD Ryzen 7 7700X (8C/16T, Raphael iGPU on board) | +| **GPU** | 2× AMD Radeon AI PRO R9700 (Navi 48, 32 GiB each) | +| **RAM** | 246 GiB | +| **Swap** | effectively none (~0.1 GiB) — the 64 GiB swapfile is on Dankclaw, not here | +| **Storage** | 7× 18.2 TB HDD + 1.8 TB NVMe (layout owned by the deploy repo) | +| **OS** | Ubuntu 26.04.1 LTS, kernel 7.0.0-38-generic | -## Related Knowledge Bases (sibling project on the workstation) +The old page (verified 2026-08-28) listed an RTX 3090, 60 GiB RAM, and a +64 GiB swapfile here; all three were superseded by the 2026-09 hardware swap. -- **serverAppConfigs** — `/home/dank/Projects/serverAppConfigs/` — Podman deployment config for this host (media and library stack: RomM, Copyparty, Calibre-Web) **plus the LLM inference fleet** (frank-default-small, llama.cpp, :7770). The former `vllmScripts` repo merged into it on 2026-08-22 (history preserved). Start at `/home/dank/Projects/serverAppConfigs/docs/index.md` (see `dankserver/compose.yaml` + `docs/Dankserver/`; LLM fleet at `docs/LLM/index.md`, deploy runbook at `docs/LLM/deployment.md`). +## Related Knowledge Bases (sibling project) + +- **serverAppConfigs** — deployment repo + vault, on this workstation at + `~/Projects/serverAppConfig/` (docs vault: `~/Projects/serverAppConfig/serverAppConfigs-docs/`). + Podman/quadlet deploy config for both servers plus the LLM inference fleet. + The live frank-archon runbook (engine flags, KV pool sizing, restart + procedures) is `LLM/frank-archon-radiance-qwen38-iq4r.md` in that vault — + it, not this page, is the deploy-side source of truth. ## See Also -- [[models|models]] — Provider definitions -- [[dankclaw|dankclaw]] — Secondary server +- [[dankclaw|dankclaw]] — the other inference box (dragoon + zealot) - [[network|network]] — Network topology +- [/pi/statusline.md](/pi/statusline.md) — where these models surface in the TUI diff --git a/omp-docs/system/index.md b/omp-docs/system/index.md index 72f0bab..695eabd 100644 --- a/omp-docs/system/index.md +++ b/omp-docs/system/index.md @@ -11,8 +11,8 @@ Dankclaw are the inference servers it talks to. ## Network Systems -- [Dankserver](/system/dankserver.md) — Primary llama.cpp inference server at 192.168.0.235:7770, serving `frank-default-small` (163,840-token context). AMD Ryzen 7 7700X, RTX 3090, Ubuntu 26.04. -- [Dankclaw](/system/dankclaw.md) — Secondary inference server at 192.168.0.143:7770, serving `frank-default-large` (262,144-token context). AMD Ryzen AI MAX+ 395 (Strix Halo), Ubuntu 26.04, ROCm. +- [Dankserver](/system/dankserver.md) — Main-model inference server at 192.168.0.235:7770, serving `frank-archon` (radiance Qwen3.8-Flash-Next, 200K ctx). AMD Ryzen 7 7700X, 2× Radeon AI PRO R9700, Ubuntu 26.04. +- [Dankclaw](/system/dankclaw.md) — Secondary inference + services box at 192.168.0.143: `frank-dragoon` (:7770, halogen-flash-server on the Strix Halo iGPU) and `frank-zealot` (:7771, llama.cpp on the RTX 3090). AMD Ryzen AI MAX+ 395, Ubuntu 26.04. ## Infrastructure Diagram @@ -26,8 +26,8 @@ graph TB end subgraph Network[192.168.0.0/24] - E[dankserver
192.168.0.235:7770
frank-default-small] - F[dankclaw
192.168.0.143:7770
frank-default-large] + E[dankserver
192.168.0.235:7770
frank-archon] + F[dankclaw
192.168.0.143:7770 dragoon
:7771 zealot] end D --> E @@ -42,7 +42,7 @@ graph TB The fleet has one sibling OKF knowledge base outside this bundle. Read it for deployment and inference details. This bundle links to it from the server pages. -* **serverAppConfigs** — `/home/dank/Projects/serverAppConfigs/` (index: `/home/dank/Projects/serverAppConfigs/docs/index.md`). Podman deployment configuration for both servers: compose files, Caddy reverse proxy, deploy scripts, bats tests, and the Obsidian-vault service docs (Dankclaw, Dankserver, Architecture, Infrastructure) — **plus the LLM inference fleet** (merged from the former `vllmScripts` repo on 2026-08-22, history preserved): llama.cpp on Dankserver (:7770, `frank-default-small`) and CIRU ROCmFPX llama.cpp on Dankclaw (:7770, `frank-default-large`). LLM fleet docs: `docs/LLM/index.md`; deploy runbook: `docs/LLM/deployment.md`. +* **serverAppConfigs** — deploy repo + Obsidian vault, on this workstation at `~/Projects/serverAppConfig/` with docs in `~/Projects/serverAppConfig/serverAppConfigs-docs/` (root `index.md` at the vault top — the old `docs/` prefix is gone). Podman deployment configuration for both servers: compose/quadlet files, Caddy reverse proxy, deploy scripts, bats tests, and the vault service docs (Dankclaw, Dankserver, Architecture, Infrastructure) — **plus the LLM inference fleet** (merged from the former `vllmScripts` repo on 2026-08-22, history preserved): radiance frank-archon on Dankserver (:7770), halogen frank-dragoon (:7770) and llama.cpp frank-zealot (:7771) on Dankclaw. The vault's `LLM/` runbooks are the deploy-side source of truth; this bundle documents the agent/harness side. ## Related diff --git a/omp-docs/tools/gitea/architecture.md b/omp-docs/tools/gitea/architecture.md index e78b1d0..a7f5678 100644 --- a/omp-docs/tools/gitea/architecture.md +++ b/omp-docs/tools/gitea/architecture.md @@ -5,13 +5,12 @@ description: Gitea container architecture, network topology, and Caddy reverse p tags: - gitea - architecture - - unverified -verified: 2026-08-28 +verified: 2026-10-18 --- # Gitea Architecture -Three quadlet-managed containers on a shared private Podman network (rootless, user `dank`). Gitea connects to PostgreSQL via network DNS. Caddy proxies HTTP/S to Gitea. +Two quadlet-managed containers (Gitea, PostgreSQL) on a shared private Podman network (rootless, user `dank`). Gitea connects to PostgreSQL via network DNS. The fleet Caddy (separate stack, see [/caddy/index.md](/caddy/index.md)) proxies HTTP/S to Gitea — the old dedicated `gitea-caddy` container is retired. ## Network Topology @@ -63,10 +62,10 @@ Key environment variables: - `DATABASE_HOST=gitea-postgres` (network DNS) - `DATABASE_NAME=gitea` - `DATABASE_USER=gitea` -- `DATABASE_PASSWD` from `/opt/gitea/.env` (mode 0600) +- `DATABASE_PASSWD` from `/home/dank/Containers/gitea/env` (mode 0600) - `USER_UID=1000`, `USER_GID=1000` -Gitea writes `/data/gitea/conf/app.ini` on first start (host: `/opt/gitea/data/gitea-gitea/gitea/conf/app.ini`). The `[database] HOST` and `PASSWD` lines in app.ini override the env vars. When you rename the database container, edit the `HOST` line in app.ini as well. +Gitea writes `/data/gitea/conf/app.ini` on first start (host: `/home/dank/Containers/gitea/data/gitea/conf/app.ini`). The `[database] HOST` and `PASSWD` lines in app.ini override the env vars. When you rename the database container, edit the `HOST` line in app.ini as well. ## Ports diff --git a/omp-docs/tools/gitea/data-persistence.md b/omp-docs/tools/gitea/data-persistence.md index ec36c83..07261a6 100644 --- a/omp-docs/tools/gitea/data-persistence.md +++ b/omp-docs/tools/gitea/data-persistence.md @@ -1,24 +1,23 @@ --- type: reference title: Gitea Data Persistence -description: Gitea data persistence, volume mounts, ownership, and backup strategy on dankclaw. +description: Gitea data persistence, volume mounts, ownership, and backup strategy on dankclaw (Containers/gitea layout). tags: - gitea - data - - unverified -verified: 2026-08-28 +verified: 2026-10-18 --- # Gitea Data Persistence -All data lives on host bind mounts under `/opt/gitea/data/`. Containers are ephemeral. Quadlet stops remove the container (`podman run --rm --replace`). The next start recreates it. Data survives. +All data lives on host bind mounts under `/home/dank/Containers/gitea/` (fleet storage standard since 2026-09-01; quadlet units re-pointed from the old `/opt/gitea/data/` tree, which lingers on disk as a leftover — never write to it). Containers are ephemeral. Quadlet stops remove the container (`podman run --rm --replace`). The next start recreates it. Data survives. ## Volume Layout | Host Path | Container Mount | Contents | |---|---|---| -| `/opt/gitea/data/gitea-gitea/` | `/data` | Git repositories, avatars, attachments, LFS objects, `app.ini` | -| `/opt/gitea/data/gitea-postgres/` | `/var/lib/postgresql/data` | PostgreSQL WAL, tables, indexes | +| `/home/dank/Containers/gitea/data/` | `/data` (gitea-server) | Git repositories, avatars, attachments, LFS objects, `app.ini` | +| `/home/dank/Containers/gitea/postgres/` | `/var/lib/postgresql/data` (gitea-postgres) | PostgreSQL WAL, tables, indexes | ## Ownership @@ -37,7 +36,7 @@ podman exec --user 1000 gitea-server sed -i 's/old/new/' /data/gitea/conf/app.in Tar the entire data directory. This captures Gitea repos and PostgreSQL data in one archive. ``` -tar czf gitea-backup-$(date +%F).tar.gz -C /opt/gitea data/ +tar czf gitea-backup-$(date +%F).tar.gz -C /home/dank/Containers/gitea data/ postgres/ ``` ### PostgreSQL-only backup @@ -48,17 +47,17 @@ Use `pg_dump` for a portable SQL dump. Useful for restoring to a different Postg podman exec -e PGPASSWORD="$GITEA_DB_PASSWORD" gitea-postgres pg_dump -U gitea gitea > gitea-db-$(date +%F).sql ``` -Set `PGPASSWORD` from `/opt/gitea/.env` (mode 0600). +Set `PGPASSWORD` from `/home/dank/Containers/gitea/env` (mode 0600, `GITEA_DB_PASSWORD`). ### Restore procedure 1. Stop the stack: `systemctl --user stop gitea-server gitea-postgres` -2. Restore data: `tar xzf backup.tar.gz -C /opt/gitea/` +2. Restore data: `tar xzf backup.tar.gz -C /home/dank/Containers/gitea/` 3. Start the stack: `systemctl --user start gitea-postgres gitea-server` ## Data Growth -- Git repositories grow with each commit and push. Monitor with `du -sh /opt/gitea/data/gitea-gitea/git/repositories/`. +- Git repositories grow with each commit and push. Monitor with `du -sh /home/dank/Containers/gitea/data/git/repositories/`. - PostgreSQL WAL files accumulate. VACUUM via `podman exec gitea-postgres psql -U gitea -c "VACUUM;"`. - Gitea's log files grow with usage. diff --git a/omp-docs/tools/gitea/index.md b/omp-docs/tools/gitea/index.md index bd640fc..0368c46 100644 --- a/omp-docs/tools/gitea/index.md +++ b/omp-docs/tools/gitea/index.md @@ -1,11 +1,11 @@ # Gitea on dankclaw -Private Git hosting on dankclaw. Three quadlet-managed containers in the rootless podman session of user `dank`: Gitea, PostgreSQL, Caddy. +Private Git hosting on dankclaw. Two quadlet-managed containers in the rootless podman session of user `dank`: Gitea and PostgreSQL, sharing a dedicated network unit. The former `gitea-caddy` container is **retired** — the canonical fleet Caddy (`caddy.service`, see [/caddy/index.md](/caddy/index.md)) fronts `gitea.franksdank.cloud`; do not recreate the retired unit. -**Host:** dankclaw (71.227.227.172) -**Config:** `~/.config/containers/systemd/gitea-{postgres,server,caddy}.container` + `gitea.network` -**Local access:** `http://dankclaw:3000` -**Domain:** `https://gitea.franksdank.cloud` (DNS pending) +**Host:** dankclaw (192.168.0.143 LAN) +**Config:** `~/.config/containers/systemd/gitea-{postgres,server}.container` + `gitea.network` +**Local access:** `http://dankclaw:3000` (verified 2026-10-18) +**Domain:** `https://gitea.franksdank.cloud` (live; served by fleet Caddy, DNS-01 TLS) ## Architecture @@ -13,7 +13,7 @@ Private Git hosting on dankclaw. Three quadlet-managed containers in the rootles |---|---|---|---| | `gitea-server` | `gitea-server.service` | 3000 (HTTP), 2222 (SSH) | Git web UI, API, SSH daemon | | `gitea-postgres` | `gitea-postgres.service` | 5432 (internal) | Database | -| `gitea-caddy` | `gitea-caddy.service` | 80, 443 | Reverse proxy, auto-TLS | +| (network) | `gitea-network.service` | — | quadlet `gitea.network` bring-up | The containers share the private network `systemd-gitea` (quadlet `gitea.network`, DNS enabled). The automatic `podman` default network has DNS disabled; do not run the stack on it. @@ -23,21 +23,21 @@ All commands run as `dank` on dankclaw. | Action | Command | |---|---| -| Start all | `systemctl --user start gitea-postgres gitea-server gitea-caddy` | -| Stop all | `systemctl --user stop gitea-caddy gitea-server gitea-postgres` | +| Start all | `systemctl --user start gitea-postgres gitea-server` | +| Stop all | `systemctl --user stop gitea-server gitea-postgres` | | Restart Gitea only | `systemctl --user restart gitea-server` | | Follow logs | `podman logs -f gitea-server` or `journalctl --user -u gitea-server -f` | -| Check status | `systemctl --user status gitea-postgres gitea-server gitea-caddy` | +| Check status | `systemctl --user status gitea-postgres gitea-server` | ## Data Persistence -All data lives on host bind mounts under `/opt/gitea/data/`. Containers are ephemeral. Stopping a quadlet unit removes its container; the next start recreates it. Volumes survive. +All data lives on host bind mounts under `/home/dank/Containers/gitea/` (fleet storage standard since 2026-09-01; verified live 2026-10-18). Containers are ephemeral. Stopping a quadlet unit removes its container; the next start recreates it. Volumes survive. The old `/opt/gitea/` tree remains on disk as a leftover — do not use it. -| Volume Path | Container Mount | Contents | -|---|---|---| -| `/opt/gitea/data/gitea-gitea/` | `/data` | Git repositories, app.ini, attachments | -| `/opt/gitea/data/gitea-postgres/` | `/var/lib/postgresql/data` | PostgreSQL data files | -| `/opt/gitea/data/caddy/data/` | `/root/.local/share/caddy` | Caddy configuration, TLS certs | +| Path | Contents | +|---|---| +| `/home/dank/Containers/gitea/data/` | Git repositories, app.ini, attachments | +| `/home/dank/Containers/gitea/postgres/` | PostgreSQL data files | +| `/home/dank/Containers/gitea/env` | EnvironmentFile (mode 0600; `GITEA_DB_PASSWORD`) | See [[data-persistence|data-persistence]] for backup and restore. @@ -49,7 +49,7 @@ See [[management|management]] for boot persistence details and troubleshooting. ## Repo Copies -The quadlet files, Caddyfile, and `.env.example` are tracked in the `serverAppConfigs` repo under `dankclaw/gitea/`. The live password lives only in `/opt/gitea/.env` on the host (mode 0600). +The quadlet files and `.env` templates are tracked in the `serverAppConfigs` deploy repo; the sibling vault page `Infrastructure/Gitea.md` (in `~/Projects/serverAppConfig/serverAppConfigs-docs/`) is the deploy-side source of truth. Secrets live only on the host under `Containers/gitea/` (mode 0600), never in either docs tree. ## See Also diff --git a/omp-docs/tools/gitea/management.md b/omp-docs/tools/gitea/management.md index 5d577b5..3fdb118 100644 --- a/omp-docs/tools/gitea/management.md +++ b/omp-docs/tools/gitea/management.md @@ -6,8 +6,7 @@ tags: - gitea - management - quadlet - - unverified -verified: 2026-08-28 +verified: 2026-10-18 --- # Gitea Management @@ -45,8 +44,8 @@ After editing a quadlet file: run `systemctl --user daemon-reload`, then restart | File | Path | |---|---| | Quadlet units | `~/.config/containers/systemd/gitea-*.container`, `gitea.network` | -| Secrets | `/opt/gitea/.env` (mode 0600, `GITEA_DB_PASSWORD`) | -| Gitea app config | `/opt/gitea/data/gitea-gitea/gitea/conf/app.ini` (container-owned, UID 100999) | +| Secrets | `/home/dank/Containers/gitea/env` (mode 0600, `GITEA_DB_PASSWORD`) — quadlet `EnvironmentFile` | +| Gitea app config | `/home/dank/Containers/gitea/data/gitea/conf/app.ini` (container-owned, UID 100999) | Repo copies: `serverAppConfigs/dankclaw/gitea/` (quadlet files, `.env.example`). Copy edits to the target, then `daemon-reload` + restart. @@ -62,7 +61,7 @@ Gitea handles database migrations automatically on startup. PostgreSQL version b ### Gitea cannot reach the database -Check the `[database] HOST` line in `/opt/gitea/data/gitea-gitea/gitea/conf/app.ini`. It must be `gitea-postgres:5432`. app.ini overrides the `DATABASE_HOST` env var. +Check the `[database] HOST` line in `/home/dank/Containers/gitea/data/gitea/conf/app.ini`. It must be `gitea-postgres:5432`. app.ini overrides the `DATABASE_HOST` env var. Then check name resolution from the container: diff --git a/omp-docs/tools/llama-cpp/index.md b/omp-docs/tools/llama-cpp/index.md index 35e2d99..ca0a4ff 100644 --- a/omp-docs/tools/llama-cpp/index.md +++ b/omp-docs/tools/llama-cpp/index.md @@ -50,7 +50,7 @@ llama-server -hf ggml-org/gemma-3-1b-it-GGUF **Defaults**: Listens on `127.0.0.1:8080`. Single slot (one concurrent request). -> **System note:** On this network the Pi inference hosts do not use the default port. Pi serves `frank-default-small` (dankserver) and `frank-default-large` (dankclaw), each on port `7770`. The local Ornith host runs on port `8080`. See [Pi Models Configuration](../../pi/models.md). +> **System note:** On this network the fleet inference hosts do not use the default port. As of 2026-10 the only llama.cpp endpoint is `frank-zealot` on dankclaw **:7771** (PrismML fork build); `frank-dragoon` (dankclaw :7770, halogen-flash-server) and `frank-archon` (dankserver :7770, radiance) are different engines — see [System hosts](/system/index.md). The pi-era `frank-default-small`/`frank-default-large` llama.cpp pair (each :7770) is retired; [Pi Models Configuration](../../pi/models.md) is a pi-era archive. ---