chore(searxng): adopt the concurrent v4 work, with its dead mechanism marked
Picks up uncommitted searxng changes left by another session and makes them truthful rather than committing them as written. The stack itself verifies clean: canonical and live are byte-identical for both compose.yaml and searxng-settings.yml, the container is running with zero restarts, and live queries return 51-54 results from 5-6 engines with braveapi contributing 20 each time. compose.yaml gains SEARXNG_BRAVE_API_KEY, which NOTHING READS. It was added on the belief that settings.yml could pull it via `!ENV SEARXNG_BRAVE_API_KEY`; this build has no !ENV YAML constructor, so that attempt made the file unparseable and crash-looped the container ten times with fleet search down. The comment claiming the variable is "consumed by settings.yml" is replaced with what is actually true. The variable is kept, unused, in case upstream ever gains env interpolation — a comment that lies is worse than a variable that does nothing. The Tier A playbook is marked superseded FOR THE SETTINGS FILE ONLY, and scoped deliberately: its v4 design uploads a settings file carrying the !ENV tag, which would re-break the container, so settings deployment goes through scripts/deploy-stack.sh like every other stack. Its .env merge and up-d-not-restart steps remain useful, as do its two warnings recording real bugs it hit — a wholesale .env overwrite that clobbered SEARXNG_SECRET, and a sed that inserted literal backslash-n into compose.yaml. An unscoped "superseded" banner would have buried those; that failure mode cost an outage earlier today. Also folds in the regenerated graphify report.
This commit is contained in:
+76
-101
@@ -1,16 +1,16 @@
|
||||
# Graph Report - eshpfi-management (2026-09-18)
|
||||
|
||||
## Corpus Check
|
||||
- 623 files · ~838,395 words
|
||||
- 623 files · ~839,853 words
|
||||
- Verdict: corpus is large enough that graph structure adds value.
|
||||
|
||||
## Summary
|
||||
- 5469 nodes · 5972 edges · 636 communities (482 shown, 154 thin omitted)
|
||||
- 5471 nodes · 5974 edges · 631 communities (477 shown, 154 thin omitted)
|
||||
- Extraction: 98% EXTRACTED · 2% INFERRED · 0% AMBIGUOUS · INFERRED: 97 edges (avg confidence: 0.81)
|
||||
- Token cost: 0 input · 0 output
|
||||
|
||||
## Graph Freshness
|
||||
- Built from commit: `156e1261`
|
||||
- Built from commit: `d812bfe9`
|
||||
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
|
||||
- Run `graphify update .` after code changes (no API cost).
|
||||
|
||||
@@ -153,7 +153,7 @@
|
||||
- [2026-08-23] Anaheim's IPsec tunnel delivers ~25% of a verified 2 Gbps circuit
|
||||
- `[2026-09-15]` FV cross-site routing fixed — one NAT rule scoped to Anaheim only
|
||||
- category
|
||||
- max
|
||||
- build_gallery
|
||||
- lv-mccarthy — corpus → gate → pairs
|
||||
- 7. Critical Warnings by Model
|
||||
- think-leak — reproducers for the h300 unterminated-`<think>` defect
|
||||
@@ -374,7 +374,7 @@
|
||||
- Cloudflare state for phasefinal.com
|
||||
- 6. Round-1 aborted; throughput root-caused (measured 2026-08-24 22:00 PDT)
|
||||
- SLZB-MR1U Zigbee/Thread coordinator — ESH IoT VLAN
|
||||
- mime
|
||||
- CatalogResponse
|
||||
- Packed
|
||||
- Gemma-4 26B-A4B ERP/RP tune — GPU sizing adjudication
|
||||
- Training throughput probes
|
||||
@@ -444,11 +444,11 @@
|
||||
- `[2026-09-04]` `gen` moved to ana-ml2 GPU0 — and I sized it against the wrong number, twice in one hour
|
||||
- launch-run-03c.sh
|
||||
- `[2026-09-04]` Forcing 10G on the ESH-Media DAC FAILED progressively — and I called the plateau too early
|
||||
- optional
|
||||
- fields
|
||||
- `[2026-09-04]` esh-nas SMB account for the AudioGridder box — and the NAS is effectively open to the whole LAN
|
||||
- remote-ssh
|
||||
- verify_corpus.py
|
||||
- properties
|
||||
- catalog_version
|
||||
- booth
|
||||
- tok_repro.py
|
||||
- wrap_verbatim_html
|
||||
@@ -458,7 +458,7 @@
|
||||
- `[2026-09-10]` althing 3.6.2 rolled — post office + both heralds, and it was TWO nodes not seven
|
||||
- FV to Anaheim: scoped Tailscale NAT repair
|
||||
- setup-nh3-scale-socks-egress.sh
|
||||
- mime_from_field
|
||||
- generated_at
|
||||
- 2026-09-10-beszel-fleet-wiring.md
|
||||
- bench_lora_step.py
|
||||
- probe_carrier.py
|
||||
@@ -544,7 +544,7 @@
|
||||
- guest-install.sh
|
||||
- 2026-09-11-beszel-priority1.md
|
||||
- 2026-09-11-beszel-priority2.md
|
||||
- stream_chunks
|
||||
- section
|
||||
- gen-seat — the fleet `gen` seat (fv-ml1 GPU0, :8015)
|
||||
- seat-inventory-drift-check.sh
|
||||
- build_corpus.py
|
||||
@@ -552,7 +552,7 @@
|
||||
- irv-ml1 dead-address sweep — EXECUTED 2026-09-15 (operator-directed)
|
||||
- fv-mesh-watchdog.sh
|
||||
- grok-token-broker
|
||||
- options
|
||||
- accepted_types
|
||||
- kb
|
||||
- 2026-09-10-an-author-voice-adapter-transfers-subject.md
|
||||
- 2026-09-10-babybronte-h02-adapter-the-voice-transferred.md
|
||||
@@ -578,7 +578,7 @@
|
||||
- breeze-tts sizing and the fv-ml1 GPU 0 placement question (2026-09-15)
|
||||
- 2026-09-15-client-abandon-cancellation-boundary.md
|
||||
- gender_by_proximity.py
|
||||
- required
|
||||
- streamable
|
||||
- verify_quant.py
|
||||
- [2026-08-24] ESH DNS fixed at the IPv6 layer, and the naming scheme went live
|
||||
- booth/app.py
|
||||
@@ -592,17 +592,14 @@
|
||||
- Fleet SSH — the infra-ops identity and host map
|
||||
- build_beat_fixture.py
|
||||
- The Booth — ephemeral media board + operator decisions
|
||||
- endpoint
|
||||
- section
|
||||
- $ref
|
||||
- lifecycle
|
||||
- min
|
||||
- properties
|
||||
- pin_known_gender.py
|
||||
- Speech — TTS and ASR endpoints
|
||||
- adapter/server.py
|
||||
- repair_corpus_bronte.py
|
||||
- 2026-09-16-grok-broker-shelved.md
|
||||
- 2026-09-17-lv-bronte-gate.md
|
||||
- type
|
||||
- gpu.py
|
||||
- Path
|
||||
- memorization_selfsim.py
|
||||
- eval-hemingway.sh
|
||||
@@ -622,8 +619,6 @@
|
||||
- henge.md
|
||||
- playwright.md
|
||||
- _cli
|
||||
- sanitize_tts_text
|
||||
- generate_pickup_id
|
||||
|
||||
## God Nodes (most connected - your core abstractions)
|
||||
1. ``[2026-09-01]` althing 3.2.0 deployed on nh3-dev — pane routes, and `uv tool install .` lies` - 36 edges
|
||||
@@ -640,19 +635,19 @@
|
||||
## Surprising Connections (you probably didn't know these)
|
||||
- `_read_cli_credential()` --calls--> `walk()` [INFERRED]
|
||||
services/grok-token-broker/broker.py → scripts/kb-search.py
|
||||
- `_speaker_embedding()` --references--> `Tensor` [EXTRACTED]
|
||||
stacks/zonos/adapter/server.py → services/coldfusion-abliteration/kl_divergence.py
|
||||
- `convert()` --references--> `Any` [EXTRACTED]
|
||||
tools/mistral-small4-nvfp4/convert_hf_to_native.py → stacks/omnivoice/app.py
|
||||
- `_speaker_embedding()` --references--> `Tensor` [EXTRACTED]
|
||||
stacks/zonos/adapter/server.py → services/coldfusion-abliteration/kl_divergence.py
|
||||
- `build_gallery()` --calls--> `is_ask_file()` [INFERRED]
|
||||
services/booth/booth/app.py → services/booth/booth/asks.py
|
||||
- `test_cli_unlink_by_id_even_when_the_id_is_all_digits()` --calls--> `parse_link_entries()` [INFERRED]
|
||||
services/booth/tests/test_booth.py → services/booth/booth/links.py
|
||||
- `list_booths()` --calls--> `is_ask_file()` [INFERRED]
|
||||
services/booth/booth/app.py → services/booth/booth/asks.py
|
||||
|
||||
## Import Cycles
|
||||
- None detected.
|
||||
|
||||
## Communities (636 total, 154 thin omitted)
|
||||
## Communities (631 total, 154 thin omitted)
|
||||
|
||||
### Community 0 - "quant_modelopt.py"
|
||||
Cohesion: 0.53
|
||||
@@ -675,8 +670,8 @@ Cohesion: 0.07
|
||||
Nodes (29): ana-docker (VM 10.250.50.70), ana-filebot (CT 112 on pfi-pve) — file automation, ana-nas (CT 109 on pfi-pve, 10.250.50.50), ana-wg (CT 113 on pfi-pve) — WireGuard VPN, Cross-cutting: what to check FIRST for ambiguous outages, esh-docker-vm + vm-esh-nas, esh-pve + esh-pve-nas (10.0.250.35 + 10.0.50.55), Fleet disaster-recovery runbook (+21 more)
|
||||
|
||||
### Community 5 - "properties"
|
||||
Cohesion: 0.09
|
||||
Nodes (23): anyOf, default, title, anyOf, default, title, additionalProperties, description (+15 more)
|
||||
Cohesion: 0.07
|
||||
Nodes (29): anyOf, default, title, anyOf, default, title, properties, anyOf (+21 more)
|
||||
|
||||
### Community 6 - "1. Locked architectural decisions"
|
||||
Cohesion: 0.07
|
||||
@@ -711,8 +706,8 @@ Cohesion: 0.11
|
||||
Nodes (17): 1. Create rest-server-ana htpasswd entry, 2. Install secrets on esh-vm-db, 3. Initialize the repo, 4. Install prerequisites (restic, resticprofile, mongosh client), 5. Deploy profile + hook, 6. Schedule + verify, Deploy (one-time), Full host config (+9 more)
|
||||
|
||||
### Community 14 - "properties"
|
||||
Cohesion: 0.11
|
||||
Nodes (19): anyOf, default, title, properties, default, title, anyOf, default (+11 more)
|
||||
Cohesion: 0.08
|
||||
Nodes (24): properties, default, title, anyOf, default, anyOf, default, title (+16 more)
|
||||
|
||||
### Community 15 - "Deploy (one-time setup)"
|
||||
Cohesion: 0.12
|
||||
@@ -923,8 +918,8 @@ Cohesion: 0.25
|
||||
Nodes (7): backrest, Backup scope, when wired up, Deploy, First-time configuration (in the UI), Role in the fleet, Scaling knobs, Why not `offen/docker-volume-backup`?
|
||||
|
||||
### Community 67 - "omnivoice/app.py"
|
||||
Cohesion: 0.09
|
||||
Nodes (26): Any, ChunkConfig, ChunkResult, _base_gen_kwargs(), _chunk_config(), GenParams, _log_chunk(), _pcm16() (+18 more)
|
||||
Cohesion: 0.06
|
||||
Nodes (46): Any, ChunkConfig, ChunkResult, ClockFn, GenerateFn, _base_gen_kwargs(), _chunk_config(), GenParams (+38 more)
|
||||
|
||||
### Community 68 - "calibre-web-automated"
|
||||
Cohesion: 0.25
|
||||
@@ -967,8 +962,8 @@ Cohesion: 0.26
|
||||
Nodes (23): Exception, bw(), BwError, cmd_backfill(), cmd_get(), cmd_list(), cmd_put(), cmd_rm() (+15 more)
|
||||
|
||||
### Community 78 - "test_booth.py"
|
||||
Cohesion: 0.05
|
||||
Nodes (48): build_gallery(), doc_kind(), is_kept(), markdown' | 'text' | None — a booth file viewable as a readable page., (rendered, is_html). Markdown → HTML (fenced code, tables, sane lists); plain…, True if this booth carries the keep sentinel and must never be swept., Files in a booth as render items, with caption sidecars folded in. A…, render_doc() (+40 more)
|
||||
Cohesion: 0.06
|
||||
Nodes (35): generate_pickup_id(), is_kept(), True if this booth carries the keep sentinel and must never be swept., A human-readable id like '4-wombat' or 'star-84'. `exists(name)->bool` gates…, Releasing something already released is a no-op, not a 500., Reversible: the release step must not be a one-way door., Both mutating routes must use resolve_booth, not raw path joining. A name…, test_booth_autogallery_renders_media() (+27 more)
|
||||
|
||||
### Community 79 - "pfi-tacticalrmm"
|
||||
Cohesion: 0.25
|
||||
@@ -1003,8 +998,8 @@ Cohesion: 0.25
|
||||
Nodes (7): API, Deploy, Gotchas, Switching to the 7B variant, VibeVoice, Voices, Why this stack exists
|
||||
|
||||
### Community 87 - "properties"
|
||||
Cohesion: 0.14
|
||||
Nodes (14): properties, anyOf, default, $ref, lifecycle, model, reproducibility, response (+6 more)
|
||||
Cohesion: 0.15
|
||||
Nodes (13): properties, title, type, $ref, title, type, endpoint, model (+5 more)
|
||||
|
||||
### Community 88 - "Dia / Dia2"
|
||||
Cohesion: 0.29
|
||||
@@ -1087,8 +1082,8 @@ Cohesion: 0.29
|
||||
Nodes (6): Adapter request (example), Deploy, Notes, Two surfaces: Gradio eval (8199) + REST adapter (8203), Why this stack exists, Zonos
|
||||
|
||||
### Community 108 - "test_asks.py"
|
||||
Cohesion: 0.06
|
||||
Nodes (68): parametrize, list_booths(), ask_stem(), AskError, _blank(), _bool(), _clean_notes(), is_answer_file() (+60 more)
|
||||
Cohesion: 0.07
|
||||
Nodes (66): parametrize, ask_stem(), AskError, _blank(), _bool(), _clean_notes(), is_ask_file(), list_asks() (+58 more)
|
||||
|
||||
### Community 109 - "Fleet bootstrap — read this first"
|
||||
Cohesion: 0.40
|
||||
@@ -1202,9 +1197,9 @@ Nodes (20): `[2026-09-15]` FV cross-site routing fixed — one NAT rule scoped t
|
||||
Cohesion: 0.50
|
||||
Nodes (4): enum, title, type, category
|
||||
|
||||
### Community 138 - "max"
|
||||
Cohesion: 0.50
|
||||
Nodes (4): anyOf, default, title, max
|
||||
### Community 138 - "build_gallery"
|
||||
Cohesion: 0.09
|
||||
Nodes (24): booth_image_names(), build_gallery(), classify(), doc_kind(), list_booths(), markdown' | 'text' | None — a booth file viewable as a readable page., (rendered, is_html). Markdown → HTML (fenced code, tables, sane lists); plain…, Image files in a booth, in gallery (sorted-rel) order — for viewer prev/next. (+16 more)
|
||||
|
||||
### Community 139 - "lv-mccarthy — corpus → gate → pairs"
|
||||
Cohesion: 0.33
|
||||
@@ -1759,8 +1754,8 @@ Cohesion: 0.70
|
||||
Nodes (4): ask(), classify(), load_prompts(), main()
|
||||
|
||||
### Community 327 - "worker/app.py"
|
||||
Cohesion: 0.14
|
||||
Nodes (10): RuntimeError, get_gpu_status(), post_train(), FastAPI surface for the LoRA training worker (§4.1 API — arbo is the client). E, TrainRequest, Static configuration for the LoRA training worker. Everything load-bearing is a, LoRA training worker — a host service (runs as llmuser on irv-ml1) that runs sd-, Busy (+2 more)
|
||||
Cohesion: 0.15
|
||||
Nodes (15): RuntimeError, get_gpu_status(), post_train(), FastAPI surface for the LoRA training worker (§4.1 API — arbo is the client). E, TrainRequest, _bus_id_by_index(), _cmdline(), gpu_status() (+7 more)
|
||||
|
||||
### Community 329 - "Beszel fleet monitoring"
|
||||
Cohesion: 0.33
|
||||
@@ -1930,9 +1925,9 @@ Nodes (10): 6.1 Where the step time goes, 6.1a ⚠ 8.6% MFU was an accounting ar
|
||||
Cohesion: 0.18
|
||||
Nodes (10): ⚠ Home Assistant CANNOT resolve `.internal` — give it the IP, mDNS crosses the VLAN boundary — and that has one sharp edge, ⚠ port_overrides is a WHOLE-ARRAY PUT, Reachability is already open, and was proven before the move, Resolver: ha-dev declined the `dns:` fix, deliberately, Rollback, SLZB-MR1U Zigbee/Thread coordinator — ESH IoT VLAN, The MAC is a derived ESP32 interface address — stable, not fragile (+2 more)
|
||||
|
||||
### Community 380 - "mime"
|
||||
Cohesion: 0.50
|
||||
Nodes (4): anyOf, default, title, mime
|
||||
### Community 380 - "CatalogResponse"
|
||||
Cohesion: 0.33
|
||||
Nodes (6): additionalProperties, description, required, title, type, CatalogResponse
|
||||
|
||||
### Community 381 - "Packed"
|
||||
Cohesion: 0.09
|
||||
@@ -2043,8 +2038,8 @@ Cohesion: 0.29
|
||||
Nodes (6): lv-bronte — corpus pipeline, end to end, ⭐ The leak the gate cannot see, The two source defects, What the controls caught, Why gender needs a separate pinning stage, Why this corpus needed its own pipeline
|
||||
|
||||
### Community 419 - "searxng"
|
||||
Cohesion: 0.25
|
||||
Nodes (7): Current egress: ESH (2026-09-17), ⚠ /healthz cannot tell you whether search works, Historical placement: NH3 rather than the colo, searxng, Secret, The MCP tool, Update
|
||||
Cohesion: 0.20
|
||||
Nodes (9): Current egress: direct from NH3, ⚠ /healthz cannot tell you whether search works, Historical placement: NH3 rather than the colo, searxng, Secret, The 2026-09-18 engine outage — cause was the build, not egress, The ESH egress experiment (2026-09-17 → reverted 2026-09-18), The MCP tool (+1 more)
|
||||
|
||||
### Community 420 - "voice_distance.py"
|
||||
Cohesion: 0.52
|
||||
@@ -2115,8 +2110,8 @@ Cohesion: 0.40
|
||||
Nodes (3): `[2026-09-05]` A peer's "2.7x stack effect" was a coin flip — the operator caught it and the arithmetic is worth keeping, `[2026-09-04/05]` vLLM RUNS on sm_121 — and the blocker was `ninja` not being on PATH, not the silicon, Run 4 — the corpus arm
|
||||
|
||||
### Community 443 - "FastAPI"
|
||||
Cohesion: 0.19
|
||||
Nodes (11): ACEStepInput, ACEStepOutput, generate_audio(), initialize_pipeline(), Generate music; respond with the audio bytes inline. Pre-2026-05-11 this re, ACEStepPipeline, BaseModel, FastAPI (+3 more)
|
||||
Cohesion: 0.12
|
||||
Nodes (18): ACEStepInput, ACEStepOutput, generate_audio(), initialize_pipeline(), Generate music; respond with the audio bytes inline. Pre-2026-05-11 this re, ACEStepPipeline, _get_model(), OpenAI-ish /v1/audio/speech adapter in front of the Zonos Python SDK. Why this (+10 more)
|
||||
|
||||
### Community 445 - "`[2026-09-15]` ESPHome modernised for ha-dev; `kb` search tool for the personal Worldtree KB"
|
||||
Cohesion: 0.50
|
||||
@@ -2142,17 +2137,17 @@ Nodes (3): `[2026-09-04]` `gen` moved to ana-ml2 GPU0 — and I sized it against
|
||||
Cohesion: 0.50
|
||||
Nodes (3): `[2026-09-04]` Forcing 10G on the ESH-Media DAC FAILED progressively — and I called the plateau too early, ⚠ IT DEGRADED, AND MY "PLATEAU" READ WAS WRONG, Method notes worth keeping
|
||||
|
||||
### Community 454 - "optional"
|
||||
### Community 454 - "fields"
|
||||
Cohesion: 0.50
|
||||
Nodes (4): default, title, type, optional
|
||||
Nodes (4): items, title, type, fields
|
||||
|
||||
### Community 456 - "remote-ssh"
|
||||
Cohesion: 0.50
|
||||
Nodes (3): SSH_MCP_STRICT_ALLOWLIST, node, remote-ssh
|
||||
|
||||
### Community 458 - "properties"
|
||||
Cohesion: 0.15
|
||||
Nodes (13): default, title, type, anyOf, default, title, properties, catalog_version (+5 more)
|
||||
### Community 458 - "catalog_version"
|
||||
Cohesion: 0.50
|
||||
Nodes (4): default, title, type, catalog_version
|
||||
|
||||
### Community 462 - "wrap_verbatim_html"
|
||||
Cohesion: 0.22
|
||||
@@ -2178,13 +2173,13 @@ Nodes (6): `[2026-09-10]` althing 3.6.2 rolled — post office + both heralds, a
|
||||
Cohesion: 0.25
|
||||
Nodes (7): Backup and rollback, Broadened to the whole FV LAN, same session, Evidence and verification, ⭐ EXTENDED 2026-09-15 — NH3, ESH and Irvine now have the same rule, FV to Anaheim: scoped Tailscale NAT repair, Persistent configuration, What this looks like when it breaks, so the next person skips the evening
|
||||
|
||||
### Community 469 - "mime_from_field"
|
||||
### Community 469 - "generated_at"
|
||||
Cohesion: 0.50
|
||||
Nodes (4): anyOf, default, title, mime_from_field
|
||||
Nodes (4): anyOf, default, title, generated_at
|
||||
|
||||
### Community 474 - "invocation.py"
|
||||
Cohesion: 0.19
|
||||
Nodes (14): Path, test_published_relative_path(), test_published_relative_path_explicit_train_id_wins(), ValueError, InvalidTrainRequest, published_relative_path(), Fixed-invocation command builder — the enforcement point for INV-T7. arbo hands, The ComfyUI-relative loras path for a succeeded LoRA (Phase 2 publish step). (+6 more)
|
||||
Cohesion: 0.14
|
||||
Nodes (17): Path, test_published_relative_path(), test_published_relative_path_explicit_train_id_wins(), ValueError, Static configuration for the LoRA training worker. Everything load-bearing is a, LoRA training worker — a host service (runs as llmuser on irv-ml1) that runs sd-, InvalidTrainRequest, published_relative_path() (+9 more)
|
||||
|
||||
### Community 483 - "recover_direction"
|
||||
Cohesion: 0.52
|
||||
@@ -2207,8 +2202,8 @@ Cohesion: 0.33
|
||||
Nodes (3): png(), Verify the swapped char-rp-fast seat before the gateway alias points at it. The…, Minimal solid-colour PNG, built here so the test needs no asset on disk.
|
||||
|
||||
### Community 503 - "Path"
|
||||
Cohesion: 0.21
|
||||
Nodes (14): load_config(), Path, load_pairs(), main(), Do the GENERATED BEATS name characters the rename removed? `leak_gate.py` reads…, load_copies(), load_works(), main() (+6 more)
|
||||
Cohesion: 0.18
|
||||
Nodes (16): load_config(), Path, load_pairs(), main(), Do the GENERATED BEATS name characters the rename removed? `leak_gate.py` reads…, load_copies(), load_works(), main() (+8 more)
|
||||
|
||||
### Community 506 - "Plex hardware transcoding on the Arc A580 (esh-pve-nas, LXC 105)"
|
||||
Cohesion: 0.25
|
||||
@@ -2314,9 +2309,9 @@ Nodes (5): Authoritative vs mirror, Deploy, dockge, Homepage, Layout
|
||||
Cohesion: 0.33
|
||||
Nodes (5): Deploy, fablefusion-charrp-probe — THROWAWAY evaluation seat (fv-ml1 GPU1), ⚠️ GPU1 is zero-sum — this seat CANNOT run beside Dark-Scarlett, MTP depth: 3, not the card's 5, Why this candidate
|
||||
|
||||
### Community 556 - "stream_chunks"
|
||||
Cohesion: 0.19
|
||||
Nodes (17): ClockFn, GenerateFn, ChunkConfig, _ema(), _est_gen_time(), plan_chunk(), protect_first_audio(), Split into sentence units, preserving punctuation. Whitespace-collapsed. (+9 more)
|
||||
### Community 556 - "section"
|
||||
Cohesion: 0.50
|
||||
Nodes (4): section, anyOf, default, title
|
||||
|
||||
### Community 557 - "gen-seat — the fleet `gen` seat (fv-ml1 GPU0, :8015)"
|
||||
Cohesion: 0.50
|
||||
@@ -2334,9 +2329,9 @@ Nodes (6): ⚠⚠ FOUR MORE LIVE BREAKAGES on OTHER hosts — the sweep's real f
|
||||
Cohesion: 0.29
|
||||
Nodes (6): Current state — ⛔ SHELVED, deliberately, 2026-09-16, For a consumer, grok-token-broker, Invariants, The problem, ⛔ Why the loop is disarmed until measured
|
||||
|
||||
### Community 564 - "options"
|
||||
### Community 564 - "accepted_types"
|
||||
Cohesion: 0.50
|
||||
Nodes (4): anyOf, default, title, options
|
||||
Nodes (4): anyOf, default, title, accepted_types
|
||||
|
||||
### Community 582 - "build_corpus_hemingway.py"
|
||||
Cohesion: 0.20
|
||||
@@ -2358,9 +2353,9 @@ Nodes (8): breeze-tts sizing and the fv-ml1 GPU 0 placement question (2026-09-15
|
||||
Cohesion: 0.31
|
||||
Nodes (9): decide(), load_text(), main(), Path, D2b for BabyHemingway: resolve entity gender by MAJORITY VOTE over nearby…, One pass over the corpus for EVERY surface at once. The obvious shape -- rescan…, Score a name's local pronoun mix AGAINST THE CORPUS BASE RATE, not against…, score() (+1 more)
|
||||
|
||||
### Community 590 - "required"
|
||||
### Community 590 - "streamable"
|
||||
Cohesion: 0.50
|
||||
Nodes (4): required, default, title, type
|
||||
Nodes (4): streamable, default, title, type
|
||||
|
||||
### Community 591 - "verify_quant.py"
|
||||
Cohesion: 0.40
|
||||
@@ -2371,8 +2366,8 @@ Cohesion: 0.40
|
||||
Nodes (5): [2026-08-24] ESH DNS fixed at the IPv6 layer, and the naming scheme went live, Root cause, The naming scheme became real, The three wrong turns, What landed
|
||||
|
||||
### Community 593 - "booth/app.py"
|
||||
Cohesion: 0.08
|
||||
Nodes (29): fixture, booth_image_names(), classify(), create_app(), _from_env(), human_dur(), The Booth — a standing web server that renders drop-folders as ephemeral media…, Image files in a booth, in gallery (sorted-rel) order — for viewer prev/next. (+21 more)
|
||||
Cohesion: 0.10
|
||||
Nodes (22): fixture, create_app(), _from_env(), human_dur(), The Booth — a standing web server that renders drop-folders as ephemeral media…, A Content-Disposition-safe `<booth>.zip` (strip quotes/control chars)., Reduce a client-supplied filename to a safe basename (no path, no hidden)., safe_upload_name() (+14 more)
|
||||
|
||||
### Community 596 - "description"
|
||||
Cohesion: 0.50
|
||||
@@ -2402,38 +2397,26 @@ Nodes (5): Fleet SSH — the infra-ops identity and host map, Identity, Mesh, Si
|
||||
Cohesion: 0.40
|
||||
Nodes (4): Ask the operator to decide (no chat round-trip), Show the operator something, Standing convention — the link board, The Booth — ephemeral media board + operator decisions
|
||||
|
||||
### Community 604 - "endpoint"
|
||||
### Community 604 - "lifecycle"
|
||||
Cohesion: 0.67
|
||||
Nodes (3): title, type, endpoint
|
||||
Nodes (3): anyOf, default, lifecycle
|
||||
|
||||
### Community 605 - "section"
|
||||
### Community 605 - "min"
|
||||
Cohesion: 0.50
|
||||
Nodes (4): section, anyOf, default, title
|
||||
Nodes (4): anyOf, default, title, min
|
||||
|
||||
### Community 606 - "$ref"
|
||||
### Community 606 - "properties"
|
||||
Cohesion: 0.15
|
||||
Nodes (13): items, title, type, $ref, fields, section_groups, services, items (+5 more)
|
||||
Nodes (14): $ref, properties, reproducibility_audit, section_groups, services, items, title, type (+6 more)
|
||||
|
||||
### Community 608 - "Speech — TTS and ASR endpoints"
|
||||
Cohesion: 0.40
|
||||
Nodes (4): ASR, Speech — TTS and ASR endpoints, Traps, TTS
|
||||
|
||||
### Community 609 - "adapter/server.py"
|
||||
Cohesion: 0.29
|
||||
Nodes (7): _get_model(), OpenAI-ish /v1/audio/speech adapter in front of the Zonos Python SDK. Why this, _speaker_embedding(), speech(), SpeechRequest, JSONResponse, Zonos
|
||||
|
||||
### Community 612 - "2026-09-17-lv-bronte-gate.md"
|
||||
Cohesion: 0.05
|
||||
Nodes (41): `[2026-09-16]` lv-hemingway corpus: half the work was EXCLUSION, and the gate found what a hand count would not, `[2026-09-16]` The lv-* voice line: Option C proved, lv-yarros shipped, lv-hemingway training, `[2026-09-16]` voices-seat: LoRA over merge, measured — and GPU 0 is now full, `[2026-09-17]` The beat-writing model restores the author's real names — a leak the corpus gate structurally cannot see, `[2026-09-17]` lv-bronte: corpus gated for real, adapter trained, SHIPPED with a FAILED voice axis on the record, ⚠ A DEFECT IN THE v2 RULE ITSELF, worth fixing before the next author, ⚠⚠ AMENDED 2026-09-17 — THE VOICE AXIS PASSES UNDER THE CORRECTED FLOOR RULE, Artefacts (+33 more)
|
||||
|
||||
### Community 613 - "type"
|
||||
Cohesion: 0.50
|
||||
Nodes (4): type, enum, title, type
|
||||
|
||||
### Community 614 - "gpu.py"
|
||||
Cohesion: 0.42
|
||||
Nodes (8): _bus_id_by_index(), _cmdline(), gpu_status(), _query_compute_apps(), _query_devices(), GPU status for arbo's device-aware scheduler (GET /gpu-status). arbo steers a l, Return `{devices: [...], tts_on_3090: bool}`. Degrades to an error field on nvid, _run()
|
||||
|
||||
### Community 620 - "althing — inter-agent message bus"
|
||||
Cohesion: 0.50
|
||||
Nodes (3): althing — inter-agent message bus, Commands, Traps
|
||||
@@ -2466,16 +2449,8 @@ Nodes (3): load_text(), main(), Audit a stoplist for entries that are actually C
|
||||
Cohesion: 0.25
|
||||
Nodes (8): _cli(), Regression: the branch ended with `[ "$n" -eq 0 ] && echo ...`, so it returned…, Regression: ids are 8 hex chars and roughly one in forty is all digits. Those…, test_cli_links_exits_zero_on_a_NON_empty_board(), test_cli_unlink_by_id_even_when_the_id_is_all_digits(), test_cli_unlink_by_index(), test_cli_unlink_of_a_stale_id_leaves_the_board_alone(), test_cli_unlink_rejects_a_non_id_non_index()
|
||||
|
||||
### Community 634 - "sanitize_tts_text"
|
||||
Cohesion: 0.50
|
||||
Nodes (3): Language-safe text sanitizer for the OmniVoice TTS wrapper. Strips artifacts th, Return ``text`` cleaned of artifacts that shouldn't be spoken, language-safe., sanitize_tts_text()
|
||||
|
||||
### Community 635 - "generate_pickup_id"
|
||||
Cohesion: 0.50
|
||||
Nodes (4): generate_pickup_id(), A human-readable id like '4-wombat' or 'star-84'. `exists(name)->bool` gates…, test_generate_pickup_id_avoids_collision(), test_generate_pickup_id_format()
|
||||
|
||||
## Knowledge Gaps
|
||||
- **3019 isolated node(s):** `Current egress: ESH (2026-09-17)`, `Historical placement: NH3 rather than the colo`, `⚠ /healthz cannot tell you whether search works`, `Update`, `The MCP tool` (+3014 more)
|
||||
- **3021 isolated node(s):** `⚠ YOU ARE `infra-ops` — the fleet operations agent`, `Persistent memory`, `Model quantization`, `Training runs`, `Purpose` (+3016 more)
|
||||
These have ≤1 connection - possible missing edges or undocumented components.
|
||||
- **154 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
|
||||
|
||||
@@ -2483,16 +2458,16 @@ Nodes (4): generate_pickup_id(), A human-readable id like '4-wombat' or 'star-84
|
||||
_Questions this graph is uniquely positioned to answer:_
|
||||
|
||||
- **Why does `create_app()` connect `booth/app.py` to `FastAPI`, `test_booth.py`, `Path`?**
|
||||
_High betweenness centrality (0.003) - this node is a cross-community bridge._
|
||||
- **Why does `main()` connect `abliterate.py` to `convert_hf_to_native.py`, `Path`?**
|
||||
_High betweenness centrality (0.002) - this node is a cross-community bridge._
|
||||
- **Why does `AskError` connect `test_asks.py` to `invocation.py`?**
|
||||
- **Why does ``[2026-09-01]` pfi-gx10 (ASUS Ascent GX10) onboarded headless — and it is the intended new home for run 3c` connect ``[2026-09-01]` pfi-gx10 (ASUS Ascent GX10) onboarded headless — and it is the intended new home for run 3c` to `archival-memory.md`?**
|
||||
_High betweenness centrality (0.002) - this node is a cross-community bridge._
|
||||
- **Why does `[2026-08-15] Uncensored gen seat: Qwen3.8-27B-Uncensored deployed; the definitive MTP-graft fix` connect `[2026-08-15] Uncensored gen seat: Qwen3.8-27B-Uncensored deployed; the definitive MTP-graft fix` to `Archived 2026-08-02 — Recent decisions (archived)`, `archival-memory.md`, `Archived 2026-08-02 — Tried and abandoned (archived)`, `Recent decisions (archived 2026-08-03 batch)`?**
|
||||
_High betweenness centrality (0.001) - this node is a cross-community bridge._
|
||||
- **What connects `Current egress: ESH (2026-09-17)`, `Historical placement: NH3 rather than the colo`, `⚠ /healthz cannot tell you whether search works` to the rest of the system?**
|
||||
_3019 weakly-connected nodes found - possible documentation gaps or missing edges._
|
||||
- **What connects `⚠ YOU ARE `infra-ops` — the fleet operations agent`, `Persistent memory`, `Model quantization` to the rest of the system?**
|
||||
_3021 weakly-connected nodes found - possible documentation gaps or missing edges._
|
||||
- **Should `Status + Open Issues` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.05555555555555555 - nodes in this community are weakly interconnected._
|
||||
- **Should `Fleet disaster-recovery runbook` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.06666666666666667 - nodes in this community are weakly interconnected._
|
||||
- **Should `properties` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.08695652173913043 - nodes in this community are weakly interconnected._
|
||||
_Cohesion score 0.06896551724137931 - nodes in this community are weakly interconnected._
|
||||
@@ -1,32 +1,78 @@
|
||||
# SearXNG Tier A captcha fix (2026-09-18): remove scraped engine families that
|
||||
# CAPTCHA this egress (brave/duckduckgo/startpage), enable mojeek.
|
||||
# File: /opt/docker/conf/searxng/searxng-settings.yml (bind-mounted ro into the
|
||||
# container) -> restart required to take effect. Rerunnable.
|
||||
# CAPTCHA this egress (brave/duckduckgo/startpage), wikidata 403'd too.
|
||||
#
|
||||
# ⚠ SUPERSEDED FOR THE SETTINGS FILE — read the scope of this note.
|
||||
# The v4 design here assumed settings.yml could pull the Brave key via
|
||||
# `!ENV SEARXNG_BRAVE_API_KEY`. This build has NO !ENV YAML constructor: that
|
||||
# attempt made the file unparseable and crash-looped the container ten times
|
||||
# with fleet search down. The key is now INLINE in the canonical settings file
|
||||
# (operator decision, the key is low-value free-tier), and settings deployment
|
||||
# goes through `scripts/deploy-stack.sh nh3-docker searxng --conf` like every
|
||||
# other stack. Do NOT upload a settings file from here expecting !ENV to work.
|
||||
#
|
||||
# What is still worth keeping below: the `.env` merge step and the
|
||||
# `up -d`-not-`restart` step, plus the two ⚠ notes recording real bugs this
|
||||
# playbook hit (a wholesale .env overwrite that clobbered SEARXNG_SECRET, and a
|
||||
# sed that inserted literal backslash-n into compose.yaml).
|
||||
#
|
||||
# Rerunnable. Pass the key at the CLI: --var brave_key=... (never store it here).
|
||||
|
||||
vars:
|
||||
conf: /opt/docker/conf/searxng/searxng-settings.yml
|
||||
compose_dir: /opt/docker/compose/searxng
|
||||
brave_key: ""
|
||||
searxng_secret: "" # from vault nh3-docker/searxng-secret, passed via --var
|
||||
|
||||
steps:
|
||||
- name: Timestamped backup of current settings
|
||||
shell: cp {{ conf }} {{ conf }}.bak-$(date +%Y%m%d-%H%M%S)
|
||||
# Only back up while this version of the change has not been applied yet.
|
||||
when: "! grep -q 'Tier A (v3' {{ conf }}"
|
||||
when: "! grep -q 'Tier A (v4' {{ conf }}"
|
||||
|
||||
- name: Install new settings
|
||||
upload:
|
||||
src: /tmp/searxng-tierA/searxng-settings.yml
|
||||
dest: "{{ conf }}"
|
||||
mode: "0644"
|
||||
when: "! grep -q 'Tier A (v3' {{ conf }}"
|
||||
when: "! grep -q 'Tier A (v4' {{ conf }}"
|
||||
|
||||
- name: Restart searxng to pick up settings
|
||||
shell: docker restart searxng
|
||||
- name: Write .env with BOTH keys (a previous run clobbered SEARXNG_SECRET)
|
||||
# ⚠ This dir already had a .env holding SEARXNG_SECRET; an earlier version
|
||||
# of this step overwrote the file wholesale. Merge, never truncate.
|
||||
sudo: true
|
||||
shell: |
|
||||
test -n '{{ brave_key }}' && test -n '{{ searxng_secret }}' && \
|
||||
printf 'SEARXNG_SECRET=%s\nSEARXNG_BRAVE_API_KEY=%s\n' '{{ searxng_secret }}' '{{ brave_key }}' | tee {{ compose_dir }}/.env >/dev/null && \
|
||||
chown infra-ops:docker {{ compose_dir }}/.env && chmod 600 {{ compose_dir }}/.env
|
||||
# Skip only when .env already holds both keys (values are stable; to force
|
||||
# a rewrite, delete the file).
|
||||
when: "grep -q SEARXNG_SECRET {{ compose_dir }}/.env 2>/dev/null && grep -q SEARXNG_BRAVE_API_KEY {{ compose_dir }}/.env && exit 1 || exit 0"
|
||||
|
||||
- name: Ensure compose references the key (undo bad sed, then append cleanly)
|
||||
# ⚠ `sed 's/$/\\n.../'` inserted LITERAL backslash-n text, not a newline —
|
||||
# compose then parsed one env entry. awk-append instead.
|
||||
sudo: true
|
||||
shell: |
|
||||
sed -i 's|\\n - SEARXNG_BRAVE_API_KEY=${SEARXNG_BRAVE_API_KEY}||' {{ compose_dir }}/compose.yaml
|
||||
grep -q SEARXNG_BRAVE_API_KEY {{ compose_dir }}/compose.yaml || \
|
||||
awk '{print} /SEARXNG_SECRET/ {print " - SEARXNG_BRAVE_API_KEY=${SEARXNG_BRAVE_API_KEY}"}' {{ compose_dir }}/compose.yaml > {{ compose_dir }}/.c.new && mv {{ compose_dir }}/.c.new {{ compose_dir }}/compose.yaml
|
||||
when: "! grep -q 'SEARXNG_SECRET=${SEARXNG_SECRET}$' {{ compose_dir }}/compose.yaml || ! grep -q SEARXNG_BRAVE_API_KEY {{ compose_dir }}/compose.yaml"
|
||||
|
||||
- name: Recreate container (env changes need up -d, not restart)
|
||||
shell: cd {{ compose_dir }} && docker compose up -d
|
||||
|
||||
verify:
|
||||
- name: New config in place
|
||||
shell: grep -q 'Tier A (v3' {{ conf }}
|
||||
shell: grep -q 'Tier A (v4' {{ conf }}
|
||||
changed_when: "false"
|
||||
|
||||
- name: Container serving /healthz after restart
|
||||
- name: Compose references the key
|
||||
shell: grep -q SEARXNG_BRAVE_API_KEY {{ compose_dir }}/compose.yaml
|
||||
changed_when: "false"
|
||||
|
||||
- name: Key is in the container env
|
||||
shell: docker exec searxng printenv SEARXNG_BRAVE_API_KEY >/dev/null
|
||||
changed_when: "false"
|
||||
|
||||
- name: Container serving /healthz after recreate
|
||||
shell: sleep 8; curl -sf http://127.0.0.1:9996/healthz
|
||||
changed_when: "false"
|
||||
|
||||
@@ -16,6 +16,16 @@ services:
|
||||
- /opt/docker/conf/searxng/searxng-settings.yml:/etc/searxng/settings.yml:ro
|
||||
environment:
|
||||
- SEARXNG_SECRET=${SEARXNG_SECRET}
|
||||
# Brave Search API key (vault: nh3-docker/searxng-brave-api-key).
|
||||
# ⚠ NOTHING READS THIS. It was added on the belief that settings.yml could
|
||||
# pull it via `!ENV SEARXNG_BRAVE_API_KEY`; this build has no !ENV YAML
|
||||
# constructor, so that attempt crash-looped the container ten times with
|
||||
# search down fleet-wide. The loader reads only SEARXNG_SETTINGS_PATH and
|
||||
# the entrypoint substitutes only `ultrasecretkey`. The key is therefore
|
||||
# inline in searxng-settings.yml by operator decision. Kept here, unused,
|
||||
# so it is ready if upstream ever gains env interpolation — remove it
|
||||
# rather than believing the comment it replaced.
|
||||
- SEARXNG_BRAVE_API_KEY=${SEARXNG_BRAVE_API_KEY}
|
||||
- BASE_URL=http://10.100.50.40:9996/
|
||||
- INSTANCE_NAME=SearXNG
|
||||
deploy:
|
||||
|
||||
Reference in New Issue
Block a user