-
Notifications
You must be signed in to change notification settings - Fork 0
Contributing ja
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 check4GB ボックスの制約: スイートは 103 ファイル(jsdom 重視が約 36)で、2CPU/4GB の VPS 上で走る。スクリプトは同時実行を 2 に上限し、4GB では --test-concurrency=1 が望ましい。テストで数十 MB のブロブを確保してはならない(44MB のモック 1 つでボックスが OOM した実績 — 実際に再発した)。純関数テスト(DOM なし、大きなバッファなし)を優先する。
- テストは、実モジュールを import する前に
chromeグローバルをモックする。jsdom テストは代役ではなく、実ベンダーの marked/DOMPurify/katex/highlight.js バンドルを使う。 -
sidepanel.jsは export ゼロ — そのテストはsidepanel.html全体を jsdom に読み込み、ブラックボックスで操作する(クリック/キー/ポートメッセージのシミュレート)。 - ワーカークライアントはモジュールレベルのシングルトンを持つ → 新しいシングルトンが要るシナリオは、必ず別のテスト「ファイル」にする(ランナーはファイル/プロセス毎に隔離する)。
-
lockstep 規律: 複数箇所でミラーされる事実(正規表現、フィールド名、CSS/ヒントのペア、タブ順)は、1 つのソースへ畳むか、AGENTS.md の「lockstep で両方変える」注記付きのソース正規表現でピン留めする。例:
subchat.test.mjsはpushSubChatChunk(… SUBCHAT_DONE …)の正確なソース行を正規表現でロックする。 - ディテールスレッド/ストリーミングのテストは、必ずターンを終わらせること(DONE / ■ / クローズ)。さもないとターンポートの 20 秒 SW_PING インターバルが漏れて、ランナーが固まる。
- WASM は「実行しない」の例外:
WebAssembly.instantiateは Node で走るため、pdf-inspector テストは実ベンダーのバイナリを実行する。
- リテラルだけが違う switch case が N 個 → 1 つのルックアップテーブル。同じワイヤプロトコルの手書き実装が 2 つ → フック付きの 1 つの共有関数(DONE ハンドラのドリフトは、現実に起きたバグファミリだった)。
- 抽出のたびに、フルスイート「と」
check-compat.shを回す — 構文チェックは何も証明しない。 - export を死んだと宣言する前に、リポジトリ全体(test/ 込み)を grep する。テスト専用の export が自動的に死んでいるわけではない — 前後のコメントを読む。
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() にはダークモードのアーティファクトがある)。プレビューが通ることは、実拡張が通ることと同義ではない: shim の sendMessage エンベロープは実契約をバイト単位でミラーせねばならず、CSP 系の検証は常に実拡張のロードを要する。
-
manifest.jsonとpackage.jsonの「両方」でバージョンを上げる。 - PR → CI グリーン → main へ squash-merge → dev をバックフィル:
git reset --hard origin/main && git push --force-with-lease origin dev(マージベースのバックフィルは main..dev を汚染する。PR ページの Delete branch ボタンは dev を削除しかねない)。 - バージョンアップの PR は、再利用可能なリリースワークフロー(xiaohuzai/release-flow@v1)を流れる(テストは免除、PAT モード)。
- ストアリスティングの文案は
.agents/skills/cws-listingスキルで生成する(タグがバージョンの真実の源)。リジェクトの履歴は記録済み。 - ドキュメント同期の規律(ユーザーに見える変更はすべて、同一 PR で): 両言語の README(セクション整合のミラー)→ ドキュメントサイト(両言語)→ スクリーンショット/バナー/デモ GIF/プロモ動画をそれぞれ「検討」(可読性はその素材自身の解像度で判定。変更された GIF は、キャッシュ打破のためファイル名変更が必須)→ アーキテクチャレベルの事実は AGENTS.md に記録。
自動コミット/パッケージング禁止(明示的な指示を待つ) · パッケージング前のフルテスト実行禁止(対象を絞ったグリーンで十分) · 現行バージョンを使い、独断でバンプしない · 拡張の秘密鍵は /root/workspace/browsa-keys/ の外に出ない · ユーザー向けの文案は専門用語を避ける(zh に英語の専門用語を持ち込まない) · 保存済みの画像ピクセルは決して破棄しない · thinking のデフォルトは omit。
権威版: Contributing(英語) / Contributing-zh(中文) — AI による初翻スナップショット、同期日 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
Русский