Skip to content

refactor(js): podziel selects.js i cursor.js, domknij hook o .js (faza 7)#72

Merged
mpasternak merged 1 commit into
mainfrom
cleanup/faza-7-js
Jul 24, 2026
Merged

refactor(js): podziel selects.js i cursor.js, domknij hook o .js (faza 7)#72
mpasternak merged 1 commit into
mainfrom
cleanup/faza-7-js

Conversation

@mpasternak

Copy link
Copy Markdown
Member

Ostatnia faza. Dwa wstrzykiwane skrypty init pod limit 600 linii — przy zachowaniu bajtowej identyczności sklejanego skryptu, bo kolejność i sposób wstrzykiwania są load-bearing (cursor/slide/desktop przed chrome.js).

plik przed po
selects.js 1427 selects.js 470 + selects_options.js 479 + selects_observer.js 478
cursor.js 792 cursor.js 462 + cursor_effects.js 330

Oba to pojedyncze IIFE dzielące jedno domknięcie, więc nie stają się osobno ładowanymi modułami — to ciągłe fragmenty źródła sklejane z powrotem w tej samej kolejności. Sklejanie w Pythonie (Selects.__init__, Overlay.__init__), wzorem istniejącego shape_prelude() + visibility.js.

Dowód bajtowej identyczności

SHA-256 w pełni sklejonego _script przed i po podziale — identyczne dla Selects(), Selects(native), Overlay(), Overlay(viewport):

Selects()   3d85d84d2b8b8c49  ==  3d85d84d2b8b8c49
Overlay()   2d7162ddb2af45d4  ==  2d7162ddb2af45d4

Skrypt podziału asertował "".join(fragmenty) == oryginał przed zapisem. Zero przestawień, zero reformatowania, zero zmienionego bajtu.

Skoro sklejony skrypt jest bajtowo identyczny, mechanizm wstrzykiwania, kolejność i kontrakt role-gating są niezmienione z konstrukcjiadd_init_script dostaje bit w bit ten sam string; podział dotyka tylko tego, jak tekst źródłowy leży na dysku.

Pięć modułów testowych/pomocniczych czyta surowe ciało bezpośrednio (nie przez kontrolery Pythona) — zrekonstruowały pełne ciało z fragmentów w tej samej kolejności. To nie zmiana zachowania.

Domknięcie hooka

Skoro .js są już pod limitem, hook długości plików z Fazy 6 rozszerzony o guidebot_recorder/**/*.js. Zweryfikowane: przechodzi na obecnym drzewie, łapie plik .js 700-liniowy (exit=1).

Limity są teraz egzekwowane maszynowo dla .py ORAZ .js.

Testy

selects+overlay 122, tknięte pakiety 521, reszta unit 1003, integracyjne 51 — wszystkie przechodzą. ruff check . (z aktywną bramką C901) czysto.

Trzy nowe .js shipują bez zmiany pyproject — hatchling packages=["guidebot_recorder"] bierze wszystko z katalogu pakietu; importlib.resources je znajduje.

🤖 Generated with Claude Code

https://claude.ai/code/session_0134rSCftVxsMVL8sngceT7A

…a 7)

Ostatnia faza. Dwa wstrzykiwane skrypty init pod limit 600 linii — przy
zachowaniu bajtowej identyczności sklejanego skryptu, bo kolejność i sposób
wstrzykiwania są load-bearing (cursor/slide/desktop przed chrome.js).

  selects.js 1427 → 3 fragmenty (470 / 479 / 478)
    selects.js + selects_options.js + selects_observer.js
  cursor.js   792 → 2 fragmenty (462 / 330)
    cursor.js + cursor_effects.js

Oba to pojedyncze IIFE dzielące jedno domknięcie, więc nie stają się osobno
ładowanymi modułami — to ciągłe fragmenty źródła sklejane z powrotem
W TEJ SAMEJ KOLEJNOŚCI. Sklejanie w Pythonie (Selects.__init__,
Overlay.__init__), wzorem istniejącego shape_prelude()+visibility.js.

DOWÓD BAJTOWEJ IDENTYCZNOŚCI: SHA-256 w pełni sklejonego _script przed i po
podziale — identyczne dla Selects(), Selects(native), Overlay(),
Overlay(viewport). Skrypt podziału asertował "".join(fragmenty) == oryginał
przed zapisem. Zero przestawień, zero reformatowania, zero zmienionego bajtu.
Skoro sklejony skrypt jest bajtowo identyczny, mechanizm wstrzykiwania,
kolejność i kontrakt role-gating są niezmienione Z KONSTRUKCJI.

Pięć modułów testowych/pomocniczych czyta surowe ciało bezpośrednio (nie przez
kontrolery Pythona) — zrekonstruowały pełne ciało z fragmentów w tej samej
kolejności. To nie zmiana zachowania.

DOMKNIĘCIE HOOKA: skoro .js są już pod limitem, hook długości plików z fazy 6
rozszerzony o guidebot_recorder/**/*.js. Zweryfikowane: przechodzi na obecnym
drzewie, łapie plik .js 700-liniowy (exit=1). Limity są teraz egzekwowane
maszynowo dla .py ORAZ .js.

Trzy nowe .js shipują bez zmiany pyproject — hatchling packages=["guidebot_
recorder"] bierze wszystko z katalogu pakietu; importlib.resources je znajduje.

Testy: selects+overlay 122, tknięte pakiety 521, reszta unit 1003,
integracyjne 51 — wszystkie przechodzą. ruff (z bramką C901) czysto.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0134rSCftVxsMVL8sngceT7A
@mpasternak
mpasternak merged commit 9c0923b into main Jul 24, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant