colibri/docs/wiki/sl/task-board.md
Sam & Claude aa377faf95
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
CI / agent-jail-pkgs (pull_request) Has been cancelled
fix(sl): ozadnji proces→proces v ozadju + wiki: daemon-not-demon
Two fixes in one commit:

1. Terminology: ozadnji proces → proces v ozadju
   - More natural Slovenian — noun inflects, prepositional phrase stays fixed
   - 60 replacements across 19 sl/ files
   - Glossary header updated to match
   - Reverts the bad merge that restored "demon" in glasspane.md and
     task-board.md (including enouporabniški→enonajemniški fix)
   - Forms: proces v ozadju / procesa v ozadju / procesu v ozadju /
     procesom v ozadju / procesov v ozadju

2. New wiki page: daemon-not-demon (EN + SL)
   - Explains the FreeBSD daemon (Beastie mascot, helper spirit) vs
     Slovenian demon (devil, bad spirit)
   - Documents the decision to use proces v ozadju in Slovenian
   - Confirms daemon (with a) is the only English spelling in Colibri
   - Linked from both EN and SL wiki indexes
2026-06-26 15:21:24 +02:00

4.9 KiB

title description
Tabla opravil + razporejevalnik Kako Colibri hrani operaterska opravila in jih razporeja med agente glede na zmožnosti.

kazalo

Kaj je to

Colibrjeva tabla opravil hrani delovne naloge, ki jih odda operater, razporejevalnik pa jih ob vsakem taktu dodeli najprimernejšemu agentu. Opravila pritekajo prek Unix vtičnice procesa v ozadju (create-task, intake-task), prazni pa jih zanka razporejevalnika, ki teče znotraj procesa v ozadju vsakih ~30 sekund.

Odločitve

Točkovanje po zmožnostih (najboljše ujemanje, ne prvo)

Ko razporejevalnik izbira agenta za opravilo, točkuje vsakega razpoložljivega agenta glede na zahtevane zmožnosti opravila s preprostim štetjem preseka: |zahtevane ∩ agentove_zmožnosti| / |zahtevane|. Agent z najvišjim številom točk zmaga; izenačenja razreši ime agenta (deterministično, da ponovni teki ne premetavajo).

Opravilo z ["freebsd", "zfs"] se bo ujemalo z agentom, ki ima obe zmožnosti, pred tistim, ki ima samo freebsd. Opravilo brez zahtevanih zmožnosti ustreza vsakemu agentu. Agenti brez povezave in agenti, katerih zmožnosti se sploh ne sekajo, so preskočeni.

Zakaj ne krožno ali FIFO: ujemanje po zmožnostih pomeni, da pravi agent dobi pravo delo brez operaterskega ročnega dodeljevanja. Točkovanje je preprosto (presek množic) in pregledno — brez strojnega učenja, brez uteži za uglaševanje.

crates/colibri-daemon/src/scheduler.rs (capability_match_score, pick_agent)

Tri vrste urnikov (cron, interval, enkrat)

Vrsta Obnašanje
Cron Sproži ob določenem stenskem času (npr. 0 0 * * * = polnoč).
Interval Sproži po določenem trajanju od zadnjega teka (npr. 3600s).
Enkrat Sproži natanko enkrat, ob določenem prihodnjem času.

Cron vzorci so preprosti 5-poljski izrazi (minuta, ura, dan, mesec, dan v tednu) z nadomestnimi znaki — brez sekundne natančnosti, brez sintakse /step. Ujemanje uporablja primerjavo predpone: cron vzorec se ujema, če se vsako polje trenutnega časa začne z nizom vzorca, torej 0 ustreza 00, 1 ustreza 10-19 itd. To je namenoma preprosto — cron je pripomoček za periodično hišno opravilo, ne splošni opravilni pogon.

Zakaj ne prava cron knjižnica: naloga razporejevalnika je razpošiljanje opravil agentom, ne upravljanje koledarja. Preprosti predponski cron pokrije 90 % primerov uporabe (dnevne gradnje, urna poročila) brez dodatne odvisnosti za razčlenjevanje.

crates/colibri-daemon/src/scheduler.rs (should_fire)

Praznjenje vnosne vrste (vrsta → tabla opravil → agent)

Ukaz intake-task prek vtičnice potisne opravilo v vnosno vrsto. Ob vsakem taktu razporejevalnika (~30s) zanka izprazni vnosno vrsto v shrambo SQLite na tabli opravil, nato preveri zapadla načrtovana opravila. To dvofazno praznjenje loči oddajo od izvajanja: operater odds kadar koli, razporejevalnik obdeluje v paketih.

Opravila v vnosni vrsti nosijo niz zmožnosti (ne ID agenta). Razporejevalnik izbere najboljšega agenta ob času izvajanja, zato bo opravilo, oddano ko noben ujemajoči agent ni na voljo, prevzeto, ko se eden poveže.

Zakaj vnosna vrsta in ne neposredna dodelitev: agenti prihajajo in odhajajo. Če bi oddaja zahtevala izbiro agenta, bi operater moral vedeti, kateri agenti so na voljo — sklopitev, ki se ji tabla opravil namenoma izogne.

crates/colibri-daemon/src/scheduler.rs (Scheduler, add_job, submit), crates/colibri-daemon/tests/intake_scheduler_loop.rs

Podlaga SQLite (vgrajeno, ne storitev)

Tabla opravil hrani opravila, registracije agentov, podatke o najemnikih in katalog veščin v vgrajeni podatkovni zbirki SQLite na /var/db/colibri/colibri.sqlite. Brez ločenega podatkovnega procesa — proces v ozadju odpre datoteko neposredno.

Zakaj SQLite, ne PostgreSQL: proces v ozadju teče na operaterskem USB-ju in na nameščenih gostiteljih. Polna storitev PostgreSQL je pretežka za koordinacijsko stanje enega samega procesa v ozadju. SQLite je brez konfiguracije, brez administracije in preživi ponovne zagone procesa v ozadju brez ločenega življenjskega cikla. Matično vozlišče uporablja PostgreSQL za hive register, ker je večnajemniško; lokalni proces v ozadju je enouporabniški (single user/operator).

crates/colibri-store/src/lib.rs

Glej tudi