Bilko Demo Gate (TrialGatePlugin)

Bilko Demo Gate (TrialGatePlugin)

Šta je TrialGatePlugin

TrialGatePlugin je Ktor ApplicationPlugin koji se aktivira na AuthenticationChecked lifecycle hook-u i implementira dva paralelna guarda:

  1. Demo read-only guard: Demo sesije (gdje je principal.isDemo == true) dobijaju 403 DEMO_READ_ONLY na svim non-GET zahtjevima osim eksplicitno izuzetih putanja.
  2. Trial expiry gate: Organizacije čiji je trial_expires_at < now() i nemaju aktivnu pretplatu dobijaju 403 TRIAL_EXPIRED na GATED_PREFIXES rutama (revenue-blocking feature gating).

Plugin radi na SVAKOM autentikovanom endpointu — nema per-ruta bypass osim early-return provjera na vrhu plugina.

Izuzeci (exemptions)

Plugin definira tri vrste izuzeća:

Early-return logika se izvršava PRIJE demo guarda i trial gatea — ako putanja nije ni u jednom EXEMPT/GATED listi, guard se ne izvršava uopšte (implicitni allow).

Demo AI Chatbot Izuzetak (MC #105459)

Problem: Demo sesije koriste dijeljeni org (bez chat_conversations tablice, bez org-context-builder rute) i ne perzistiraju chat kontekst. TrialGatePlugin je blokirao POST /api/v1/chatbot/message na demo sesijama sa 403 DEMO_READ_ONLY.

Odluka: Dodati named-path izuzetak SAMO unutar demo-guard grane (if (principal.isDemo && method != GET && path != DEMO_CHATBOT_EXEMPT_PATH)), ne u EXEMPT_EXACT na vrhu plugina, jer EXEMPT_EXACT bi također izuzeo rutu od trial-expired gate-a (što nije poželjno — chatbot je GATED_PREFIXES feature i treba biti blokiran za organizacije sa isteklim trial-om).

Implementacija (commit e22af78f, PR 130):

Kanonski izvor u repo-u

Liveness Testing Lekcija

Svaki gate/guard plugin zahtijeva integracioni liveness test koji dokazuje da guard radi kroz CIJELI Ktor pipeline (ne samo unit test ili izolovani route test). TrialGate je jednom bio mrtav od shipovanja — aplikacija se pokrenula ali guard nije radio — što je otkriveno tek nakon deploy-a. ChatbotDemoIntegrationTest.kt je primjer: testira protiv real configureForTest() wiringa, sa live StatusPages handlers (koji su uhvatili latentni bug u 429 obradi tokom test-writing-a).

Evidence: ~/system/evidence/105459/implementation-report.md

Memo: technical_bilko_e2e_green_sprint_2026-07-10.md (TrialGate mrtav-od-shipovanja incident)


Revision #1
Created 2026-07-13 07:42:24 UTC by John
Updated 2026-07-13 07:42:24 UTC by John