You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(ft-recursive-002): the supervised retrain controller + operator-confirm promote (Epic 5)
ftloop.Controller: a supervised loop (default-off behind FT_LOOP_ENABLED) that
picks up a triggered cycle from the ledger and walks it curate->train->gate as
ctx-cancellable Python subprocesses, holding the compute lease + quiescing RSIC,
updating the ledger + the 6a ft-loop:<stage> jobhealth surface at each step.
FAIL -> archived + one ft-loop alert; lease-expiry/disk-floor -> class-4 high
alert-and-halt; PASS -> promote_pending (halts; promotion is operator-gated).
Started via StartSupervisedBackground (after the supervisor is set). The gate
now OPENS a cycle on a trigger decision (the executor logs, no alert — the
ledger is the controller's out-of-band signal, SPEC fork 7). mdemg ft-loop
promote --cycle-id [--reject] records the operator decision to the ledger.
AMD-1 epoch cap passed to train_ft. New config: FT_LOOP_POLL_INTERVAL_SEC,
FT_LOOP_LEASE_MAX_HOURS/PATH, FT_LOOP_MIN_FREE_DISK_GB, FT_LOOP_PYTHON_BIN,
FT_LOOP_MODEL_VERSION, FT_LORA_EPOCHS_CAP, FT_EARLY_STOP_VAL_LOSS_FACTOR.
Controller state-machine tests (stub runStage): all-stages, stage-failure halt,
disk-floor. Config guard 744/744. Subprocess arg sets validated live in Epic 6.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: internal/config/config.go
+56Lines changed: 56 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -1228,6 +1228,16 @@ type Config struct {
1228
1228
FtLoopMinRetrainIntervalHoursint// FT_LOOP_MIN_RETRAIN_INTERVAL_HOURS — suppress a new trigger if a cycle started within this window (single-flight at retrain scale, not the RSIC seconds cooldown) (default: 168 = 7 days)
1229
1229
FtLoopMinFreshFractionfloat64// FT_LOOP_MIN_FRESH_FRACTION — minimum fraction of interactions newer than the last cycle before retraining (retrain on new signal, never the same corpus) (default: 0.30)
1230
1230
1231
+
// FT recursive-retrain controller (FT-RECURSIVE-002 Phase 6b, Epic 5)
1232
+
FtLoopPollIntervalSecint// FT_LOOP_POLL_INTERVAL_SEC — controller poll cadence for a triggered cycle (default: 60)
1233
+
FtLoopLeaseMaxHoursint// FT_LOOP_LEASE_MAX_HOURS — compute-lease expiry (≈1.5× the ~9h actual) so a crashed trainer can't wedge RSIC (default: 14)
MaintLiveAlertEnabledbool// MAINT_LIVE_ALERT_ENABLED — enable the maintenance_no_live_run rule (default: true)
1233
1243
MaintLiveLookbackDaysint// MAINT_LIVE_LOOKBACK_DAYS — window in which at least one live (dry_run=false) maintenance run must appear when any maintenance runs exist (default: 8)
0 commit comments