```yaml
id: UJ-005
title: Project-color save exposes unavailable collector operation
actors: [dashboard-operator]
surface: settings
goal: Operator receives explicit failure and project colors remain unchanged.
trigger: Activate `Save colors` at `/settings`.
fixtures: [startFixtureCollector]
success_state:
  visible: `Failed to save project colors` renders.
  durable: Collector project colors remain unchanged.
  persistence: Fresh GET cannot return a color update.
source_specs: [apps/web/src/components/settings/SettingsContent.tsx, apps/web/src/lib/collector-client.ts, apps/web/src/pages/api/collector/[...path].ts, collector/src/server.ts, apps/web/tests/fixture-collector.ts]
readiness: blocked
canonical: false
blockers: [SP-004]
```

## Path

| Hop | Evidence |
|---|---|
| UI trigger | `apps/web/src/components/settings/SettingsContent.tsx:81` |
| Request construction | `apps/web/src/lib/collector-client.ts:43` |
| Endpoint auth and parse | `apps/web/src/pages/api/collector/[...path].ts:83` |
| Authoritative write | N/A — collector has no project-color handler. |
| Response | `collector/src/server.ts:94` |
| Terminal render | `apps/web/src/components/settings/SettingsContent.tsx:45` |

## Happy path

### H1
- Setup: Draft project color for `multideal` is `#ff00aa`.
- Action: Activate `Save colors` at `/settings`.
- Request: `POST /api/collector/config/projects`.
- Response: `404` with "not found".
- Visible: `Failed to save project colors` renders.
- Durable: UNKNOWN — SP-004: collector has no config write route; project color cannot change.
- Fresh read: `GET /api/collector/config/projects` returns `404` with "not found".
- Forbidden: No collector project-color state is written.
- Evidence:
  - Setup: `apps/web/src/components/settings/SettingsContent.tsx:66`, `apps/web/tests/fixture-collector.ts:130`
  - Action: `apps/web/src/components/settings/SettingsContent.tsx:81`
  - Request: `apps/web/src/lib/collector-client.ts:43`
  - Response: `collector/src/server.ts:94`
  - Visible: `apps/web/src/components/settings/SettingsContent.tsx:45`
  - Durable: UNKNOWN — SP-004: `collector/src/server.ts:43` only provides state read.
  - Fresh read: `collector/src/server.ts:94`
  - Forbidden: `collector/src/server.ts:94`

## Alternate and failure paths

### A1
- Setup: Dashboard proxy cannot reach collector.
- Action: Activate `Save colors` at `/settings`.
- Request: `POST /api/collector/config/projects`.
- Response: `502` with "collector unreachable".
- Visible: `Failed to save project colors` renders.
- Durable: Draft color remains browser-only.
- Fresh read: `GET /api/collector/config/projects` returns `502` with "collector unreachable".
- Forbidden: No collector project-color state is written.
- Evidence:
  - Setup: `apps/web/src/pages/api/collector/[...path].ts:43`
  - Action: `apps/web/src/components/settings/SettingsContent.tsx:81`
  - Request: `apps/web/src/lib/collector-client.ts:43`
  - Response: `apps/web/src/pages/api/collector/[...path].ts:52`
  - Visible: `apps/web/src/components/settings/SettingsContent.tsx:45`
  - Durable: `apps/web/src/components/settings/SettingsContent.tsx:27`
  - Fresh read: `apps/web/src/pages/api/collector/[...path].ts:52`
  - Forbidden: `apps/web/src/pages/api/collector/[...path].ts:43`

## Permissions and boundaries

N/A — dashboard has no user identity or RBAC boundary; proxy injects one collector token for all browser requests. `apps/web/src/pages/api/collector/[...path].ts:26`

## Source specs

- `apps/web/src/components/settings/SettingsContent.tsx`
- `apps/web/src/lib/collector-client.ts`
- `apps/web/src/pages/api/collector/[...path].ts`
- `collector/src/server.ts`
- `apps/web/tests/fixture-collector.ts`
