/anomaly-report
Skill převádí ⚠️ nález z hunters nebo ručního pozorování na strukturovaný blok v <connector>/docs/anomalies.md. Formálně psaný (3. osoba, pasivní rod), s evidencí path:line, severity, statusem. Po zápisu navrhuje navázat /jira-from-context --from anomaly.
Kdy použít
- Po
bug-hunter / dead-code-hunter / perf-hunter / security-auditor findings, které vyžadují formalizaci.
- Při ručním objevu (uživatel řekne „⚠️", „anomálie", „bug v X", „divně se chová Y").
- Před založením Jira ticketu — anomaly entry je primární evidence, Jira jen zrcadlí.
Aktivace: /anomaly-report <connector> [...args] nebo automaticky při ⚠️/anomaly frázích.
Vstupy
<connector> (povinné) — název adresáře v ${PROJECT_ROOT}/Connectors/.
--from <source> (volitelné) — bug-hunter | dead-code-hunter | perf-hunter | security-auditor | manual. Default manual.
--source <path> (volitelné) — cesta k hunter reportu nebo investigation souboru, ze kterého se má finding extrahovat.
--severity <level> (volitelné) — kriticka | vysoka | stredni | nizka. Pokud nezadán, odvodit z hunter severity (high→vysoka, med→stredni, low→nizka) nebo se zeptat.
Workflow
- Resolve cest —
<connector>/docs/anomalies.md. Pokud chybí, načíst šablonu z ${PROJECT_ROOT}/Connectors.Analyst/templates/connector-docs/anomalies.md.tmpl a navrhnout vytvoření prázdné kostry (s explicit souhlasem).
- Přidělit ID — scan existujícího
anomalies.md na \[CONN-(\d+)\], najít max NNN, přidělit max+1 (3-místné, padováno nulami: CONN-001, CONN-042). Per-connector lokální namespace — kolize napříč connectory nevadí (každý má vlastní anomalies.md).
- Extrakce findingu — pokud
--source zadán, načíst soubor a vytáhnout: stručný titul, evidence path:line, snippet, severity, předpokládaný root cause. Jinak vyžádat od uživatele (vstupy: titul, evidence, popis).
- Sestavit blok podle struktury níže.
- Předložit ke schválení (viz
feedback_approval_first) — ukázat:
- cílový soubor a
[CONN-NNN] ID,
- rozsah (append entry / vytvořit nový soubor z šablony),
- preview prvních ~15 řádků bloku,
- otázku „zapsat?".
- Po souhlasu — append do
anomalies.md (Edit na soubor; pokud nově vytvářen, Write s šablonou + první entry). Update přehledové tabulky na začátku souboru.
- Navrhnout navázat —
/jira-from-context --from anomaly --source <connector>/docs/anomalies.md#CONN-NNN. Bez auto-spuštění.
Struktura entry
### `[CONN-NNN]` — <stručný titul, 1 řádek>
**Závažnost:** <🔴 KRITICKÁ | 🟠 VYSOKÁ | 🟡 STŘEDNÍ | 🟢 NÍZKÁ>
**Status:** open
**Aktualizováno:** <YYYY-MM-DD>
**Vlastník:** nepřiřazeno
**Zdroj nálezu:** <bug-hunter | manual | …>
**Popis:**
<2-5 vět, 3. osoba pasivní rod, žádné „my"/„Novák"/„tým".>
**Místo v kódu / DB:**
- `path/to/File.cs:42`
- `[Schema].[dbo].[StoredProc]` (pokud relevantní)
**Snippet:**
` ` `csharp
<10-20 řádků nejvíce ilustrativního kódu>
` ` `
**Reprodukce:**
<krok-po-kroku nebo SQL dotaz pro ověření, ne-li jasné z evidence>
**Dopad:**
<funkční / datový / bezpečnostní; recoverable yes/no>
**Předpokládaný root cause:**
<hypotéza, jasně označená jako hypotéza, ne fakt>
**Navržené řešení:**
1. <krátkodobě>
2. <dlouhodobě / prevence>
**Související tickety:**
<prázdné při založení; /jira-from-context sem zapíše Jira URL>
Pravidla obsahu
- Formální 3. osoba, pasivní rod —
feedback_no_personification. Žádné „myslíme", „Novák zjistil", „při analýze jsme našli". Místo toho „Při statické analýze byl identifikován…".
- Path:line evidence povinná — bez ní entry neuvádět.
- Hypotézy explicitně označit jako hypotézy, ne fakta („pravděpodobně copy-paste chyba", ne „je to copy-paste chyba").
- Severity mapování z hunter reportů:
- security-auditor High / bug-hunter P3 (
throw ex) / kritická data loss → 🔴 KRITICKÁ
- bug-hunter High (P1, P6) / perf High N+1 v hot pathu → 🟠 VYSOKÁ
- bug-hunter Med / perf Med / security Med → 🟡 STŘEDNÍ
- bug-hunter Low / dead-code Low / cosmetic → 🟢 NÍZKÁ
Gates
- 1 schválení uživatelem před zápisem. Žádný auto-apply.
- Žádný Jira write v tomto skillu — pouze
<connector>/docs/anomalies.md. Jira navazuje /jira-from-context (viz feedback_no_jira_writes).
- Při vytváření nového
anomalies.md z šablony → samostatný gate (souhlas s kostrou + souhlas s první entry).
Výstupní artefakty
- Nový blok v
<connector>/docs/anomalies.md (případně nově vytvořený soubor z šablony).
- Updatovaná přehledová tabulka na začátku souboru.
- Update statistik (pokud existují).
- Návrh příkazu
/jira-from-context --from anomaly ... v terminálu (ne write).
Návaznosti
- Před: typicky
bug-hunter / perf-hunter / security-auditor / dead-code-hunter reporty (Phase 2).
- Po:
/jira-from-context --from anomaly (Phase 3) — založení Jira ticketu se zpětným odkazem.
- Volitelně: skill může na vyžádání spustit příslušného huntera před formalizací (pokud uživatel řekne „⚠️ něco divného v X.cs" bez konkrétního finding).
1---2name: anomaly-report3description: Formátování nálezu (z bug-hunter / dead-code-hunter / perf-hunter / security-auditor / ručního pozorování) do bloku v <connector>/docs/anomalies.md + draft Jira issue body. Přiděluje [CONN-NNN] ID lokálně per connector podle pořadí v existujícím anomalies.md.4---5
6# /anomaly-report
7
8Skill převádí ⚠️ nález z hunters nebo ručního pozorování na strukturovaný blok v `<connector>/docs/anomalies.md`. Formálně psaný (3. osoba, pasivní rod), s evidencí `path:line`, severity, statusem. Po zápisu navrhuje navázat `/jira-from-context --from anomaly`.
9
10## Kdy použít
11
12- Po `bug-hunter` / `dead-code-hunter` / `perf-hunter` / `security-auditor` findings, které vyžadují formalizaci.
13- Při ručním objevu (uživatel řekne „⚠️", „anomálie", „bug v X", „divně se chová Y").
14- Před založením Jira ticketu — anomaly entry je primární evidence, Jira jen zrcadlí.
15
16Aktivace: `/anomaly-report <connector> [...args]` nebo automaticky při ⚠️/anomaly frázích.
17
18## Vstupy
19
20- **`<connector>`** (povinné) — název adresáře v `${PROJECT_ROOT}/Connectors/`.
21- **`--from <source>`** (volitelné) — `bug-hunter | dead-code-hunter | perf-hunter | security-auditor | manual`. Default `manual`.
22- **`--source <path>`** (volitelné) — cesta k hunter reportu nebo investigation souboru, ze kterého se má finding extrahovat.
23- **`--severity <level>`** (volitelné) — `kriticka | vysoka | stredni | nizka`. Pokud nezadán, odvodit z hunter severity (high→vysoka, med→stredni, low→nizka) nebo se zeptat.
24
25## Workflow
26
271. **Resolve cest** — `<connector>/docs/anomalies.md`. Pokud chybí, načíst šablonu z `${PROJECT_ROOT}/Connectors.Analyst/templates/connector-docs/anomalies.md.tmpl` a navrhnout vytvoření prázdné kostry (s explicit souhlasem).
282. **Přidělit ID** — scan existujícího `anomalies.md` na `\[CONN-(\d+)\]`, najít max NNN, přidělit `max+1` (3-místné, padováno nulami: `CONN-001`, `CONN-042`). Per-connector lokální namespace — kolize napříč connectory nevadí (každý má vlastní `anomalies.md`).
293. **Extrakce findingu** — pokud `--source` zadán, načíst soubor a vytáhnout: stručný titul, evidence `path:line`, snippet, severity, předpokládaný root cause. Jinak vyžádat od uživatele (vstupy: titul, evidence, popis).
304. **Sestavit blok** podle struktury níže.
315. **Předložit ke schválení** (viz [`feedback_approval_first`](../../memory/feedback_approval_first.md)) — ukázat:
32 - cílový soubor a `[CONN-NNN]` ID,
33 - rozsah (append entry / vytvořit nový soubor z šablony),
34 - preview prvních ~15 řádků bloku,
35 - otázku „zapsat?".
366. **Po souhlasu** — append do `anomalies.md` (`Edit` na soubor; pokud nově vytvářen, `Write` s šablonou + první entry). Update přehledové tabulky na začátku souboru.
377. **Navrhnout navázat** — `/jira-from-context --from anomaly --source <connector>/docs/anomalies.md#CONN-NNN`. Bez auto-spuštění.
38
39## Struktura entry
40
41```markdown
42### `[CONN-NNN]` — <stručný titul, 1 řádek>
43
44**Závažnost:** <🔴 KRITICKÁ | 🟠 VYSOKÁ | 🟡 STŘEDNÍ | 🟢 NÍZKÁ>
45**Status:** open
46**Aktualizováno:** <YYYY-MM-DD>
47**Vlastník:** nepřiřazeno
48**Zdroj nálezu:** <bug-hunter | manual | …>
49
50**Popis:**
51<2-5 vět, 3. osoba pasivní rod, žádné „my"/„Novák"/„tým".>
52
53**Místo v kódu / DB:**
54- `path/to/File.cs:42`
55- `[Schema].[dbo].[StoredProc]` (pokud relevantní)
56
57**Snippet:**
58` ` `csharp
59<10-20 řádků nejvíce ilustrativního kódu>
60` ` `
61
62**Reprodukce:**
63<krok-po-kroku nebo SQL dotaz pro ověření, ne-li jasné z evidence>
64
65**Dopad:**
66<funkční / datový / bezpečnostní; recoverable yes/no>
67
68**Předpokládaný root cause:**
69<hypotéza, jasně označená jako hypotéza, ne fakt>
70
71**Navržené řešení:**
721. <krátkodobě>
732. <dlouhodobě / prevence>
74
75**Související tickety:**
76<prázdné při založení; /jira-from-context sem zapíše Jira URL>
77```
78
79## Pravidla obsahu
80
81- **Formální 3. osoba, pasivní rod** — [`feedback_no_personification`](../../memory/feedback_no_personification.md). Žádné „myslíme", „Novák zjistil", „při analýze jsme našli". Místo toho „Při statické analýze byl identifikován…".
82- **Path:line evidence povinná** — bez ní entry neuvádět.
83- **Hypotézy explicitně označit** jako hypotézy, ne fakta („pravděpodobně copy-paste chyba", ne „je to copy-paste chyba").
84- **Severity mapování** z hunter reportů:
85 - security-auditor High / bug-hunter P3 (`throw ex`) / kritická data loss → 🔴 KRITICKÁ
86 - bug-hunter High (P1, P6) / perf High N+1 v hot pathu → 🟠 VYSOKÁ
87 - bug-hunter Med / perf Med / security Med → 🟡 STŘEDNÍ
88 - bug-hunter Low / dead-code Low / cosmetic → 🟢 NÍZKÁ
89
90## Gates
91
92- **1 schválení uživatelem před zápisem.** Žádný auto-apply.
93- **Žádný Jira write** v tomto skillu — pouze `<connector>/docs/anomalies.md`. Jira navazuje `/jira-from-context` (viz [`feedback_no_jira_writes`](../../memory/feedback_no_jira_writes.md)).
94- Při vytváření nového `anomalies.md` z šablony → samostatný gate (souhlas s kostrou + souhlas s první entry).
95
96## Výstupní artefakty
97
98- Nový blok v `<connector>/docs/anomalies.md` (případně nově vytvořený soubor z šablony).
99- Updatovaná přehledová tabulka na začátku souboru.
100- Update statistik (pokud existují).
101- Návrh příkazu `/jira-from-context --from anomaly ...` v terminálu (ne write).
102
103## Návaznosti
104
105- **Před:** typicky `bug-hunter` / `perf-hunter` / `security-auditor` / `dead-code-hunter` reporty (Phase 2).
106- **Po:** `/jira-from-context --from anomaly` (Phase 3) — založení Jira ticketu se zpětným odkazem.
107- **Volitelně:** skill může na vyžádání spustit příslušného huntera před formalizací (pokud uživatel řekne „⚠️ něco divného v X.cs" bez konkrétního finding).