ruvnet/RuView · error · HTTPException

Zone '{zone_id}' is disabled

Error message

Zone '{zone_id}' is disabled

What it means

validate_zone_access raises 403 "Zone '<zone_id>' is disabled" when the zone exists in domain configuration but has enabled=False. Existence was already confirmed; this is an administrative off-switch per zone.

Source

Thrown at archive/v1/src/api/dependencies.py:190

# Zone access dependencies
async def validate_zone_access(
    zone_id: str,
    current_user: Optional[Dict[str, Any]] = Depends(get_current_user)
) -> str:
    """Validate user access to a specific zone."""
    domain_config = get_domain_config()
    
    # Check if zone exists
    zone = domain_config.get_zone(zone_id)
    if not zone:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail=f"Zone '{zone_id}' not found"
        )
    
    # Check if zone is enabled
    if not zone.enabled:
        raise HTTPException(
            status_code=status.HTTP_403_FORBIDDEN,
            detail=f"Zone '{zone_id}' is disabled"
        )
    
    # If authentication is enabled, check user access
    if current_user:
        # Admin users have access to all zones
        if current_user.get("is_admin", False):
            return zone_id
        
        # Check user's zone permissions
        user_zones = current_user.get("zones", [])
        if user_zones and zone_id not in user_zones:
            raise HTTPException(
                status_code=status.HTTP_403_FORBIDDEN,
                detail=f"Access denied to zone '{zone_id}'"
            )
    

View on GitHub (pinned to 4685618388)

Solutions

  1. Set enabled=True for the zone in the domain configuration and reload
  2. Point clients at an enabled zone in the meantime
  3. Have clients treat 403-disabled distinctly from 404 so operators see the real state
Defensive patterns

Strategy: validation

Validate before calling

# Skip disabled zones up front
zones = client.get('/api/zones', headers=auth).json()
enabled = [z['id'] for z in zones if z.get('enabled', True)]
if zone_id not in enabled:
    pick_another_zone(enabled)

Try / catch

try:
    r = client.get(f'/api/zones/{zone_id}/pose', headers=auth)
    r.raise_for_status()
except httpx.HTTPStatusError as e:
    if e.response.status_code == 403 and 'disabled' in e.response.text:
        mark_zone_disabled(zone_id)  # stop polling it; operator action needed
    raise

Prevention

When it happens

Trigger: A zone deliberately disabled in config (enabled: false) receiving traffic; a zone toggled off during maintenance while clients keep polling it.

Common situations: Per-zone rollout flags; temporarily disabling a room/sensor zone; config edits accidentally flipping enabled.

Related errors


AI-assisted analysis of ruvnet/RuView@4685618388 (2026-08-16). Data as JSON: /api/errors/2fdcadc01834f949. Report an issue: GitHub.