nanobot: 2026-09-14 12:02:18

This commit is contained in:
lachtan
2026-09-14 12:02:19 +02:00
parent 15a735e9bf
commit 59bddbff63
10 changed files with 169 additions and 82 deletions

View File

@@ -37,8 +37,8 @@
} }
}, },
"state": { "state": {
"nextRunAtMs": 1789365600000, "nextRunAtMs": 1789452000000,
"lastRunAtMs": 1789279200002, "lastRunAtMs": 1789365600002,
"lastStatus": "ok", "lastStatus": "ok",
"lastError": null, "lastError": null,
"runHistory": [ "runHistory": [
@@ -65,11 +65,17 @@
"status": "ok", "status": "ok",
"durationMs": 10674, "durationMs": 10674,
"error": null "error": null
},
{
"runAtMs": 1789365600002,
"status": "ok",
"durationMs": 5495,
"error": null
} }
] ]
}, },
"createdAtMs": 1788948314679, "createdAtMs": 1788948314679,
"updatedAtMs": 1789279210676, "updatedAtMs": 1789365605497,
"deleteAfterRun": false "deleteAfterRun": false
}, },
{ {
@@ -96,29 +102,11 @@
"originMetadata": {} "originMetadata": {}
}, },
"state": { "state": {
"nextRunAtMs": 1789364183388, "nextRunAtMs": 1789385799072,
"lastRunAtMs": 1789356983377, "lastRunAtMs": 1789378599061,
"lastStatus": "ok", "lastStatus": "ok",
"lastError": null, "lastError": null,
"runHistory": [ "runHistory": [
{
"runAtMs": 1789220182467,
"status": "ok",
"durationMs": 11,
"error": null
},
{
"runAtMs": 1789227382479,
"status": "ok",
"durationMs": 11,
"error": null
},
{
"runAtMs": 1789234582756,
"status": "ok",
"durationMs": 10,
"error": null
},
{ {
"runAtMs": 1789241782766, "runAtMs": 1789241782766,
"status": "ok", "status": "ok",
@@ -220,11 +208,29 @@
"status": "ok", "status": "ok",
"durationMs": 11, "durationMs": 11,
"error": null "error": null
},
{
"runAtMs": 1789364183389,
"status": "ok",
"durationMs": 11,
"error": null
},
{
"runAtMs": 1789371383401,
"status": "ok",
"durationMs": 15659,
"error": null
},
{
"runAtMs": 1789378599061,
"status": "ok",
"durationMs": 11,
"error": null
} }
] ]
}, },
"createdAtMs": 1789032980434, "createdAtMs": 1789032980434,
"updatedAtMs": 1789356983388, "updatedAtMs": 1789378599072,
"deleteAfterRun": false "deleteAfterRun": false
}, },
{ {
@@ -251,65 +257,11 @@
"originMetadata": {} "originMetadata": {}
}, },
"state": { "state": {
"nextRunAtMs": 1789364187765, "nextRunAtMs": 1789380399074,
"lastRunAtMs": 1789362387765, "lastRunAtMs": 1789378599074,
"lastStatus": "ok", "lastStatus": "ok",
"lastError": null, "lastError": null,
"runHistory": [ "runHistory": [
{
"runAtMs": 1789328186900,
"status": "ok",
"durationMs": 0,
"error": null
},
{
"runAtMs": 1789329986901,
"status": "ok",
"durationMs": 0,
"error": null
},
{
"runAtMs": 1789331787068,
"status": "ok",
"durationMs": 0,
"error": null
},
{
"runAtMs": 1789333587354,
"status": "ok",
"durationMs": 0,
"error": null
},
{
"runAtMs": 1789335387356,
"status": "ok",
"durationMs": 0,
"error": null
},
{
"runAtMs": 1789337187359,
"status": "ok",
"durationMs": 0,
"error": null
},
{
"runAtMs": 1789338987559,
"status": "ok",
"durationMs": 1,
"error": null
},
{
"runAtMs": 1789340787561,
"status": "ok",
"durationMs": 1,
"error": null
},
{
"runAtMs": 1789342587563,
"status": "ok",
"durationMs": 1,
"error": null
},
{ {
"runAtMs": 1789344387716, "runAtMs": 1789344387716,
"status": "ok", "status": "ok",
@@ -375,11 +327,65 @@
"status": "ok", "status": "ok",
"durationMs": 0, "durationMs": 0,
"error": null "error": null
},
{
"runAtMs": 1789364187933,
"status": "ok",
"durationMs": 0,
"error": null
},
{
"runAtMs": 1789365987935,
"status": "ok",
"durationMs": 0,
"error": null
},
{
"runAtMs": 1789367787935,
"status": "ok",
"durationMs": 1,
"error": null
},
{
"runAtMs": 1789369587937,
"status": "ok",
"durationMs": 0,
"error": null
},
{
"runAtMs": 1789371399064,
"status": "ok",
"durationMs": 0,
"error": null
},
{
"runAtMs": 1789373199066,
"status": "ok",
"durationMs": 0,
"error": null
},
{
"runAtMs": 1789374999068,
"status": "ok",
"durationMs": 0,
"error": null
},
{
"runAtMs": 1789376799070,
"status": "ok",
"durationMs": 0,
"error": null
},
{
"runAtMs": 1789378599074,
"status": "ok",
"durationMs": 0,
"error": null
} }
] ]
}, },
"createdAtMs": 1789032980437, "createdAtMs": 1789032980437,
"updatedAtMs": 1789362387765, "updatedAtMs": 1789378599074,
"deleteAfterRun": false "deleteAfterRun": false
} }
] ]

View File

@@ -1 +1 @@
425 428

View File

@@ -423,3 +423,6 @@
{"cursor": 423, "timestamp": "2026-08-28 13:26", "content": "- [ephemeral] User switched model preset to `kimi27` (`kimi-k2.7-code:cloud`) for the current session.", "session_key": "websocket:f6e1e265-7a37-451c-ad7a-f601c40fdc5a"} {"cursor": 423, "timestamp": "2026-08-28 13:26", "content": "- [ephemeral] User switched model preset to `kimi27` (`kimi-k2.7-code:cloud`) for the current session.", "session_key": "websocket:f6e1e265-7a37-451c-ad7a-f601c40fdc5a"}
{"cursor": 424, "timestamp": "2026-08-31 09:17", "content": "- [skip] Background cron drain task: compiled 17 inbox files from notes/inbox/ into notes/notes.md (created new, 7 thematic sections), moved all sources to notes/done/\n- [skip] Per note SKILL.md, the notes/ store is separate from agent memory (keep/MEMORY.md) — Dream must not touch notes/, so the compiled note contents (chata shopping list, DT Glass product details, ZOT work items, 25.5 cm chair-to-table measurement, etc.) live only in notes/notes.md and are not mirrored here\n- [skip] Two DT Glass product URLs (UNIVERSAL and Amber wine-bottle glasses, 69 Kč) fetched successfully — details filed under \"## DT Glass\" section in notes/notes.md\n- [skip] notes/notes.md did not exist before this compile; it was created fresh with sections: DevOps/Infra, Nanobot, Chata, DT Glass, Měření, 3D tisk, Work/ZOT", "session_key": "note-compile"} {"cursor": 424, "timestamp": "2026-08-31 09:17", "content": "- [skip] Background cron drain task: compiled 17 inbox files from notes/inbox/ into notes/notes.md (created new, 7 thematic sections), moved all sources to notes/done/\n- [skip] Per note SKILL.md, the notes/ store is separate from agent memory (keep/MEMORY.md) — Dream must not touch notes/, so the compiled note contents (chata shopping list, DT Glass product details, ZOT work items, 25.5 cm chair-to-table measurement, etc.) live only in notes/notes.md and are not mirrored here\n- [skip] Two DT Glass product URLs (UNIVERSAL and Amber wine-bottle glasses, 69 Kč) fetched successfully — details filed under \"## DT Glass\" section in notes/notes.md\n- [skip] notes/notes.md did not exist before this compile; it was created fresh with sections: DevOps/Infra, Nanobot, Chata, DT Glass, Měření, 3D tisk, Work/ZOT", "session_key": "note-compile"}
{"cursor": 425, "timestamp": "2026-09-08 20:54", "content": "(nothing)", "session_key": "telegram:8826147089"} {"cursor": 425, "timestamp": "2026-09-08 20:54", "content": "(nothing)", "session_key": "telegram:8826147089"}
{"cursor": 426, "timestamp": "2026-09-14 08:33", "content": "- [ephemeral] Active plan: run qwen3-embedding:0.6b as a static llama.cpp server on nvidia.hell:8081 (instead of via ollama) to isolate wiki embeddings from ollama's unstable load path; parity test script prepared at tmp/embed-parity-test.py — embed same chunks via both endpoints, cosine > 0.999 → switch wiki/config.yaml endpoint without reindex\n- [durable] qwen3-embedding:0.6b GGUF can be reused from ollama blob store: /usr/share/ollama/.ollama/models/blobs/sha256-06507c7b42688469c4e7298b0a1e16deff06caf291cf0a5b278c308249c3e439 — copy to own path (e.g. ~/models/) before use, ollama pull can swap the blob\n- [durable] On nvidia.hell, `llama` binary v0.4.0-dev build 10909 installed via official `curl -LsSf https://llama.app/install.sh | sh` (llama.app is the official llama.cpp installer; GitHub nightly releases have NO Linux CUDA build, CUDA prebuilts exist only via llama.app on Linux)\n- [durable] Verified `llama serve` on nvidia.hell supports all required embedding flags: --embeddings, --pooling {none,mean,cls,last,rank}, -c/--ctx-size, -ngl; launch command: `llama serve -m ~/models/qwen3-embedding-0.6b.gguf --embeddings --pooling last -ngl 999 -c 1024 --host 0.0.0.0 --port 8081` (needs --host 0.0.0.0 so nanobot can reach it)\n- [correction] nanobot.hell is NOT a persistent load source on local ollama — the batch requests over ~10 models were one-time tool-calling tests; in normal operation nanobot uses local ollama only for (a) wiki embedding (qwen3-embedding:0.6b) and (b) :cloud model proxying — report todo #1 \"stop nanobot batches\" is not an operational risk\n- [durable] Ollama on nvidia.hell root cause (from two saved Claude Code reports, artifacts in projects/devops/artifacts/): broken mmap decision + load interruption leaks pinned host memory (only reboot frees it, not rmmod); verified mitigation is cgroup limit MemoryMax=6G + MemorySwapMax=0 (no MemoryHigh); earlyoom rejected — external killer makes the leak worse\n- [durable] Embedding models need KV buffer sized only for max input length (-c 1024 suffices for wiki chunks); llama.cpp default reads full context from model metadata and over-allocates for embedding use\n- [skip] User will confirm when the llama.cpp server is running so the agent can run the parity test; exact HF repo name for Qwen3-Embedding GGUF not confirmed from memory", "session_key": "websocket:0d81522a-4774-490a-a2c3-10d72dcd4680"}
{"cursor": 427, "timestamp": "2026-09-14 08:42", "content": "- [durable] Ollama vs llama.cpp embedding parity test for qwen3-embedding:0.6b (GGUF blob sha256-06507c7b...) failed — cosine only 0.870.93, not >0.999. Special tokens (EOS 151643, `</s>` 128247), BOS, chat templates (`<|im_start|>`), query prefixes, and normalization were all systematically ruled out. Main hypothesis: ollama uses mean pooling while llama.cpp server runs `--pooling last`; next step is restarting llama server with `--pooling mean` and re-running the parity test.\n- [durable] Model oddity: the GGUF blob has `</s>` at token 128247 flagged as \"control-looking token, probably a bug in the model\"; llama.cpp auto-appends Qwen EOS 151643 on tokenize (add_special=true).\n- [durable] llama.cpp server per-request `pooling` field in `/embedding` payload is ignored — server-level `--pooling` flag wins.\n- [durable] Workspace pitfall: `tmp/queue.py` in the nanobot workspace shadows Python stdlib `queue` module (breaks urllib3 imports in uv scripts); run test scripts from a separate subdirectory like `tmp/embed-test/` instead.\n- [durable] llama.cpp `/v1/embeddings` response shape: top-level is a list of items with keys `['index', 'embedding']` (OpenAI-style), not `{\"embedding\": ...}`.\n- [durable] Environment: ollama at http://nvidia.hell:11434 (qwen3-embedding:0.6b), llama.cpp server at http://nvidia.hell:8081; llama server run with `--embeddings --pooling last -ngl 999 -c 1024 --host 0.0.0.0 --port 8081`, n_slots=4.\n- [permanent] User preference: do not switch the wiki embedding pipeline from ollama to llama.cpp without resolving the parity issue (decision: \"NEPREPINAT bez reseni\").", "session_key": "websocket:0d81522a-4774-490a-a2c3-10d72dcd4680"}
{"cursor": 428, "timestamp": "2026-09-14 08:44", "content": "- [durable] llama.cpp server and ollama produce fundamentally different embeddings for `qwen3-embedding:0.6b` even on identical single-token input (`cat` → cosine 0.36); parity by reusing the ollama blob is not achievable — the forward pass itself yields different vectors.\n- [durable] Both engines read the same blob `sha256-06507c7b…` (Q8_0, `general.file_type=7`, `pooling_type=3`), so quantization was ruled out as the cause; suspected different GGUF build/tokenizer handling in ollama's vendored llama.cpp.\n- [durable] `tmp/queue.py` in the nanobot workspace shadows the stdlib `queue` module and breaks Python scripts importing `requests`/`urllib3` — run scripts from a subdirectory (e.g. `tmp/embed-test/`) instead.\n- [durable] ollama 0.34.0 at `nvidia.hell:11434` has no `/api/tokenize` endpoint; `/api/embed` options `raw`, `truncate`, `num_ctx` (512/1024/8192) have zero effect on output vectors.\n- [durable] llama.cpp server is fully deterministic (5× same input → cosine 1.000000) and `--pooling last` is the best-fitting pooling for qwen3-embedding (mean pooling measured worse: 0.500.71 vs 0.870.93 cosine).\n- [durable] Reference: GitHub issue ollama/ollama#14121 documents the same qwen3-embedding mismatch; note llama-cpp-python `n_batch=512` chunk-splitting corrupts embeddings for inputs >512 tokens (not the cause here, inputs were ~79 tokens).\n- [ephemeral] Decision pending: three paths offered for the wiki embedding index — (1) pull the same GGUF directly in llama.cpp and retest parity, (2) reindex wiki with llama.cpp server (port 8081, `--pooling last`) as the new source of truth (assistant's recommendation), (3) stay on ollama for embeddings (loses the goal of isolating embeddings from ollama's load-path instability). User has not yet chosen.\n- [skip] Context: this debugging is part of an ongoing embed-parity test effort to migrate embeddings away from ollama's unstable load path.", "session_key": "websocket:0d81522a-4774-490a-a2c3-10d72dcd4680"}

View File

@@ -98,3 +98,25 @@ Koreluje s dřívějšími nálezy z tool-call testů (2026-09-12/13), kdy nesta
Závěr uživatele: současný stav (modely pod 10 GB na této GPU instanci) není použitelný pro reálný provoz, jen pro testy. Otevřené otázky pro případné hledání řešení: stabilizace Ollama serveru (limit paměti per model, OLLAMA_MAX_LOADED_MODELS, auto-restart), alternativní runtime (llama.cpp server přímo, vLLM), nebo kapacitnější hardware. Závěr uživatele: současný stav (modely pod 10 GB na této GPU instanci) není použitelný pro reálný provoz, jen pro testy. Otevřené otázky pro případné hledání řešení: stabilizace Ollama serveru (limit paměti per model, OLLAMA_MAX_LOADED_MODELS, auto-restart), alternativní runtime (llama.cpp server přímo, vLLM), nebo kapacitnější hardware.
- 2026-09-13: Research alternativ k Ollama (uživatel: nestabilita na nvidia.hell je v praxi nepoužitelná). Root cause potvrzen: watchdog killy = OOM na RAM, llama-server je stejně llama.cpp — problém je Ollamina heuristika offloadingu/kontextu, ne engine sám. Alternativy ověřeny z více zdrojů (codersera, local-llm.net, inventivehq, r/LocalLLaMA thread k postu „Friends Don't Let Friends Use Ollama", duben 2026): (1) llama.cpp llama-server + llama-swap — konsensus komunity, OpenAI-compatible API, hot-swap modelů, explicitní -c/-ngl kontrola → doporučeno uživateli; (2) vLLM — pro multi-user serving, na RTX 4060 tight (safetensors, KV cache overhead), odloženo; (3) LM Studio/Jan — zavrhnuté (Electron, closed source); (4) zůstat na Ollama + hardening (OLLAMA_MAX_LOADED_MODELS=1, systemd Restart/MemoryMax) — fallback. Čeká se na rozhodnutí uživatele, nabídka přípravy llama-swap yaml + systemd unit + litellm wiring. - 2026-09-13: Research alternativ k Ollama (uživatel: nestabilita na nvidia.hell je v praxi nepoužitelná). Root cause potvrzen: watchdog killy = OOM na RAM, llama-server je stejně llama.cpp — problém je Ollamina heuristika offloadingu/kontextu, ne engine sám. Alternativy ověřeny z více zdrojů (codersera, local-llm.net, inventivehq, r/LocalLLaMA thread k postu „Friends Don't Let Friends Use Ollama", duben 2026): (1) llama.cpp llama-server + llama-swap — konsensus komunity, OpenAI-compatible API, hot-swap modelů, explicitní -c/-ngl kontrola → doporučeno uživateli; (2) vLLM — pro multi-user serving, na RTX 4060 tight (safetensors, KV cache overhead), odloženo; (3) LM Studio/Jan — zavrhnuté (Electron, closed source); (4) zůstat na Ollama + hardening (OLLAMA_MAX_LOADED_MODELS=1, systemd Restart/MemoryMax) — fallback. Čeká se na rozhodnutí uživatele, nabídka přípravy llama-swap yaml + systemd unit + litellm wiring.
- 2026-09-14: Tool llmfit — poznámka z článku uloženého přes /bookmark (Medium, Data Science Collective, Anubhav, 5 dní zpět; fulltext v db/bookmark.sqlite, bookmark #1):
- **llmfit** = CLI tool (brew install llmfit, binárky na releases page), projde ~13k modelů a ohodnotí, co se vejde do RAM/VRAM na daném stroji + odhad tokens/s.
- **Fit je spolehlivý** — je to aritmetika (parametry × bits ÷ 8 + context cache), kterou si může každý spočítat sám. Článek: „the arithmetic behind it is arithmetic you can check yourself".
- **Tokens/s je guess** — vzorec memory bandwidth ÷ model size × konstantní efficiency factor 0.55 (nikdo nevypočítal, ručně zvoleno, ověřeno na 3 mašinách, stejné pro všechny karty). Deklarovaná 30% error band, reálně až 2x off (quoted 337 → measured 16). Počítá proti celkové VRAM karty, ne proti volné.
- **Klíčové pravidlo čtení**: vedle čísla je label zdroje (measured vs formula) — formule = ceiling, nikdy reálný výkon. Katalog má jen 1412 reálných měření vs ~13k modelů.
- Další příkazy: `llmfit info "<model>"` (odkud číslo přišlo), `llmfit plan` (jaký HW model potřebuje), `llmfit bench` (reálné měření 3 inference passes — tohle nahrazuje odhad).
- Skórovací heuristika je zastaralá — kvalita se dědí podle nejdelšího rozpoznaného prefixu rodiny, tabulka má 20 řádků, takže qwen3.6/3.8 dědí skóre po starších verzích → často doporučuje zastaralé modely.
- Relevantní pro náš kontext: potvrzuje naši zkušenost z tool-call testů, že tokens/s a výkon závisí na loaderu, ne jen na HW (13.69 vs 4.51 tok/s pro tentýž 4-bit model na stejné kartě, jiný engine). Alternativa pro sizing: llama-fit-params z llama.cpp — čte volnou paměť v reálném čase, říká, co musel ořezat.
- 2026-09-14: Zhodnocení článku „A global CLAUDE.md and its best pieces" (Reza Rezvani, Medium, 2026-09-06) — global CLAUDE.md jako kontrakt s modelem, 8 pravidel, ~130 řádků.
**Co už máme:** surgical changes, minimal code, escalate jen u nevratných akcí, „green není důkaz" — vše už v AGENTS.md skoro doslova. Článek = potvrzení, ne novinka.
**Přínosné pro nás:**
- Decay mechanism: chyba 1× → řádek s datem do lessons-logu, 2× → do pravidel, po 90 dnech bez výskytu → demotion zpět do logu. Naše AGENTS.md/SOUL.md jen rostou; compact-memory řeší MEMORY.md, ne soubory pravidel. Kandidát na heartbeat task nebo rozšíření compact-memory.
- „Každé pravidlo pojmenovává konkrétní selhání" — test před přidáním řádku; píšeme pravidla i spekulativně.
- Closing report per acceptance criterion, silence = not met — silnější než naše „neohlašuj splnění bez toolu"; kryje vynechaný krok v reportu (omission is not lying).
- Prose rule broken twice → hook, konvence [hook] tagu — potvrzení našeho exec guard přístupu.
**Pro uživatele přímo:** Prompt 1 (merge CLAUDE.md template s inventářem prostředí) a Prompt 6 (quarterly trim) použitelné v Claude Code na devlin.hell.
**Odmítnuto:** kopírovat celý soubor (polovina řádků specific pro autorův stroj); článek je anekdotický, bez měření.

View File

@@ -3,6 +3,14 @@
## Otevřená témata ## Otevřená témata
- Při hlášení nestabilit ověřit reálný model/preset (session metadata ho nezaznamenávají). - Při hlášení nestabilit ověřit reálný model/preset (session metadata ho nezaznamenávají).
## Nápady k pozlatejšímu použití — pozastaveno, neimplementovat
Zdroj: Rezvani — „A global CLAUDE.md and its best pieces" (zhodnocení v memory.md 2026-09-14):
- **Decay mechanism pro pravidla** — 1. výskyt chyby → datovaný řádek do lessons-logu, 2. výskyt → pravidlo do AGENTS.md/SOUL.md; po 90 dnech bez výskytu demotion zpět do logu. Kandidát na heartbeat task nebo rozšíření compact-memory (ten dnes řeší jen MEMORY.md).
- **Closing report per acceptance criterion, silence = not met** — každé kritérium dostane verdict splněno/nesplněno s evidencí session; mlčení o kroku = nesplněno. Kryje vynechaný krok v reportu.
- **Test před přidáním pravidla** — každé pravidlo musí pojmenovávat konkrétní selhání, které se stalo; spekulativní pravidla nepřidávat.
- Pro Claude Code na devlin.hell: Prompt 1 (merge CLAUDE.md template s inventářem prostředí) a Prompt 6 (quarterly trim).
## Nápady k pozdějšímu použití (z článku „LLM jako virtuální projektový tým") ## Nápady k pozdějšímu použití (z článku „LLM jako virtuální projektový tým")
Zdroj: Zdroj:

View File

@@ -60,3 +60,35 @@ Běžný provoz nanobota na lokální ollamu **nesahá**: používá ji jen na (
Důsledek pro open body: bod 1 reportu („zastavit dávky z nanobotu — bez toho leak zpátky během minut") **neplatí jako provozní riziko**, jen jako poučení pro případné budoucí testovací dávky. Zbylé open body (retest pojistky, MemoryMax, gemma4, KV_CACHE_TYPE, drobnosti) zůstávají. Trvalé součásti povrchu nanobot→ollama zůstávají embeddingy — izolace embeddingů na samostatný statický server (llama.cpp/vLLM) tím dává ještě větší smysl: po ní lokalně nezůstane téměř žádný nanobot provoz, který by ollamu mohl shodit. Důsledek pro open body: bod 1 reportu („zastavit dávky z nanobotu — bez toho leak zpátky během minut") **neplatí jako provozní riziko**, jen jako poučení pro případné budoucí testovací dávky. Zbylé open body (retest pojistky, MemoryMax, gemma4, KV_CACHE_TYPE, drobnosti) zůstávají. Trvalé součásti povrchu nanobot→ollama zůstávají embeddingy — izolace embeddingů na samostatný statický server (llama.cpp/vLLM) tím dává ještě větší smysl: po ní lokalně nezůstane téměř žádný nanobot provoz, který by ollamu mohl shodit.
- 2026-09-14: Závěr embed-parity snažení (qwen3-embedding:0.6b, ollama vs llama.cpp server na :8081, `--pooling last`): parita **neexistuje** — stejné vstupy dávají fundamentálně odlišné vektory (i jednotokenový vstup `cat` → cosine 0,36; delší vstupy 0,870,93), reuse ollama blobu v llama.cpp paritu nezajistí, pooling ani input wrapping (speciální tokeny, chat template) rozdíl nevysvětlují (vše systematicky vyzkoušeno a vyloučeno). Uživatelovo závěrečné rozhodnutí: **při přechodu na čistý llama.cpp se reindexuje celá wiki báze** — žádná snaha o bezreindex migraci; přepnout endpoint v wiki/config.yaml na nvidia.hell:8081 + full reindex jedním krokem. - 2026-09-14: Závěr embed-parity snažení (qwen3-embedding:0.6b, ollama vs llama.cpp server na :8081, `--pooling last`): parita **neexistuje** — stejné vstupy dávají fundamentálně odlišné vektory (i jednotokenový vstup `cat` → cosine 0,36; delší vstupy 0,870,93), reuse ollama blobu v llama.cpp paritu nezajistí, pooling ani input wrapping (speciální tokeny, chat template) rozdíl nevysvětlují (vše systematicky vyzkoušeno a vyloučeno). Uživatelovo závěrečné rozhodnutí: **při přechodu na čistý llama.cpp se reindexuje celá wiki báze** — žádná snaha o bezreindex migraci; přepnout endpoint v wiki/config.yaml na nvidia.hell:8081 + full reindex jedním krokem.
- 2026-09-14: Z článku "10 Linux Tools" potvrzený stávající tooling: uživatel používá tmux, lazydocker, bat, mosh. Z výčtu nevyužité kandidáti: fzf, zoxide, ripgrep, fd, delta, btop.
- 2026-09-14: Druhý článek ("10 CLI Tools That 10x Backend Productivity") — potvrzeno: just už zkoušel a líbí se mu hodně (jedina výtka: málo rozšířený), jq používá, zůstává u curl (httpie viděl, ale nepřepnul). Další kandidáti z článku k nezavedení: watchexec/entr, xh, eza, mise, pgcli, gh.
- 2026-09-14: Z článku (Medium, DataExpert, 2026-09-03) a online verifikace — poznámka ke stacku DuckDB + Apache Iceberg + dbt:
Use case: celý enterprise lakehouse workflow (incremental loading, SCD Type 2, partition pruning, schema evolution, data quality testy, compaction) lze prototypovat a učit na laptopu za $0, místo placeného Snowflake/Databricks compute. dbt-duckdb adapter = stejné SQL/modely lokálně i na produkci (Snowflake/BigQuery), mění se jen dbt target. Relevance pro homelab: levná varianta pro vlastní analytické pipeline na malých/ Středních datech (10100 GB), kde by jinak byl nutný Spark cluster.
Ověřené fakta (primární zdroje):
- DuckDB v1.5.3 (2026-05-29): plná podpora zápisu do Iceberg tabulek — MERGE INTO (merge-on-read, positional deletes), ALTER TABLE (schema evolution, metadata-only), partition transforms bucket/truncate, Iceberg V3 (deletion vectors jako Puffin, VARIANT, TIMESTAMP_NS). Dřív jen čtení; zápis vyžadoval Spark. Zdroj: https://duckdb.org/2026/05/29/new-iceberg-features a https://duckdb.org/2025/11/28/iceberg-writes-in-duckdb
- DuckLake v1.0 (2026-04-13): lakehouse formát, metadata v SQL databázi (catalog SQLite/Postgres/DuckDB) místo metadata souborů v object storage; data inlining (default threshold 10 řádků) řeší small-file problem; volitelná Iceberg kompatibilita. Zdroj: https://ducklake.select/2026/04/13/ducklake-10/
- Apache Polaris: free self-hostable Iceberg REST catalog, top-level Apache projekt (únor 2026) — náhrada Hive Metastore/Glue pro lokální setup.
- AWS acquirenul DuckLabs (tým za DuckDB, srpen 2026); projekt zůstává MIT pod nezávislou DuckDB Foundation.
Benchmarky jen z Medium článku, neověřitelné, brát s rezervou: FinQore pipeline 8 h → 8 min (60×, migrace z Postgres); dashboard dotazy 200400 ms vs 25 s Snowflake X-Small; MotherDuck 67× rychlejší než ekvivalentně ceněné Snowflake/Redshift na 10100 GB.
Limity stacku: DuckDB 1 writer (multi-process writes selhávají), Iceberg+Parquet 23× pomalejší než nativní DuckDB formát, small-file/manifest explosion se na laptopových datech neprojeví — produkční operační zkušenost se musí nabýt na produkci.
- 2026-09-14: Poznámka z článku (Medium, Jesse L, ~2026-11): **Posting** — TUI HTTP klient jako alternativa k Postman/Insomnia. Relevance pro homelab: běží v terminálu přes SSH, takže se dá testovat API přímo ze stroje, který na něj dosáhne (uvnitř VPC, za bastionem, interní služby v Proxmox/LXC) — žádný port forwarding ani tunel GUI klientu.
Klíčové fakta:
- Python + Textual framework; zdroj https://github.com/darrenburns/posting, dokumentace https://posting.sh; verze k psaní článku v2.10.0
- Instalace: `uv tool install --python 3.13 posting` (izolovaný Python, nesahá na systémovou verzi); Homebrew/NixOS oficiálně nepodporované
- Requesty jsou čitelné **YAML soubory** (`.posting.yaml`), kolekce = adresář — commitovatelné vedle kódu, čitelné diffy v PR, žádný export/import JSON s generovanými ID
- Prostředí přes `.env` soubory: `posting --env dev.env` / `posting --env staging.env` — stejné env soubory jako zbytek projektu, tajemství se necommitují
- Import z Postman/OpenAPI: `posting import -t postman collection.json` / `-t openapi openapi.yaml` — z OpenAPI specu lze vygenerovat sadu requestů bez ruční práce
- Klávesy: `Ctrl+P` command palette (jako VS Code), `Ctrl+J` odeslat, Tab/j/k navigace, jump mode s písmeny na widgetech
- Konfig: `~/.config/posting/config.yaml` (témata, keybindings, default headers) → vhodné do dotfiles repa; default kolekce `~/.local/share/posting/default`
- `posting locate config` / `posting locate collection` vypíše cesty
Kdy se nehodí: automatizované testy/CI (na to pytest+httpx nebo newman), sdílené workspaces/mock servery (komerční klienty), API design/dokumentace.
Alternativy: **atac** (Rust TUI, podobný cíl), **httpie**/**curlie** (CLI, rychlejší na jednorázovky), **Bruno** (GUI, ale stejná file-based Git-friendly filozofie).
Vzetá idea i bez instalace: API requesty patří do repa jako soubory vedle kódu, který testují — ne do proprietárního formátu v cizím cloudu.

View File

@@ -0,0 +1,10 @@
# Tréninkový log — fyzio cviky
Pravidlo: vynechaný den není selhání. Pásmo: podlaha 2×/týden, strop denně.
| Datum | Trénink | Poznámka |
|------------|---------|----------|
| 2026-09-11 | ✅ | první trénink po fyzio (10.9.) |
| 2026-09-12 | ✅ | opakování |
| 2026-09-13 | ❌ | |
| 2026-09-14 | ✅ | |

View File

@@ -22,3 +22,5 @@
- 2026-09-11: Zjistěno z rešerše četnosti fyzio cviků (daily vs obden): u nízkointenzivních mobilitních/protahovacích cviků je dostačující denně i obden — intenzita určuje potřebnou frekvenci, neexistuje potřeba regenerace. Kohortní studie (Musculoskelet. Sci. Pract. 2025, 185 pacientů NLBP): vyšší předepsaná frekvence a dávka signifikantně snižují adherence → obden, který vydrží, je lepší než denní plán, který se rozpadne. Delphi konsensus expertů (2025): efekt protahování na ROM je chronický/kumulativní, vynechaný den nic nezruší. Závěr pro projekt: obden (34× týdně) plně dostačující a udržitelnější; denní večerní protahování (bez potu) ponechat jako levný návyk. Zdroje: cor-kinetic.com blog 6/2020, mskscienceandpractice.com S2468-7812(25)00186-9, PMC12305623. - 2026-09-11: Zjistěno z rešerše četnosti fyzio cviků (daily vs obden): u nízkointenzivních mobilitních/protahovacích cviků je dostačující denně i obden — intenzita určuje potřebnou frekvenci, neexistuje potřeba regenerace. Kohortní studie (Musculoskelet. Sci. Pract. 2025, 185 pacientů NLBP): vyšší předepsaná frekvence a dávka signifikantně snižují adherence → obden, který vydrží, je lepší než denní plán, který se rozpadne. Delphi konsensus expertů (2025): efekt protahování na ROM je chronický/kumulativní, vynechaný den nic nezruší. Závěr pro projekt: obden (34× týdně) plně dostačující a udržitelnější; denní večerní protahování (bez potu) ponechat jako levný návyk. Zdroje: cor-kinetic.com blog 6/2020, mskscienceandpractice.com S2468-7812(25)00186-9, PMC12305623.
- 2026-09-11: Rozhodnutí o frekvenci fyzio cviků: denní snaha, ale s vestavěnou tolerancí — vynechaný den není selhání ani důvod hodit režim. Pásmo místo fixního plánu: nahoře každodenní snaha, dole pevná podlaha 2× týdně, cokoli mezi je úspěch. Schválně proti all-or-nothing thinking, které adherence studie ukazují jako hlavní riziko denních předpisů. - 2026-09-11: Rozhodnutí o frekvenci fyzio cviků: denní snaha, ale s vestavěnou tolerancí — vynechaný den není selhání ani důvod hodit režim. Pásmo místo fixního plánu: nahoře každodenní snaha, dole pevná podlaha 2× týdně, cokoli mezi je úspěch. Schválně proti all-or-nothing thinking, které adherence studie ukazují jako hlavní riziko denních předpisů.
- 2026-09-12: Opakování fyzio cviků (kyčel/pánev) — další trénink po zahájení 11.9., adherence drží v rámci zvoleného pásma (podlaha 2×/týden, cíl denně). - 2026-09-12: Opakování fyzio cviků (kyčel/pánev) — další trénink po zahájení 11.9., adherence drží v rámci zvoleného pásma (podlaha 2×/týden, cíl denně).
- 2026-09-14: Založen tréninkový log (artifacts/trenink-log.md) — tabulka datum/trénink/poznámka pro fyzio cviky. Vynechaný den 13.9. bez komentáře (v rámci tolerance), 14.9. cvičil.
- 2026-09-14: Doplněno do cílů projektu (prompt.md): dobrá mobilita hlavně kyčle, pohyb bez bolesti, ideálně pravidelné cvičení — vedle změny váhy a kondice.

View File

@@ -13,6 +13,9 @@ toho, co funguje a co ne, se plán zpřesňuje. Ber to jako živou věc, ne pevn
tomuhle. Když se rozhodujeme mezi variantami, měř je proti tomuto cíli a proti tomuhle. Když se rozhodujeme mezi variantami, měř je proti tomuto cíli a proti
udržitelnosti. udržitelnosti.
**Dobrá mobilita hlavně kyčle, pohyb bez bolesti.** Ideálně pravidelné
cvičení.
## Oblasti, které řešíme ## Oblasti, které řešíme
- **Cvičení** — síla (vlastní váha nebo kettlebell), zatím taky nepravidelně. - **Cvičení** — síla (vlastní váha nebo kettlebell), zatím taky nepravidelně.

View File

@@ -56,3 +56,4 @@ Denní vážení, vnímaná kondice, jestli mě něco bolí.
den není selhání. Pásmo: podlaha 2× týdně (pevná), strop denně, cokoli den není selhání. Pásmo: podlaha 2× týdně (pevná), strop denně, cokoli
mezi = úspěch. Fyzicky stačilo i obden, denní cíl je kvůli návyku, ne mezi = úspěch. Fyzicky stačilo i obden, denní cíl je kvůli návyku, ne
povinnosti. povinnosti.
- **Tréninkový log**: `artifacts/trenink-log.md` (založen 14.9.2026).