# Otevřené otázky po statické analýze ovladače CFL-605RT

## Rozhodnutí

`capture-required` (zúženo)

Obsah omezeného MGL proudu je staticky doložený a hloubkový rozbor uzavřel i dřívější mezery obsahu (FS/ZF → `ZF`, kvantování, jednosměrnost, stropy — viz `protocol-evidence.md` E20/E22/E38/E39). Delegace legacy monitoru neexistuje (E36). Ovladač 5.12.3 má oddělené cesty `CDeviceEtherData` (TCP/8002 → TCP/11110) a `CDeviceIDCut` (TCP/48153, `Register_Cutdata_Binary`); jejich chování se nepřenáší na legacy RAW TCP/11110.

Zbývají už jen dvě mezery **legacy** transportu, které uzavře jedině síťový záznam: přesný počet spojení a časování ukončení (Q01) a bajtová identita prvního proudu legacy cesty (Q02). Každou má uzavřít právě jedna minimální dvojice úloh proti budoucímu záznamovému TCP přijímači.

## Třídy otázek

| Třída | Význam | Otázky | Stav |
| --- | --- | --- | --- |
| A | blokuje bezpečné sestavení geometrie | Q04, Q05 | uzavřeno statickou analýzou |
| B | blokuje nastavení nástroje nebo řezných parametrů | Q06, Q07 | uzavřeno pro omezený POC statickou analýzou a explicitním profilem; spory rozsahů E20 a E22 zůstávají otevřené pro obecný profil |
| C | blokuje zahájení nebo ukončení TCP úlohy | Q01, Q02, Q03 | Q03 uzavřena; Q01 a Q02 zůstávají otevřené |
| D | neblokuje první samostatný POC řez | Q08, Q09, Q10 | zdokumentováno bez další analýzy |

## Uzavřené otázky A až C

| ID | Uzavřený závěr | Důkaz a omezení |
| --- | --- | --- |
| Q03 | Běžná větev `MODEL=11` končí `PUSP0;` a flush. | `MMKPLT.dll` SHA-256 `611da823f97b5f83afa94c28e8b705c61b7cce44d72ab14478a077e0c1029712`, `DrvSendPage` `0x6a909a9c`; platí bez rozšířeného posunu a podávání stránky. |
| Q04 | Pohyb bez řezu je `PU` + `PAx,y`; pohyb s řezem je `PD` + `PAx,y`. | Stejný modul, `0x6a911f38`, řetězce na `0x6a901c44`, `0x6a901c4c` a `0x6a901c50`. |
| Q05 | Bez rotace vede přímá soustava vlevo dole na kladné X doprava a Y nahoru; jednotka je explicitně 0,025 nebo 0,010 mm. | Stejný modul, `0x6a911f38`; S01 a S02. Host musí sám určit pravidlo kvantování. |
| Q06 | `SPn` vybírá panelově přiřazený slot 1 až 6. | Stejný modul, `0x6a9143b4`; S01. Obsluha musí potvrdit aktuální `PEN ASSIGN`. |
| Q07 | Profil řetězí `SP`, volitelně `VS`, `FS`/`ZF` a `ZO`; nula příkaz vynechá. | Stejný modul, `0x6a9143b4` a `0x6a914264`. POC používá celočíselnou rychlost 1 až 30 cm/s a tlak podle nástroje. |

## Blokující Q01 — životní cyklus systémového RAW TCP

**Co je známé:** S02 ručně volí systémový Standard TCP/IP Port Monitor, RAW a port 11110. Vlastní `MPMSERV_1.dll` má `OpenPortEx=NULL`, zapisuje do lokálního handle a síťovou cestu nerealizuje **ani nedeleguje** (žádný Winsock, žádný `LoadLibrary`/`GetProcAddress`, všech 194 nepřímých volání do vlastní IAT — E36). Aktuální ovladač 5.12.3 používá jiné app-vrstvové cesty; neudává počet spojení legacy RAW úlohy.

**Co chybí:** počet TCP spojení na spoolovací úlohu, případné opakované použití socketu, přiřazení posledního payloadu k úloze a okamžik FIN nebo RST.

**Jediná minimální dvojice úloh:**

- **A:** odeslat přes původní Windows cestu do záznamového přijímače jednu úlohu s jediným čtvercem 10 × 10 mm, jedním průchodem a pevným profilem;
- **B:** odeslat dvě bezprostředně po sobě jdoucí spoolovací úlohy se stejným čtvercem a stejným profilem.

Přijímač porovná počet přijatých spojení, první a poslední bajt každé úlohy a časování FIN/RST. Žádný jiný parametr se mezi A a B nemění.

## Blokující Q02 — handshake a první síťový bajt

**Co je známé:** Spoolovací payload začíná `IN;`. Vlastní `MPMSERV_1.dll` před zápisem nečte a data nemění. Tento modul však neobsluhuje systémový Standard TCP/IP Port Monitor. Ovladač 5.12.3 balí data do `Register_Cutdata_Binary`, ne do surového MGL. Z těchto důkazů nelze určit předehru legacy RAW proudu.

**Co chybí:** bajty před `IN;`, případné čtení nebo odpověď před prvním zápisem a hranice společné preambule.

**Jediná minimální dvojice úloh:**

- **A — tichý server:** server přijme spojení, neodešle žádný bajt ani FIN/RST, průběžně čte klientská data a ponechá oba směry spojení otevřené nejméně 35 s od `accept`;
- **B — kontrolní EOF:** server přijme spojení a okamžitě zavolá `shutdown(SHUT_WR)`. Neodešle žádný aplikační bajt, dál čte klientská data a ponechá čtecí směr otevřený nejméně 35 s od `accept`.

Oba běhy musí použít tentýž neměnný RAW payload s jedním čtvercem 10 × 10 mm, jedním průchodem, jednotkou 0,025 mm a stejným profilem včetně `SP`. Příprava testu musí před oběma běhy zaznamenat jeho délku a SHA-256. Jedinou proměnnou je serverové `shutdown(SHUT_WR)` v běhu B.

Hodnota 35 s je observační deadline pro první klientský bajt. Vychází z nejvyššího dokumentovaného `CLOSE TIME` stroje 30 s a pětisekundové rezervy. Nejde o známý ani odvozený timeout Windows. Server po přijetí prvního bajtu zaznamená monotónní čas od `accept`, celý klientský stream, jeho délku a SHA-256 a události FIN/RST. Běh B používá TCP EOF pouze jako kontrolní reakci; neháda žádný proprietární opkód ani odpověď plotru.

Mock server nevidí interní volání `recv` klienta. Absence provozu do deadline proto nedokazuje, že klient nic nečetl. Určuje pouze níže uvedenou rozhodovací hranici.

V tabulce značí `b_X` první klientský bajt, `t_X` monotónní čas od `accept`, `S_X` celý klientský stream, `L_X` jeho délku a `H_X` jeho SHA-256 pro běh X.

| První bajt a čas A | První bajt a čas B | Identita streamu A/B | Závěr |
| --- | --- | --- | --- |
| `b_A=0x49` (`I`), `t_A≤35 s`, prefix `IN;` | `b_B=0x49` (`I`), `t_B≤35 s`, prefix `IN;` | `S_A=S_B`; záznam potvrzuje také `L_A=L_B` a `H_A=H_B` | Q02 je pro omezený POC uzavřená: před payloadem není povinná aplikační odpověď serveru a první klientský stream začíná `IN;`. |
| `b_A=0x49`, `t_A≤35 s`, prefix `IN;` | `b_B=0x49`, `t_B≤35 s`, prefix `IN;` | `S_A≠S_B`, bez ohledu na délku nebo hash | Q02 zůstává blokující. EOF změnil cestu za prvním prefixem. Dalším nejmenším důkazem je skutečný síťový záznam s konkrétní odpovědí zařízení. |
| `b_A` dorazí v `t_A≤35 s` | `b_B` dorazí v `t_B≤35 s` | Nejméně jeden z proudů `S_A`, `S_B` nezačíná `IN;`; zaznamenají se `L_A`, `L_B`, `H_A` a `H_B` | Q02 zůstává blokující. Pozorovaný prefix nelze bez skutečného záznamu připsat handshake ani payloadu. |
| `b_A=∅`; žádné `t_A` do 35 s | `b_B` dorazí po kontrolním EOF v `t_B≤35 s` | `S_A=∅`; `L_B` a `H_B` jsou libovolné | Q02 zůstává blokující. Klient reaguje na EOF, ale skutečná očekávaná odpověď není známá. Dalším nejmenším důkazem je skutečný záznam nebo doložená konkrétní odpověď. |
| `b_A` dorazí v `t_A≤35 s` | `b_B=∅`; žádné `t_B` do 35 s nebo se klient odpojí před daty | `S_B=∅` nebo `S_A≠S_B` | Q02 zůstává blokující. Kontrolní EOF změnil chování klienta; tichý běh sám nestačí k potvrzení stabilní transportní cesty. |
| `b_A=∅`; žádné `t_A` do 35 s, klient může čekat nebo se odpojit | `b_B=∅`; žádné `t_B` do 35 s, klient může čekat nebo se odpojit | `S_A=S_B=∅` | Q02 zůstává blokující. Výsledek nedokazuje absenci interního čtení ani timeout Windows. Dalším nejmenším důkazem je skutečný síťový záznam. |
| Běh A nemá úspěšný `accept` nebo skončí chybou infrastruktury; `b_A` a `t_A` nejsou hodnotitelné | Libovolný výsledek; totéž platí symetricky pro chybu B | Nehodnotitelné | Dvojice je neplatná a Q02 se nemění; nejprve se opraví testovací prostředí bez změny payloadu nebo serverové varianty. |

První bajt přijatý až po 35 s se pro rozhodnutí počítá jako nedoručený v deadline. Server jej přesto zaznamená s časem, ale Q02 zůstane otevřená.

## Neblokující třída D

| ID | Otevřená otázka | Omezení prvního POC |
| --- | --- | --- |
| Q08 | Hostitelská realizace více průchodů a řazení kontur. | Host pošle každou konturu jednou; panelové `SORTING=OFF`. |
| Q09 | Odpovědi zařízení, `OH`, SNMP a chybové rámce systémové RAW cesty. | POC neposílá dotaz a nesmí čekat na stavovou odpověď. Vlastní `ReadPort` vrací nula bajtů, což systémovou cestu nedokládá. |
| Q10 | Hostitelské spuštění detekce registračních značek. | První POC je samostatný řez bez značek. |

Po uzavření Q01 a Q02 lze navrhnout jediný omezený encoder a odesílatel. Tato etapa nevytváří přijímač, encoder ani síťový mock.
