ShapeClassifier::classify($ticket) returns 'A'|'B'|'C' per policy v1: - (severity=critical OR priority=urgent) → A - has tag in ['security','crypto','core'] → A - (severity=major OR priority=high) → B - everything else → C ProfileSelector::pickFor($ticket) walks AgentProfile::active(), matches capability tags case-insensitively against ticket.tags: - Class A: cheapest matching profile (cost_class alphabetic order) - Class B: any active profile with quota_headroom_pct >= 25 - Class C: deterministic round-robin via last_dispatched_at Pest Unit tests cover Good (matching profile picked), Bad (no match → null), Ugly (all profiles disabled → null), plus class A/B headroom gating + class C round-robin determinism. Codex note: php -l clean; pest skipped — no vendor/ at this repo root (downstream lab/lthn.ai owns composer install). Closes tasks.lthn.sh/view.php?id=826 Co-authored-by: Codex <noreply@openai.com> |
||
|---|---|---|
| .. | ||
| Concerns | ||
| Events | ||
| Pipeline | ||
| .gitkeep | ||
| AgentDetectionTest.php | ||
| AgenticManagerTest.php | ||
| AgentToolRegistryTest.php | ||
| BrainServiceTest.php | ||
| ClaudeServiceTest.php | ||
| GeminiServiceTest.php | ||
| OpenAIServiceTest.php | ||
| ProcessContentTaskTest.php | ||
| ProfileSelectorTest.php | ||
| ShapeClassifierTest.php | ||