# Bilko /login silent auth failure — dijagnoza i fix (MC #106849)

# Bilko /login silent auth failure — dijagnoza i fix (MC #106849)

**Datum:** 2026-08-05 · **PR:** #318 (`fix/106849-login-dead-click`, commit `3df83cd1`) · **Status:** no active outage; hardening + observability fix

## Simptom
Klik na "Prijavite se Microsoft računom" na `app.bilko.cloud/login` naizgled "ne radi ništa" — korisnik ostane na /login bez ikakve poruke, bez konzolnih grešaka, bez vidljivih network poziva.

## Root cause (potvrđeno live forenzikom)
1. Frontend je bio ISPRAVAN: React onClick → MSAL `loginRedirect()` → top-level navigacija na `ciamlogin.com/.../authorize` se uredno izvršavala.
2. Microsoft CIAM authorize je za sesiju s postojećim kolačićima vraćao **HTTP 503** (čist curl bez kolačića: 200) — vrlo vjerovatno throttling zbog desetina automatizovanih pokušaja u kratkom periodu.
3. Aplikacija je taj neuspjeh **tiho gutala**: povratak na /login bez poruke (503 prije ikakvog MSAL callbacka ⇒ MSAL nema event koji bi opalio).
4. Dijagnostička zamka: top-level navigacije se ne vide kao XHR u network alatima i ne ostavljaju konzolne greške; uz to, sintetički klikovi browser-ekstenzije nisu ni stizali do stranice (automation artefakt) — vidi memory `technical_extension_clicks_can_be_silent_noops_2026-08-05`.

## Fix (D3 — error surfacing)
- `AUTH_ATTEMPT_PENDING_KEY` sessionStorage marker postavljen neposredno prije `loginRedirect()`.
- Na sljedećem MSAL init-u: marker prisutan + 0 accounta ⇒ `authError` (pokriva fail-prije-callbacka); dodatno obrađen `EventType.LOGIN_FAILURE`.
- `/login` renderuje vidljiv alert (`data-testid="entra-auth-error"`) + retry dugme, svih 5 lokala (en/hr/bs/sr-Latn/sr-Cyrl).
- 7 novih testova u `apps/web/test/login-silent-auth-fail-106849.test.tsx` (oba puta + negativne kontrole); dokazano padaju na pre-fix kodu.

## Regression gate (D4)
`azure-pipelines.yml` → `Promote_Demo` sada, odmah poslije curl-only ZAKON PI2 provjere, izvršava **real-browser MSAL login smoke** (postojeći `login-dashboard.spec.ts`) protiv **demo artefakta** (`DEMO_WEB_URL=https://app.bilko.cloud`). Zatvoren strukturni gap: stage i demo su odvojeni buildovi, a login test je do sada postojao samo za stage.

## Verifikacija
- Nezavisni verifier: 35/35 testova samostalno izvršeno, scope čist, verdikt PASS — transcript: `/Users/makinja/system/evidence/106849/verifier-transcript-2026-08-05.md`
- CEO ljudski klik (telefon, čist browser): Microsoft login stranica se uredno otvara.
- Puna forenzika: `/Users/makinja/system/evidence/bilko-login-dead-2026-08-05/repro-evidence.md` + MC #106849 komentari.

## Lekcije
- "Mrtav klik" iz automatizacije ≠ mrtav klik: trijaža = instrumentacija stranice → programatski `.click()` → ljudski klik.
- curl health check je slijep za auth petlje; login smoke mora gađati artefakt koji korisnici stvarno dobijaju.
- Tihi auth fail je UX bug prvog reda: svaki neuspjeh prijave mora biti vidljiv korisniku.

Povezani taskovi: MC #106849 (fix), #106834 (automation artefakt), #106850 (anvil incident), #106856 (subagent identity), #106858 (msal-provider minor).