Files
Rozpisky/CLAUDE.md
T
marekandClaude Opus 5 f086e623d6 Oprava: úprava dodávané položky číselníku se tiše ztrácela
Nacti() uložilo dodávanou vrstvu do referenčního snímku _vychozi a tytéž
objekty vložilo do kolekcí, na které se váže mřížka. Úprava buňky tak
mutovala i ten snímek – UlozRozdil pak porovnával stav sám se sebou, rozdíl
vyšel prázdný a oprava dodávané položky zmizela. Mazání a přidávání přitom
fungovalo (tam se reference nesdílí), takže se chyba dobře schovala.

Sluc nově vkládá dodávané položky jako hluboké kopie (serializací, stejně
jako klonování přílohy), takže snímek zůstane netknutý.

Nahlášeno na přejmenování kraje Karlovarský – přesně ten scénář teď hlídají
dva regresní testy; bez opravy oba padají.

Build 0 chyb / 0 varování, 57 testů zelených.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-07 11:26:10 +02:00

78 lines
4.3 KiB
Markdown

# Rozpisky — pokyny pro Claude Code
WPF desktopová aplikace (.NET 10, `net10.0-windows`, AnyCPU) — generátor výkresových rohových
razítek („rozpisek") pro Správu železnic. Náhrada původního excelového nástroje „Rozpisky 1.0.8".
## Příkazy
```powershell
dotnet build "Rozpisky.sln" -nologo -v q -clp:ErrorsOnly
dotnet test "Rozpisky.Tests\Rozpisky.Tests.csproj" -nologo -v q
dotnet run --project "Rozpisky\Rozpisky.csproj"
```
Baseline: build bez chyb a varování, **57 testů zelených**. Před hlášením hotovo obojí spustit
(nebo použít `/overit`).
## Architektura — jediné pravidlo, které se nesmí porušit
Veškerá kresba jde přes jedno rozhraní [`IProfileRenderer`](Rozpisky/Rendering/IProfileRenderer.cs).
Tatáž kresba teče na obrazovku, do PNG, do PDF i do DXF. **Nový výstupní formát = nová implementace
`IProfileRenderer`, nikdy nový kreslicí kód.** Čtečka [`DxfTemplate`](Rozpisky/Dxf/DxfTemplate.cs)
jen čte DXF šablonu a „přehrává" ji do tohoto rozhraní.
Podrobnosti (vrstvy, NuGet API, pravidla zápisu DXF) — [`ROZPISKY.md`](docs/ROZPISKY.md). Nečíst celý,
jen relevantní kapitolu.
## Konvence
- **Kód, komentáře, commity i názvy typů jsou česky** (`BoundsTesty`, `PlaceholderHladiny`,
`NajdiKoren`). Držet se toho, nepřejmenovávat do angličtiny.
- MVVM bez frameworku: znovupoužít [`RelayCommand`](Rozpisky/ViewModels/RelayCommand.cs)
a [`ObservableObject`](Rozpisky/Models/ObservableObject.cs) — nepsat vlastní ani nepřidávat
NuGet (CommunityToolkit apod.).
- XAML: barvy a rozměry **jen** z `Rozpisky/Themes/Colors.Dark.xaml` a `Metrics.xaml`
(WPF-DarkTheme-Kit). Žádné hardcoded `#RRGGBB` ani natvrdo zadané odsazení.
- `Nullable` a `ImplicitUsings` jsou zapnuté v obou projektech.
- COM (CAD, MS Excel) jde přes pozdní vazbu (`dynamic`) — nepřidávat interop assembly.
- Uživatelská data (číselníky, výběr CADu, logy) jdou přes
[`UzivatelskaData`](Rozpisky/Data/UzivatelskaData.cs) do `%APPDATA%\Rozpisky`. Do složky u `.exe`
se **nezapisuje** — může být jen pro čtení a přeinstalace ji přepíše. Číselníky navíc žijí ve dvou
vrstvách ([`CiselnikyStore`](Rozpisky/Data/CiselnikyStore.cs)) a loga ve dvou složkách
([`LogaResolver`](Rozpisky/Dxf/LogaResolver.cs)): dodávané + uživatelské navrch.
**Při konfliktu vyhrává uživatelská vrstva** — jinak by se jeho úprava tiše neprojevila.
Výjimka jsou data, která drží správnost výstupu (`mapovani.json`, `Rozpiska.dxf`) — tam vyhrává
program. Změnu slučování vždy pokrýt testem: chyba tam se projeví tichou ztrátou dat.
## Rozvržení složky — tři druhy podkladů
| Kde | Co to je |
|---|---|
| `docs/` | Podklady **jen pro tvorbu programu** — architektura, datový model, normativní manuál SŽ v `.md`. Nedodává se uživateli. |
| `Rozpisky/Podklady/` | Podklady **nutné k běhu** — kopírují se vedle `.exe` (plochá struktura + `loga\`, řídí `Link` v `.csproj`). Aplikace je **jen čte**. |
| `%APPDATA%\Rozpisky` | Podklady **vznikající za běhu** — vše, co píše uživatel. V repu nejsou a nemají tam co dělat. |
| `vzorky/` | Cizí vstupy pro ruční zkoušení (`schema.dxf`). Nedodává se. |
Nové dodávané datum = do `Rozpisky/Podklady/` **a** řádek v `.csproj` s `Link`, ať výstup
zůstane plochý. Nový zapisovaný soubor = přes `UzivatelskaData.Cesta(...)`, nikdy
`AppContext.BaseDirectory`.
## Kam nesahat
- `Rozpisky/Podklady/Rozpiska.dxf`, `vzorky/schema.dxf` — produkční DXF šablony.
- `Rozpisky/Podklady/loga/*.dxf` — dodávaná loga (9 ks, testy je renderují).
- `Rozpisky/Podklady/SEZNAM.xlsx` — mustr „Seznam příloh".
- `docs/SZ_SM011_P10_Manual_v6.md`, `Rozpisky/Podklady/SZ_SM011_P10_Manual_v6.pdf`
— normativní podklad SŽ, jen ke čtení.
## Delegování
Specializovaní subagenti v `.claude/agents/`: `render-dxf` (Rendering/, Dxf/), `wpf-ui`
(ViewModels/, Views/, Themes/), `verifikator` (read-only build + testy). Pro úkol spadající
celý do jedné z těchto domén je použít; drobnosti napříč vrstvami řešit v hlavním vlákně.
## Další dokumentace
[`ROZHRANI.md`](docs/ROZHRANI.md) — obrazovky, pole a datový model.
[`PODKLAD_CAD_Layout_Tisk.md`](docs/PODKLAD_CAD_Layout_Tisk.md) — CAD, layouty a tisk přes COM.