Files
rust_browser/docs/source-tree-analysis.md
Zachary D. Rowitsch 931f17b70e
All checks were successful
ci / fast (linux) (push) Successful in 6m46s
Add BMAD framework, planning artifacts, and architecture decision document
Install BMAD workflow framework with agent commands and templates.
Create product brief, PRD, project context, and architecture decision
document covering networking/persistence strategy, JS engine evolution
path, threading model, web_api scaling, system integration, and
tab/process model. Add generated project documentation (architecture
overview, component inventory, development guide, source tree analysis).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 15:13:06 -04:00

161 lines
9.5 KiB
Markdown

# Source Tree Analysis
**Generated:** 2026-03-05 | **Scan Level:** Deep
## Annotated Directory Tree
```
rust_browser/
├── Cargo.toml # Workspace root: 22 member crates, dependency versions, lints
├── Cargo.lock # Pinned dependency versions
├── CLAUDE.md # AI agent development instructions
├── AGENTS.md # Agent contract and rules
├── README.md # Project overview and getting started
├── rust-toolchain.toml # Toolchain: stable, rustfmt, clippy
├── deny.toml # License/advisory policy (cargo-deny)
├── justfile # Task runner: ci, test, lint, fmt, policy, metrics
├── src/
│ └── lib.rs # Root crate: re-exports for integration tests
├── crates/ # ── All 22 workspace crates ──
│ │
│ ├── shared/ # [Layer 0] Common types, geometry, errors (3 files)
│ │ └── src/lib.rs # Point, Size, Rect, Color, NodeId, StyleId, LayoutId
│ │
│ │ # ── Layer 1: JavaScript Engine ──
│ ├── js_parser/ # JS tokenization and AST parsing (35 files)
│ │ └── src/ # JsParser::parse(), Tokenizer, AST types
│ ├── js_vm/ # JS interpreter/virtual machine (48 files)
│ │ └── src/ # JsVm, JsValue, Interpreter, Environment
│ ├── js/ # JS facade combining parser+VM (1 file)
│ │ └── src/lib.rs # JsEngine (thin wrapper)
│ │
│ │ # ── Layer 1: Document/Style Pipeline ──
│ ├── html/ # HTML5 tokenization and tree building (9 files)
│ │ └── src/ # HtmlParser::parse(), tokenizer, entities
│ ├── dom/ # DOM tree representation (10 files)
│ │ └── src/ # Document, Node, NodeKind, arena-based
│ ├── css/ # CSS parsing and data structures (36 files)
│ │ └── src/ # CssParser, Stylesheet, CssValue, Declaration
│ ├── selectors/ # CSS selector matching and cascade (17 files)
│ │ └── src/ # SelectorEngine, Specificity, bloom filter
│ ├── style/ # Style computation: cascade + inheritance (34 files)
│ │ └── src/ # StyledDocument, ComputedStyles, UA stylesheet
│ │
│ │ # ── Layer 1: Layout & Rendering ──
│ ├── layout/ # Layout engine: box model, flex, tables (60 files) ★ LARGEST
│ │ └── src/ # LayoutEngine, block/inline/flex/table layout
│ ├── display_list/ # Display list: painting commands (13 files)
│ │ └── src/ # DisplayListBuilder, DisplayItem variants
│ ├── render/ # CPU rasterizer (14 files)
│ │ └── src/ # Renderer, CpuRasterizer, PixelBuffer
│ ├── graphics/ # Graphics backend abstraction (1 file)
│ │ └── src/lib.rs # GraphicsBackend placeholder
│ │
│ │ # ── Layer 1: Infrastructure ──
│ ├── net/ # Network stack: HTTP, file://, data: (7 files)
│ │ └── src/ # NetworkStack, HttpLoader, FileLoader, caching
│ ├── storage/ # Persistent storage placeholder (1 file)
│ │ └── src/lib.rs # StorageEngine
│ ├── image/ # Image decoding: PNG, JPEG, GIF, WebP, SVG (1 file)
│ │ └── src/lib.rs # ImageStore, ImagePipeline, DecodedImage
│ ├── fonts/ # Font loading, metrics, rasterization (5 files)
│ │ ├── src/ # FontProvider, FontRequest, GlyphMask
│ │ └── data/ # Bundled Noto Sans fonts (3.1 MB)
│ ├── platform/ # Window/event loop: winit+softbuffer (4 files) ⚠️ unsafe allowed
│ │ └── src/ # PlatformContext, EventLoop, Window, KeyCode
│ ├── web_api/ # Web API facade: DOM+JS bridge (14 files)
│ │ └── src/ # WebApiFacade, EventTarget, TaskQueue, Promise
│ │
│ │ # ── Layer 2: Browser Runtime ──
│ ├── browser_runtime/ # Tabs, navigation, history (5 files)
│ │ └── src/ # BrowserRuntime, BrowsingContext, Navigation
│ │
│ │ # ── Layer 3: Application Shell ──
│ └── app_browser/ # Desktop app binary (31 files)
│ └── src/ # main(), pipeline, chrome, hit_test, forms
├── tests/ # Integration tests (each registered in Cargo.toml)
│ ├── goldens.rs # Golden rendering regression tests
│ ├── goldens/ # Golden test fixtures and expected outputs
│ │ ├── fixtures/ # HTML input files
│ │ └── expected/ # Expected layout/display list dumps
│ ├── main_cli_tests.rs # CLI integration tests
│ ├── external_css_test.rs # CSS parsing tests
│ ├── navigation_tests.rs # Navigation lifecycle tests
│ ├── regen_goldens.rs # Regenerate golden expected outputs
│ ├── wpt_harness.rs # Web Platform Tests harness
│ ├── js_tests.rs # JavaScript execution tests
│ ├── js_dom_tests.rs # DOM + JS interaction tests
│ ├── js_events.rs # Event system tests
│ ├── js_scheduling.rs # Microtask/promise/scheduling tests
│ ├── js262_harness.rs # Test262 JS conformance suite
│ └── external/ # External test data
│ ├── wpt/ # Web Platform Tests
│ └── js262/ # Test262 conformance manifests
├── scripts/ # Policy enforcement and utilities
│ ├── check_deps.sh # Layer dependency rule enforcement
│ ├── check_unsafe.sh # Unsafe code audit (allowlist: platform, graphics)
│ ├── check_file_size.sh # File size limits
│ ├── metrics.sh # Code metrics collection
│ ├── sanitizer.sh # Linux nightly sanitizer runner
│ ├── import_wpt_reftests.py # Import W3C WPT tests
│ ├── wpt_status.py # WPT status tracking
│ ├── clone_test262.py # Clone tc39/test262
│ ├── scan_test262.py # Generate test262_full_manifest.toml
│ ├── curate_test262.py # Test262 curation
│ ├── triage_test262.py # Promote passing Test262 tests
│ └── triage_test262_full.py # Full suite triage
├── investigations/ # Rendering investigation reports
│ ├── acid2/report.md # Acid2 test investigation
│ ├── google/report.md # Google.com rendering
│ ├── moldybits/report.md # moldybits.com rendering
│ ├── slashdot/report.md # Slashdot rendering
│ └── youtube/report.md # YouTube rendering
└── docs/ # Project documentation
├── browser_architecture_initial_exploration.md
├── browser_project_structure_modularization_guide.md
├── browser_testing_strategy_high_level_to_detailed.md
├── build_ci_contract_gitea_ci_rust_monorepo.md
├── browser_milestone_plan.md
├── milestone_6_phased_implementation_plan.md
├── known_limitations_log.md
├── external_conformance_wpt.md
├── wpt_known_fail_analysis.md
├── CSS2.1_Implementation_Checklist.md
├── HTML5_Implementation_Checklist.md
├── js_conformance_report.md
├── js_feature_matrix.md
└── test262_roadmap.md
```
## Critical Folders
| Folder | Purpose | Layer |
|---|---|---|
| `crates/layout/` | Layout engine — largest crate (60 files), handles block/inline/flex/table/positioned layout | L1 |
| `crates/js_vm/` | JS interpreter — second largest (48 files), core execution engine | L1 |
| `crates/css/` | CSS parser — 36 files, tokenization and property/value parsing | L1 |
| `crates/js_parser/` | JS parser — 35 files, tokenization and AST construction | L1 |
| `crates/style/` | Style computation — 34 files, cascade, inheritance, UA stylesheet | L1 |
| `crates/app_browser/` | Application shell — 31 files, event handling, pipeline orchestration, CLI | L3 |
| `crates/selectors/` | Selector matching — 17 files, specificity, bloom filter, pseudo-classes | L1 |
| `crates/web_api/` | Web API bridge — 14 files, JS↔DOM binding, events, promises, scheduling | L1 |
| `crates/render/` | CPU rasterizer — 14 files, pixel-level rendering | L1 |
| `crates/display_list/` | Display list — 13 files, painting command generation | L1 |
| `tests/` | Integration tests — 11 test files + golden fixtures + external suites | — |
| `scripts/` | Policy enforcement — 12 scripts for CI, conformance, metrics | — |
## Entry Points
| Entry Point | Location | Purpose |
|---|---|---|
| `main()` | `crates/app_browser/src/main.rs` | Application binary entry |
| `run_windowed_mode()` | `crates/app_browser/src/` | Interactive browser window |
| `run_render_mode()` | `crates/app_browser/src/` | Offline HTML → layout dump + PNG |
| `lib.rs` | `src/lib.rs` | Root crate re-exports for integration tests |