Files
Varaverk/Kernel/README-Kernel.md
T
Gmer4Lfe e13f2fa14f feat: slskd reconnect guard in downloaders_reset, mass v2 sync
- downloaders_reset: connection check block before slskd API sections;
  triggers PUT /api/v0/server reconnect if disconnected, polls 60s,
  gates Stuck Searches and Dead Transfer Records on SLSKD_CONNECTED
- Sync all modified/new/deleted files from v2 refactor across Docker_Essentials,
  Media, Monitors, Partnership, Rsync, Tools, Transcodes, unRAID_Essentials,
  common.sh, master confs, and new Manual/README docs
2026-05-19 20:00:10 -04:00

3.0 KiB

━━━━━ KERNEL ━━━━━

Shared intelligence layer for media automation. Sourced by consumer scripts — not run directly. Contains stateful scoring systems, adaptive logic, and cross-domain engines that would pollute common.sh if placed there.


━━━ WHAT THIS FOLDER IS ━━━

Not scripts. Not utilities. Engines.

The Kernel holds logic that is:

  • Stateful — maintains scores, decay state, or adaptive thresholds across calls
  • Domain-aware — understands the difference between music, TV, and movie decisions
  • Shared across consumers — one engine, multiple discovery scripts consuming it

This is distinct from:

Location Contains
common.sh Reusable utility functions (logging, locking, arg parsing)
master.conf Shared ecosystem configuration and tuning values
Kernel/ Stateful scoring systems and adaptive decision logic

The rule: if the logic makes decisions, it lives here. If it's a helper or config value, it lives in common.sh or master.conf.


━━━ WHY A SEPARATE KERNEL ━━━

Media automation decisions are not uniform. A Lidarr discovery script should be highly selective. A Sonarr intake script should be family-aware and balanced. A Radarr script should be broadly flexible. If scoring logic lives in each script, it diverges and drifts independently.

Centralizing the decision layer:

  • Keeps consumers thin — they define weights and thresholds, not scoring logic
  • Prevents cross-domain bias pollution — music strictness does not contaminate TV
  • Allows the scoring model to improve without touching every consumer script

━━━ WHAT BELONGS HERE ━━━

An engine belongs in Kernel if it:

  • Implements a scoring or evaluation model
  • Maintains or reads adaptive state
  • Is consumed by more than one script (or is designed to be)
  • Contains logic that would create tight coupling if duplicated

Utilities — locking, notifications, arg parsing, API calls — belong in common.sh.


━━━ FILES IN THIS FOLDER ━━━

File Role Status
decision_engine.sh Behavior-driven scoring kernel — scoring, decay, deduplication, threshold evaluation WIP — currently paired with playback_aware_lidarr_discovery.sh

Planned:

File Role
transcoding_engine.sh Transcoding decision logic (quality, codec selection, cost-benefit evaluation)

━━━ HOW CONSUMERS USE THE KERNEL ━━━

Source the engine at the top of the consumer script:

source "$ROOT_DIR/Kernel/decision_engine.sh"

Then call engine functions directly, passing consumer-defined weights and thresholds:

score=$(score_candidate "$user_score" "$popularity" "$recency" "$quality")
score=$(apply_temporal_decay "$score" "$age_days")
decision=$(make_decision "$score" "$MY_THRESHOLD")

The engine returns values — consumer scripts decide what to do with them. The engine has no side effects: no file writes, no API calls, no deletions.