From fc0c2ff6c7c073ac488a8d50219733716b62d4e2 Mon Sep 17 00:00:00 2001 From: JiriUhlir <149317995+JiriUhlir@users.noreply.github.com> Date: Mon, 17 Aug 2026 17:14:20 +0200 Subject: [PATCH] Opakovani do logu nepise a ticket se rodi s poslanym stavem Overeno proti serveru: tri shodne POSTy udelaly jednu udalost s pocitadlem 3, ale krok se do logu porad zapsal trikrat. Zadani bylo, ze opakovani ma byt informace, ne dalsi radek. - Krok muze rict quiet a jeho radek se do logu ticketu nezapise. - Ticket vznika uz s poslanym stavem. Predtim se zalozil s vychozim "Novy" a hned se prepsal, takze v logu stalo "stav Novy -> completed" u ticketu, ktery v tom stavu nikdy nebyl. Odtud i to "Novy" ve widgetu. - Zaznam zmen: celkovy pocet behu se pocita od zavedeni historie po dnech, puvodni citac se den ode dne nedelil a rozpocitat ho zpetne neni z ceho. Co-Authored-By: Claude Opus 5 (1M context) --- documentation/99-zmeny.md | 11 +++++++++-- src/runtime/builtinSteps.ts | 26 ++++++++++++++++++++++++-- src/runtime/executor.ts | 7 ++++++- 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/documentation/99-zmeny.md b/documentation/99-zmeny.md index 46f0d1f..0ca8957 100644 --- a/documentation/99-zmeny.md +++ b/documentation/99-zmeny.md @@ -37,6 +37,12 @@ kazdy s jednim pokusem. Fronta ani worker nic nenasobi - odesilatel poslal - **Popisek udalosti uz neni porad "Udalost".** Bere se popisek, predmet, stav, externi ID - v tomhle poradi. Casova osa, kde je na kazdem radku totez, nerika nic. +- **Opakovani nezapisuje radek do logu vubec.** Krok muze rict `quiet`, cimz se + jeho radek do logu ticketu nepise - pocet opakovani je videt u prichozi + udalosti, coz je jedno cislo misto osmdesati radku. +- **Ticket se rodi s poslanym stavem.** Predtim vznikl s vychozim `Nový` a hned + se prepsal, takze v logu stalo `stav Nový -> completed` u ticketu, ktery v tom + stavu nikdy nebyl. Odtud i to `Nový`, co bylo videt ve widgetu. - Typograficke uvozovky z popisku v logu pryc, plus ctyri AI znaky, ktere zbyvaly v kodu (`web/src/data/products.ts`, `References.tsx`, `automationStore.ts`). @@ -48,8 +54,9 @@ ukazovalo 373 za automatizaci, ktera bezi tri mesice. - Automatizace si drzi **behy po dnech** (`days`, poslednich 14 dni). Po pulnoci je "dnes" nula, dokud opravdu neco nebezi. -- Vedle toho `runsYesterday` a `runsTotal`. Puvodni cislo se neztratilo, jen se - spravne jmenuje. +- Vedle toho `runsYesterday` a `runsTotal`. Celkovy pocet se pocita od zavedeni + historie po dnech, protoze puvodni citac se den ode dne nedelil a rozpocitat + ho zpetne neni z ceho. - Uspesnost se pocita z dnesnich behu. Kdyz dnes zadny nebyl, bere se posledni den, kdy byly - nula procent u automatizace, ktera dnes nemela co delat, by vypadala jako porucha. diff --git a/src/runtime/builtinSteps.ts b/src/runtime/builtinSteps.ts index b955a7c..a1ad3d7 100644 --- a/src/runtime/builtinSteps.ts +++ b/src/runtime/builtinSteps.ts @@ -44,6 +44,14 @@ export interface StepOutcome { summary: string; detail?: string | null; outputs: Record; + /** + * true = do logu ticketu se radek nezapise. + * + * Pro prijem stejne zpravy podesate: nic se nestalo, takze v logu nema co + * byt. Pocet opakovani je videt u prichozi udalosti, coz je jedno cislo + * misto osmdesati radku. + */ + quiet?: boolean; /** Vyplnene, kdyz krok zalozil nebo nasel ticket. Dalsi kroky ho pak maji. */ ticketId?: string; } @@ -154,6 +162,12 @@ const handlers: Record = { fields, create: { subject: subject || inputs.externalId || 'Bez předmětu', + /* + * Stav uz pri zalozeni. Bez toho ticket vznikl s vychozim "Nový" + * a hned se prepsal, takze v logu stalo "stav Nový -> completed" + * u ticketu, ktery v nem nikdy nebyl. + */ + ...(inputs.status?.trim() ? { status: inputs.status.trim() } : {}), body: inputs.body ?? '', typeId: inputs.typeId?.trim() || null, priority: priorities.includes(inputs.priority as TicketPriority) @@ -189,14 +203,20 @@ const handlers: Record = { const closed = boolInput(inputs.closed); let note = ''; - if (wanted || closed !== undefined) { + /* + * Pri zalozeni uz stav sedi, nastavoval by se podruhe. Menit ho ma smysl + * jen u ticketu, ktery uz existoval - nebo kdyz se meni priznak vyrizeni. + */ + const needsStatus = !result.created && wanted !== undefined && wanted !== result.ticket.status; + + if (needsStatus || closed !== undefined) { updateTicketStatus( result.ticket.id, wanted || result.ticket.status, [context.tenantId], closed, ); - note = wanted ? `, stav ${wanted}` : ''; + note = needsStatus ? `, stav ${wanted}` : ''; if (closed !== undefined) note += closed ? ', vyřízený' : ', nevyřízený'; } @@ -209,6 +229,8 @@ const handlers: Record = { ok: true, summary: `bez změny, ${result.ticket.id} už tuhle zprávu dostal (${result.event.repeats}x)`, detail: null, + // Do logu ne. Pocet je videt u prichozi udalosti. + quiet: true, ticketId: result.ticket.id, outputs: { ticketId: result.ticket.id, diff --git a/src/runtime/executor.ts b/src/runtime/executor.ts index 143c371..3646a9c 100644 --- a/src/runtime/executor.ts +++ b/src/runtime/executor.ts @@ -61,6 +61,8 @@ export interface StepResult { kind: 'action' | 'condition'; label: string; ok: boolean; + /** true = do logu ticketu se nezapisuje. Nic se nestalo, viz StepOutcome. */ + quiet?: boolean; /** * false = opakovat nema smysl. * @@ -152,7 +154,8 @@ export async function runFlow( // Log ticketu dostane cely prubeh naraz, ne po jednom zapisu. if (options.ticketId && results.length > 0) { - appendTrace(options.ticketId, results.map(toTrace)); + const worthLogging = results.filter((step) => step.quiet !== true); + if (worthLogging.length > 0) appendTrace(options.ticketId, worthLogging.map(toTrace)); } const failed = results.find((step) => !step.ok); @@ -215,6 +218,8 @@ async function runAction( ok: outcome.ok, summary: outcome.summary, detail: outcome.detail ?? null, + // Krok muze rict, ze se nic nestalo a do logu ticketu nepatri. + quiet: outcome.quiet === true, // Vnitrni krok selhava na spatnem nastaveni, ne na vypadku. Opakovani // by jen pettkrat zopakovalo tutéz chybu. retryable: false,