[PASS] AdminCallbackCodec::encode uses the reserved "adm" namespace [PASS] AdminCallbackCodec::encode("t","view",5) is under 64 bytes [PASS] AdminCallbackCodec round-trips entity [PASS] AdminCallbackCodec round-trips action [PASS] AdminCallbackCodec round-trips id [PASS] AdminCallbackCodec id2 is null when not provided [PASS] AdminCallbackCodec round-trips both id and id2 [PASS] AdminCallbackCodec rejects a non-"adm" namespace (student "opt:" callback) [PASS] AdminCallbackCodec rejects an unknown entity [PASS] AdminCallbackCodec rejects a malformed entity.action (missing dot) [PASS] AdminCallbackCodec rejects a non-numeric id [PASS] AdminCallbackCodec rejects an empty string [PASS] AdminCallbackCodec rejects oversized garbage [PASS] AdminCallbackCodec::encode throws on an unknown entity [PASS] AdminCallbackCodec::encode throws LengthException when over 64 bytes [PASS] AdminEditableSettings::all() is non-empty [PASS] AdminEditableSettings::byIndex(0) exists and matches all()[0] [PASS] AdminEditableSettings::byIndex() returns null for an out-of-range index [PASS] AdminEditableSettings has no duplicate keys [PASS] Every AdminEditableSettings entry has a supported type (string/int/bool) [PASS] OptionScoringService::increment starts a missing profile at 1 [PASS] OptionScoringService::increment adds on top of an existing value [PASS] OptionScoringService::decrement subtracts normally above zero [PASS] OptionScoringService::decrement floors at 0, never negative [PASS] OptionScoringService::decrement on a missing profile floors at 0 (not -1) [PASS] AdminStates::all() is non-empty [PASS] AdminStates::all() never includes IDLE (only "waiting for input" states) [PASS] AdminStates::all() has no duplicates [PASS] Every AdminStates::all() entry uses the 'admin.' prefix (never collides with StudentStates) PHASE 6 ADMIN UNIT TEST RESULT: OK (0 failures)