Skip to content

🚨 P0 VIOLATION: JS in extension/ — ALL extension code MUST be Rust → WASM (no .js handwritten) #156

@gHashTag

Description

@gHashTag

🚨 RULE VIOLATION DETECTED (2026-04-21 03:00 +07)

Agent reported "e2e done" by writing 125 lines of handwritten JavaScript in extension/sidepanel.js, background.js etc. This is a direct violation of the Trinity Rust-only policy.

Forbidden artifacts (MUST be deleted)

  • extension/sidepanel.js (125 lines handwritten JS) ❌
  • extension/background.js (handwritten JS) ❌
  • Any .js file in extension/ that is NOT generated by wasm-bindgen / trunk / wasm-pack
  • Any .sh test script (L1) ❌

Trinity Stack Law (reaffirmed)

Layer Allowed Forbidden
Core / crates Rust Python, JS, Go
Extension logic Rust → WASM (via wasm-bindgen / web-sys / leptos / yew / dioxus) Handwritten .js, .ts
UI markup HTML + CSS (minimal, generated where possible) jQuery, hand-rolled JS
Glue (manifest) manifest.json (data only, no logic) inline <script> with logic
Scripts Rust binaries / cargo xtask .sh, .bash, .zsh

Root Cause

Agent took the lazy path (write JS) instead of the correct path:

  • crates/trios-ext/ Rust crate compiled to WASM via wasm-pack build --target web
  • web-sys for DOM, wasm-bindgen-futures for async
  • gloo-net::websocket for MCP WebSocket to trios-server
  • Output: extension/dist/trios_ext_bg.wasm + tiny generated trios_ext.js glue (auto, not handwritten)

Acceptance Criteria

  • Delete all handwritten .js files from extension/ (sidepanel.js, background.js)
  • crates/trios-ext builds with wasm-pack build --target web --out-dir ../../extension/dist/wasm
  • manifest.json references only generated wasm-bindgen glue (no handwritten logic)
  • Side panel UI implemented in Rust (Leptos/Yew/Dioxus or raw web-sys)
  • Background service worker = Rust → WASM (or thin auto-generated stub calling Rust)
  • WebSocket client = gloo-net or web-sys::WebSocket from Rust
  • cargo clippy --target wasm32-unknown-unknown -- -D warnings = 0
  • wasm-pack test --headless --chrome passes
  • grep -r "function\|=>" extension/*.js returns empty (only auto-generated allowed, in dist/)
  • CI rule added: extension/**/*.js outside dist/ fails build
  • Experience log .trinity/experience/2026-04-21-rust-only-extension.md

Test Plan

  1. cd crates/trios-ext && wasm-pack build --target web --out-dir ../../extension/dist/wasm
  2. Load unpacked extension → side panel opens
  3. Total Black #000000 background, Trinity logo, фирменные цвета (🎨 P0: Brand enforcement — Trinity logo + Total Black palette + working chat (Chrome Extension) #155)
  4. Chat sends via Rust gloo-net::websocket to ws://localhost:9005/mcp → echo response visible
  5. find extension -name "*.js" -not -path "*/dist/*" → empty

Related

L8 PUSH FIRST + L9 BOARD

  • PR с Closes #156, branch pushed первым
  • TRINITY board → In progress
  • NATO call-sign: DELTA (новая кодовая, чтобы агент-нарушитель не подхватил снова)

Note to agents

Шеф проверяет каждый коммит. Любой .js написанный руками = отзыв задачи + переписать на Rust.
Это не popup-toy, это Trinity. Rust → WASM. Точка.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions