-
Notifications
You must be signed in to change notification settings - Fork 0
Contributing ru
English | 中文 | 日本語 | 한국어 | Español | Português | Русский
npm test # full test suite (Node built-in runner, no build needed)
node --test test/foo.test.mjs # single file
npm run package # build the versioned zip (browsa-vX.Y.Z.zip)
npm run build # esbuild vendor bundle (only needed after build.mjs changes)
bash check-compat.sh # static compatibility checkОграничение машины на 4GB: сьют — 103 файла (~36 jsdom-тяжёлых) на VPS 2CPU/4GB; скрипт ограничивает конкурентность двойкой, на 4GB предпочитайте --test-concurrency=1. Никогда не выделяйте в тестах блобы в десятки MB (один мок на 44MB однажды уронил машину в OOM — реальный рецидив); предпочитайте pure-function тесты (без DOM, без больших буферов).
- Тесты мокают глобальный
chromeдо импорта реальных модулей; jsdom-тесты используют РЕАЛЬНЫЕ вендорские бандлы marked/DOMPurify/katex/highlight.js, а не подставки. -
sidepanel.jsне имеет ни одного экспорта — его тесты грузят весьsidepanel.htmlв jsdom и ведут его как чёрный ящик (симулированные клики/клавиши/сообщения портов). - Worker-клиенты держат модульные синглтоны → сценарии, требующие свежего синглтона, ОБЯЗАНЫ быть отдельными ФАЙЛАМИ тестов (раннер изолирует по файлу/процессу).
-
Дисциплина lockstep: факты, отражённые в нескольких местах (regex-ы, имена полей, пары CSS/hint, порядок табов), либо схлопываются в один источник, либо закрепляются source-regex с пометкой в AGENTS.md «менять оба в lockstep». Пример:
subchat.test.mjsregex-локает точную строку исходникаpushSubChatChunk(… SUBCHAT_DONE …). - Тесты detail-thread / стриминга ОБЯЗАНЫ завершать ход (DONE / ■ / закрытие), иначе 20-секундный интервал SW_PING порта хода утекает и вешает раннер.
- WASM — исключение из «никакого реального исполнения»:
WebAssembly.instantiateработает в Node, поэтому тесты pdf-inspector исполняют настоящий вендорский бинарник.
- N кейсов switch, различающихся только литералами → одна таблица просмотра; две рукописные реализации одного сетевого протокола → одна общая функция с хуками (дрейф DONE-обработчика был реальным семейством багов).
- После каждого извлечения запускайте ПОЛНЫЙ сьют И
check-compat.sh— синтаксическая проверка ничего не доказывает. - Грепайте весь репозиторий (включая test/), прежде чем объявить экспорт мёртвым; тест-онли экспорт не умирает автоматически — читайте окружающие комментарии.
node dev-preview/gen.mjs # regenerate preview pages from real sidepanel.html (rerun after HTML changes)
python3 -m http.server 8931 # from the repo root
# http://127.0.0.1:8931/dev-preview/sidepanel.preview.htmlChrome-shim даёт минимальную поверхность chrome.*; seed.js инжектит богатую историю. Скриншоты идут через CDP Page.captureScreenshot (просто, без clip/scale; page.screenshot() имеет артефакты тёмной темы). Зелёное превью ≠ зелёное реальное расширение: sendMessage-конверты шима обязаны зеркалить реальный контракт байт-в-байт, а верификация CSP-класса всегда требует реальной загрузки расширения.
- Поднимите версию в ОБОИХ
manifest.jsonиpackage.json. - PR → зелёный CI → squash-merge в main → обратная заливка dev:
git reset --hard origin/main && git push --force-with-lease origin dev(merge-заливка загрязняет main..dev; кнопка Delete branch на странице PR удалила бы dev). - PR подъёма версии идут через переиспользуемые release-workflow (xiaohuzai/release-flow@v1) с отменёнными тестами (PAT-режим).
- Тексты сторового листинга генерируются скиллом
.agents/skills/cws-listing(тег — источник истины по версии); история отказов задокументирована. - Дисциплина docs-sync (любое видимое пользователю изменение, тот же PR): README на обоих языках (зеркала с выровненными секциями) → сайт документации (оба языка) → скриншоты/баннеры/demo GIF/промо-видео — каждое РАССМАТРИВАЕТСЯ (читаемость судится в собственном разрешении ассета; изменившийся GIF обязан сменить имя файла, чтобы победить кэши) → факты уровня архитектуры записываются в AGENTS.md.
Без автокоммита/упаковки (ждать явной инструкции) · без полного прогона тестов перед упаковкой (точечного зелёного достаточно) · использовать текущую версию, никогда не поднимать самостоятельно · приватный ключ расширения никогда не покидает /root/workspace/browsa-keys/ · пользовательские тексты без жаргона (zh не несёт английского жаргона) · сохранённые пиксели изображений никогда не уничтожаются · thinking по умолчанию omit.
Авторитетные версии: Contributing (англ.) / Contributing-zh (кит.) — снимок первичного перевода ИИ, синхронизирован 2026-10-01.
English
- Home
- Architecture
- Rendering Pipeline
- Storage Model
- Providers and Agents
- ASR and Video Analysis
- Security Model
- Design Decisions
- Contributing
中文
相关 / Related
日本語
한국어
Español
- Inicio
- Arquitectura
- Pipeline de renderizado
- Modelo de almacenamiento
- Proveedores y agentes
- ASR y análisis de vídeo
- Modelo de seguridad
- Decisiones de diseño
- Contribuir
Português
- Início
- Arquitetura
- Pipeline de renderização
- Modelo de armazenamento
- Provedores e agentes
- ASR e análise de vídeo
- Modelo de segurança
- Decisões de design
- Contribuindo
Русский