feat(pool): add start_index so manual and auto pools can coexist

Production had two disjoint tmux pools named alike but for different
purposes:
  ccl-0..ccl-9           — manual/interactive sessions (operator)
  ccl-auto-11..ccl-auto-20 — autonomous dispatcher pool

Until now the daemon's loops iterated prefix + 0..Max, so with the
deployed config ("prefix: ccl-auto", min=2, max=10) the dispatcher
looked for sessions "ccl-auto0..ccl-auto9" that never existed, while
the real auto pool ccl-auto-11..20 was invisible. Net effect: no task
was ever dispatched, and killAllPoolSessions fabricated phantom
"ccl-auto0/1" sessions on each swap.

- AutonomousConfig gains StartIndex (yaml start_index, default 0).
  Behaviour is unchanged when StartIndex is 0.
- Monitor, switcher (kill + recreate), dispatcher (findFreeSession),
  and lifecycle (EnsureAll + reconcile) all iterate
  [StartIndex, StartIndex+Max) so the daemon only touches its own
  range and leaves ccl-0..ccl-9 alone.
- Production config updated to prefix: "ccl-auto-", start_index: 11,
  min: 10, max: 10 — covering the 10 real ccl-auto-11..20 sessions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ubuntu 2026-04-15 20:39:57 +00:00
parent 8fdb1937fc
commit eb6b74c547
6 changed files with 73 additions and 14 deletions

View file

@ -52,10 +52,17 @@ type DedicatedSession struct {
}
// AutonomousConfig controls the autoscaling inbox-dispatcher session pool.
//
// The pool covers sessions named "<Prefix><StartIndex..StartIndex+Max-1>".
// StartIndex lets the pool coexist with an unrelated numeric range of
// sessions (e.g. `ccl-0..ccl-9` reserved for manual use by the operator).
// When StartIndex is 0 (default), behaviour is identical to earlier
// versions.
type AutonomousConfig struct {
Prefix string `yaml:"prefix"`
Min int `yaml:"min"`
Max int `yaml:"max"`
Prefix string `yaml:"prefix"`
StartIndex int `yaml:"start_index"`
Min int `yaml:"min"`
Max int `yaml:"max"`
}
// QuotaConfig defines quota monitoring parameters.