This commit is contained in:
lachtan
2026-09-16 08:56:28 +02:00
parent b0827177d2
commit 5407931bdc
4 changed files with 550 additions and 29 deletions

View File

@@ -31,3 +31,60 @@ Po každém commitu, který mění `knowledge.md`, `history.md` nebo `memory.md`
**Why:** Uživatel 2026-06-02 chtěl agentovi zpřístupnit develop kontext a zvolil průběžnou synchronizaci (ne jednorázovou kopii) — jinak agent časem uvidí zastaralý stav.
**How to apply:** `rsync -av <soubor> nanobot@nanobot.hell:/home/nanobot/.nanobot/workspace/develop/`. `README.md` v `develop/` je statický popis, ten se nesynchronizuje. Owner zůstává `nanobot:nanobot` (jdeme jako `nanobot`).
## feedback: než navrhneš řešení, nejdřív se podívej na reálný stav souborů na serveru
Když uživatel navrhuje změnu/přidání do serverové konfigurace (skill, `SOUL.md`/`AGENTS.md`/ostatní workspace soubory, config), **nejdřív si stáhni a přečti aktuální serverovou verzi** a ověř, zda navrhovaná věc už neexistuje nebo není vyřešená jinak — teprve pak navrhuj postup.
**Why:** Uživatel 2026-06-07 — na otázku „má smysl zapsat nanobotovi reasoning anglicky?" jsem rovnou navrhl formulaci a celý deployment, ale pravidlo už v `SOUL.md` dávno bylo (napsal si ho Dream procesor sám 2026-05-27). Celý návrh byl zbytečný. Uživatel to označil za podstatnější poznatek než samotnou odpověď. Server se navíc mění autonomně (Dream), takže předpoklady z paměti/repa můžou být zastaralé.
**How to apply:** U čehokoli, co se týká serverového stavu, je první krok `rsync`/`ssh cat` reálného souboru + kontrola, jestli problém už není vyřešený. Návrh řešení až po ověření. Platí i pro „malé" změny, které vypadají triviálně.
## feedback: u bugu nejdřív najdi a dolož PŘÍČINU, neiteruj workaroundy
Než navrhnu jakýkoli fix chování (zvlášť rendering/UI bug), musím **nejdřív najít a doložit kořenovou příčinu** — přečíst reálný **nasazený** kód, který chování produkuje (ne upstream/podobnou verzi), a získat **přímý důkaz** (např. session log s tím, co model skutečně vrátil). Teprve s prokázanou příčinou navrhovat řešení.
**Why:** 2026-06-14 (`/note` + URL ve WebUI, viz [[plans/note-wrong-urls.md]]) jsem několik kol nasazoval kosmetické obezličky (linkify → backtick → odrážky → tučné číslo), všechny selhaly, a teprve pak našel příčinu: custom fork WebUI má `li` handler, co přebalí každou položku seznamu s odkazem na kartu. Kdybych nejdřív přečetl nasazený renderer a session log (důkaz, že model echovuje verbatim → chyba je v rendereru, ne v modelu/formátu), ušetřil bych celá kola deploy-test a autorovo zklamání. Nabízená „řešení" pak byly workaroundy, ne systémová oprava — autor je všechny zamítl jako „nesystémové".
**How to apply:** U bug reportu: (1) lokalizuj a přečti reálný nasazený kód zodpovědný za chování; (2) seženi přímý důkaz, kde přesně se to láme (logy, session transcript, raw výstup) a vyluč nesprávné hypotézy (model vs renderer apod.); (3) až pak navrhuj fix — a měř ho proti příčině: pokud neopravuje příčinu, řekni to nahlas a označ za workaround. Doplňuje [[memory.md]] „než navrhneš řešení, nejdřív se podívej na reálný stav souborů na serveru".
## feedback: skill nemá opakovat ani vysvětlovat to, co už je v system promptu
Do `SKILL.md` (nanobotího skillu) nepatří konvence a fakta o prostředí, která už žijí
v system promptu — `AGENTS.md` (nástroje, `uv`, temp soubory, exec guard, git) a `SOUL.md`
(osobnost, styl výstupu, jazyk reasoningu). Skill popisuje **svůj vlastní postup**, ne to,
jak se v tomhle prostředí obecně pracuje. Než něco takového do skillu napíšu, ověřit
`grep` v `AGENTS.md`/`SOUL.md`, jestli to tam už není.
**Why:** 2026-09-02 jsem při zkracování skillu `reflect` do STOP gate 1 *přidal* půlvětu
vysvětlující, proč se `uv` volá plnou cestou („`uv` není v `PATH` v neinteraktivním SSH;
uvnitř tahu stačí `uv run`"). Uživatel se zeptal, proč to tam vůbec je — `AGENTS.md`
celou sekci `## python — use uv`. Byla to dvojí chyba: environmentální meta-znalost ve
skillu, a druhá polovina věty navíc doslova opakovala, co `AGENTS.md` agentovi říká.
Zvlášť trapné v commitu, jehož cílem bylo skill **zkrátit**. Viz `history.md` 2026-09-02
14:15.
**How to apply:** Fakt o prostředí → `AGENTS.md`/`SOUL.md`. Vysvětlení „proč je ten příkaz
takhle" pro člověka → `README.md` skillu (nenačítá se do kontextu, takže nestojí tokeny).
Do `SKILL.md` jen to, co agent potřebuje k provedení **tohoto** postupu. A pozor na
asymetrii: přidat do system promptu se vyplatí jen tehdy, když to agent reálně potřebuje —
`PATH` gotcha se do `AGENTS.md` nakonec taky nepřidala, protože agentovi bare `uv run`
funguje a týkala se jen člověka v SSH. Souvisí s [[memory.md]] „než navrhneš řešení,
nejdřív se podívej na reálný stav souborů na serveru".
## feedback: YAML seznamy — víc položek nebo dlouhé stringy jdou do block stylu
Seznam s jedinou krátkou položkou zůstává flow (`include: ["*.md"]`, `paths: ["**"]`,
`exclude: []`). Jakmile má **víc položek** nebo jsou položky **dlouhé stringy** (typicky
cesty a globy), píše se **block stylem, každá položka na vlastním řádku**.
**Why:** 2026-09-09 jsem v plánu `final-wiki-hybrid-rag` napsal `exclude` jako flow seznam
zalomený přes dva řádky (`["**/node_modules/**", "**/vendor/**",` / `"**/.venv/**", …]`).
Uživatel to vrátil: zalomený flow seznam je nejhorší z obou světů — nevejde se na řádek,
nejde u položky mít komentář a diff jedné změněné položky přepíše celý blok.
**How to apply:** Platí pro jakýkoli YAML, který píšu nebo který generuje kód (configy
skillů, frontmatter, CI). Rozhoduj podle obsahu, ne podle délky výsledku: dva dlouhé globy
jdou do block stylu, i kdyby se na jeden řádek vešly. Block styl navíc umožní komentář
u konkrétní položky, což u whitelistů a excludů nese hodnotu. Souvisí s pravidlem
v `CLAUDE.md`, že config je YAML právě kvůli komentářům.