PR 158 Review Guide
Branch Review Guide: export_import
Written for AI agents. See Log Methodology Note below for details.
Overview
This branch introduces two major features:
- Figma Vendor Integration - A complete system for converting Figma documents to Jay HTML
- Enhanced Plugin Resolution - Improved plugin manifest and component resolution with better validation
Total Changes: 75 files changed, ~9,893 insertions, ~1,168 deletions
Recent Updates: This branch now includes the merge from main (PR #159) which added headless component props and repeater support. This merge introduced important interactions with the vendor system that are documented below.
How to Review This Branch
The changes are clustered into 6 logical domains. We recommend reviewing in this order:
- Plugin Resolution & Validation (Foundation)
- Editor Protocol Extensions (API Contract)
- Vendor System Architecture (Core Infrastructure)
- Figma Vendor Implementation (Feature Implementation)
- Editor Handlers Integration (Feature Integration)
- Documentation & Tests (Quality & Maintenance)
1. Plugin Resolution & Validation
Purpose: Improve plugin manifest resolution and add better validation for NPM and local plugins.
Changes
Core Plugin Resolution
packages/compiler/compiler-shared/lib/plugin-resolution.ts(~574 lines total, +172 lines)- New
resolvePluginManifest()- Resolves plugin.yaml from local or NPM paths - New
resolvePluginComponent()- Resolves contract files from plugins with validation - Enhanced
getPluginsFromConfig()- Better error handling and validation - Added validation responses with detailed error messages
- Enhanced with support for headless component resolution
- New
Compiler Integration
packages/compiler/compiler-jay-html/lib/jay-target/jay-import-resolver.ts(+9 lines)- Export
LOCAL_PLUGIN_PATHfor consistent plugin path handling
- Export
packages/compiler/compiler-jay-html/lib/jay-target/jay-html-parser.ts(+4 lines)- Use exported
LOCAL_PLUGIN_PATHconstant
- Use exported
Plugin Validation
packages/jay-stack/plugin-validator/lib/validate-plugin.ts(+32 lines)- Added validation for
slugsfield in contract definitions - Validates slug format (must be valid identifiers)
- Validates slugs is an array of strings
- Added validation for
Tests
packages/compiler/compiler-shared/test/plugin-resolution.test.ts(~603 lines total, +578 lines)- Tests for
resolvePluginManifest()with local and NPM plugins - Tests for
resolvePluginComponent()with validation scenarios - Tests for various error cases and edge conditions
- Tests for
Why These Changes?
The plugin system needed better resolution logic to:
- Support both local (
src/plugins/) and NPM plugins consistently - Provide detailed validation errors instead of silent failures
- Support the vendor system's need to resolve plugin contracts (for Figma binding analysis)
- Add support for dynamic route slugs in plugin contracts
Key Points for Reviewer
- ✅ Backward Compatible: Existing plugins continue to work
- ✅ Better Errors: Validation failures now return structured error messages
- ✅ Test Coverage: Comprehensive test suite for resolution logic
- ⚠️ Breaking Change: None, but adds new optional
slugsfield to contract schema
2. Editor Protocol Extensions
Purpose: Extend the Editor Protocol to support vendor document export/import and improve type definitions.
Changes
Protocol Core
packages/jay-stack/editor-protocol/lib/protocol.ts(+168 lines)- Added
ContractTagandContracttypes (simplified from compiler types) - Added
ExportMessage<TVendorDoc>- Message type for exporting vendor documents - Added
ImportMessage<TVendorDoc>- Message type for importing vendor documents - Added
ExportResponseandImportResponse<TVendorDoc>types - Changed
ProjectPage.contractSchema→ProjectPage.contract(simplified) - Simplified
Plugininterface (removed legacyInstalledApp)
- Added
Vendor Document Types
packages/jay-stack/editor-protocol/lib/vendor-documents.ts(new file, +12 lines)- Single source of truth for vendor document types
- Currently exports
FigmaVendorDocumenttype
packages/jay-stack/editor-protocol/lib/vendors/figma.ts(new file, +147 lines)- Complete
FigmaVendorDocumenttype definition - Includes types for frames, text, images, components, variants, etc.
- Includes
LayerBindingtype for contract bindings
- Complete
Protocol Constructors
packages/jay-stack/editor-protocol/lib/constructors.ts(+71 lines)- Added
createExportMessage()- Factory for export messages - Added
createImportMessage()- Factory for import messages
- Added
Client/Server Updates
packages/jay-stack/editor-client/lib/editor-client.ts(+18 lines)- Added
export()method for vendor document export - Added
import()method for vendor document import
- Added
packages/jay-stack/editor-server/lib/editor-server.ts(+38 lines)- Added handlers for
exportandimportmessages - Integrated with vendor registry
- Added handlers for
Type Simplifications
packages/jay-stack/editor-protocol/lib/types.ts(+12 lines)- Export new protocol types
- Remove legacy types
Why These Changes?
The Editor Protocol needed to support:
- Vendor Documents: A standardized way for editor plugins (Figma, Sketch, etc.) to export their native formats
- Type Safety: Single source of truth for vendor document types that both plugins and vendors import
- Simplified Types: Protocol-specific types that are easier to serialize/deserialize than compiler types
- Better DX: Clear API for plugin developers to export/import designs
Key Points for Reviewer
- ✅ Single Source of Truth:
vendor-documents.tsis imported by both plugins and vendors - ✅ Type Safety: Generic
ExportMessage<TVendorDoc>ensures type safety per vendor - ✅ Backward Compatible: Old protocol messages still work
- ⚠️ Breaking Change:
ProjectPage.contractSchemarenamed tocontractwith simplified structure - ⚠️ Headless Components Interaction:
usedComponents[].keyis typed asstring, but the merged headless component feature allows instance-only headless components wherekeyisundefined(see Known Limitations below)
3. Vendor System Architecture
Purpose: Create an extensible vendor system for converting design tool documents to Jay HTML.
Changes
Core Vendor Types
packages/jay-stack/stack-cli/lib/vendors/types.ts(new file, +59 lines)Vendor<TVendorDoc>interface - Core vendor contractVendorConversionResult- Return type with body HTML, fonts, contract data
Vendor Registry
packages/jay-stack/stack-cli/lib/vendors/registry.ts(new file, +48 lines)getVendor(vendorId)- Get vendor by IDhasVendor(vendorId)- Check if vendor existsgetRegisteredVendors()- List all vendors- Static registration of vendors
Jay HTML Builder
packages/jay-stack/stack-cli/lib/vendors/jay-html-builder.ts(new file, +229 lines)buildJayHtmlFromVendorResult()- Builds complete Jay HTML file from vendor result- Generates
<head>with font imports - Generates
<body>with vendor HTML - Optionally generates contract
<script>tag - Handles Google Fonts integration
Public API
packages/jay-stack/stack-cli/lib/vendors/index.ts(new file, +11 lines)- Exports public vendor API
- Re-exports registry functions and types
Why These Changes?
The vendor system provides:
- Extensibility: Easy to add new vendors (Sketch, Adobe XD, etc.)
- Separation of Concerns: Each vendor is responsible for its own conversion logic
- Reusable Infrastructure: HTML building, font management, contract generation are shared
- Type Safety: Generic vendor interface ensures compile-time safety
Architecture
┌─────────────────┐
│ Editor Plugin │ (Figma/Sketch/XD)
└────────┬────────┘
│ export({ vendorId, vendorDoc })
▼
┌─────────────────┐
│ Editor Protocol │
└────────┬────────┘
▼
┌─────────────────┐
│ Editor Handlers │
└────────┬────────┘
│ getVendor(vendorId)
▼
┌─────────────────┐
│ Vendor Registry │
└────────┬────────┘
▼
┌─────────────────┐
│ Specific Vendor │ (figmaVendor, sketchVendor, etc.)
│ convertToBody() │
└────────┬────────┘
│ VendorConversionResult
▼
┌─────────────────┐
│ HTML Builder │ Builds complete .jay-html file
└────────┬────────┘
│
▼ Save to filesystem
Key Points for Reviewer
- ✅ Extensible: New vendors just implement
Vendorinterface - ✅ Testable: Vendors are pure functions (input doc → output HTML)
- ✅ Separation: Vendor logic is isolated from protocol/handler logic
- ✅ Reusable: HTML building is shared across all vendors
4. Figma Vendor Implementation
Purpose: Complete implementation of Figma document to Jay HTML conversion with support for bindings, repeaters, and variants.
Related Design Log: Design Log #67 - Figma Vendor Conversion Algorithm
Changes
Main Vendor Implementation
packages/jay-stack/stack-cli/lib/vendors/figma/index.ts(new file, +344 lines)figmaVendor- ImplementsVendor<FigmaVendorDocument>interfaceconvertNodeToJayHtml()- Main conversion pipelineconvertRegularNode()- Handles standard nodes (text, images, frames)- Node type dispatching to specialized converters
Binding Analysis (Core Algorithm)
packages/jay-stack/stack-cli/lib/vendors/figma/binding-analysis.ts(new file, +322 lines)analyzeBindings()- Determines binding type and converts to Jay HTML syntaxresolveBinding()- Resolves contract bindings with plugin key prefixapplyRepeaterContext()- Applies repeater path context to child bindingsvalidateBindings()- Validates binding consistencygetBindingsData()- Extracts bindings from Figma plugin data- Supports:
- Dynamic content bindings:
{path.to.data} - Attribute bindings:
<img src="{path.to.url}"> - Interactive refs:
<button ref="submitButton"> - Dual bindings:
<input ref="email" value="{email}">
- Dynamic content bindings:
Node Type Converters
packages/jay-stack/stack-cli/lib/vendors/figma/converters/text.ts(new file, +232 lines)- Converts Figma TEXT nodes to HTML
- Handles text styling (font, size, weight, color, alignment)
- Supports dynamic content and refs
packages/jay-stack/stack-cli/lib/vendors/figma/converters/image.ts(new file, +119 lines)- Converts Figma image fills to
<img>tags - Handles both static and dynamic images
- Extracts image URLs from fills
- Converts Figma image fills to
packages/jay-stack/stack-cli/lib/vendors/figma/converters/rectangle.ts(new file, +31 lines)- Converts RECTANGLE nodes with fills, strokes, corners
packages/jay-stack/stack-cli/lib/vendors/figma/converters/ellipse.ts(new file, +32 lines)- Converts ELLIPSE nodes with proper CSS border-radius
packages/jay-stack/stack-cli/lib/vendors/figma/converters/vector.ts(new file, +38 lines)- Converts VECTOR nodes (currently as divs with basic styling)
packages/jay-stack/stack-cli/lib/vendors/figma/converters/group.ts(new file, +67 lines)- Converts GROUP nodes with relative positioning
Advanced Converters
packages/jay-stack/stack-cli/lib/vendors/figma/converters/repeater.ts(new file, +98 lines)- Converts repeated sub-contracts to
forEachloops - Dual-wrapper architecture (outer positioned, inner repeating)
- Manages repeater context stack for child path resolution
- Structure:
<div data-figma-type="frame-repeater" style="position: absolute; ..."> <div forEach="items" trackBy="id"> <!-- Template item with context-relative paths --> </div> </div>
- Converts repeated sub-contracts to
packages/jay-stack/stack-cli/lib/vendors/figma/converters/variants.ts(new file, +328 lines)- Converts Figma component variants to Jay HTML if conditions
- Generates all permutations of variant properties
- Supports boolean variants:
if="isActive"instead ofif="isActive == true" - Filters pseudo-CSS variants (
:hover,:pressed) - Handles interactive variant properties
- Structure:
<div ref="state" style="..."> <div if="state == idle"><!-- idle variant --></div> <div if="state == loading"><!-- loading variant --></div> </div>
Utilities
packages/jay-stack/stack-cli/lib/vendors/figma/utils.ts(new file, +631 lines)- Style generation utilities:
getPositionStyle()- Absolute positioninggetAutoLayoutStyles()- Flexbox conversiongetBackgroundFillsStyle()- Background colors/gradientsgetStrokeStyles()- Border stylesgetBorderRadius()- Corner radiusgetTextStyles()- Font, color, alignment
- Font family collection and normalization
- ID sanitization
- Indentation helpers
- Style generation utilities:
Types & Helpers
packages/jay-stack/stack-cli/lib/vendors/figma/types.ts(new file, +76 lines)ConversionContext- State passed through conversion recursionBindingAnalysis- Result of binding analysis- Re-exports protocol types
packages/jay-stack/stack-cli/lib/vendors/figma/pageContractPath.ts(new file, +21 lines)- Utilities for working with page contract paths
Why These Changes?
The Figma vendor enables:
- Visual Programming: Designers can bind Figma layers to data contracts
- Complete Conversion: All Figma node types converted to semantic HTML
- Advanced Features: Supports repeaters (forEach), variants (if conditions), dynamic content
- Type Safety: Full TypeScript support with contract validation
- Maintainability: Modular converter architecture, each node type has its own converter
Conversion Features
| Feature | Figma Concept | Jay HTML Output |
|---|---|---|
| Data Binding | Layer bound to contract tag | <div>{data.path}</div> |
| Attribute Binding | Layer bound to tag with attribute | <img src="{product.imageUrl}"> |
| Interactive | Layer bound to interactive tag | <button ref="submitButton"> |
| Dual Binding | Layer bound to dual-type tag | <input ref="email" value="{email}"> |
| Repeater | Frame bound to repeated sub-contract | <div forEach="items" trackBy="id"> |
| Variants | Component with variant properties | <div if="state == active"> |
| Boolean Variants | Variant with boolean contract tag | <div if="isActive"> (simplified) |
Key Points for Reviewer
- ✅ Complete Implementation: All phases from Design Log #67 implemented
- ✅ Well-Tested: Fixture-based tests with real Figma documents
- ✅ Modular: Each converter is independent and testable
- ✅ Documented: Inline comments explain complex logic
- ⚠️ Complex: Variant permutation generation is inherently complex
- 📝 Design Log #67: Read for full algorithm understanding
5. Editor Handlers Integration
Purpose: Integrate vendor system and plugin resolution into the editor handler pipeline.
Changes
Editor Handlers
packages/jay-stack/stack-cli/lib/editor-handlers.ts(~1,268 lines refactored)- Added
onExport()handler - Handles vendor document export - Added
onImport()handler - Handles vendor document import (stub) - Refactored
onGetProjectInfo()- Simplified using new plugin resolution - Added
pageUrlToDirectoryPath()- Converts routes to filesystem paths - Added
convertContractToProtocol()- Converts compiler contracts to protocol contracts - Removed legacy code for
InstalledAppand old contract handling - Better error handling and validation
- Added
Export Flow
- Receive
ExportMessagewithvendorId,pageUrl,vendorDoc - Validate page exists (or create directory)
- Save vendor document to
page.<vendorId>.json - Look up vendor by ID from registry
- Load project page and plugins
- Call
vendor.convertToBodyHtml() - Build complete
.jay-htmlfile withbuildJayHtmlFromVendorResult() - Save to filesystem
- Return success/error response
CLI Integration
packages/jay-stack/stack-cli/lib/server.ts(+14 lines)- Log registered vendors on startup
- Display vendor count in server info
packages/jay-stack/stack-cli/lib/index.ts(+1 line)- Export vendor types for external use
Why These Changes?
The editor handlers needed to:
- Support Vendors: Route export/import messages to appropriate vendors
- Simplify Code: Use new plugin resolution instead of legacy code
- Better Errors: Provide clear error messages for plugin and vendor issues
- Maintain State: Track pages and plugins for binding resolution
Key Points for Reviewer
- ✅ Backward Compatible: Existing editor protocol messages still work
- ✅ Better Architecture: Clear separation of concerns (handlers → vendors)
- ⚠️ Large Refactor: Many lines changed but mostly simplifications
- 📝 Test Coverage: Updated tests to match new behavior
6. Documentation & Tests
Purpose: Document the new systems and ensure quality with comprehensive tests.
Documentation Changes
Editor Protocol Documentation
docs/jay-stack-editor-protocol.md(new file, +874 lines)- Complete Editor Protocol specification
- Message types and response formats
- Export/import API documentation
- Plugin and contract type definitions
- Example usage for plugin developers
Project Info API Documentation
docs/jay-stack-project-info-api.md(~320 lines refactored)- Updated to match new
PluginandContracttypes - Removed legacy
InstalledAppreferences - Added examples with new types
- Updated to match new
Page Configuration Documentation
docs/jay-stack-page-configuration.md(+40 lines)- Added
usedComponentsdocumentation - Explained plugin component key mapping
- Updated examples
- Added
Jay HTML Documentation
docs/core/jay-html.md(+176 lines)- Added section on vendors
- Explained vendor document export flow
- Updated contract binding examples
Building Jay Packages Documentation
docs/core/building-jay-packages.md(+50 lines)- Added vendor system information
- Updated plugin resolution documentation
README Updates
docs/README.md(+9 lines)- Added link to Editor Protocol spec
- Updated documentation structure
Vendor Documentation
packages/jay-stack/stack-cli/lib/vendors/README.md(new file, +510 lines)- Complete guide for contributing new vendors
- Step-by-step vendor implementation guide
- Best practices and examples
- Architecture diagrams
packages/jay-stack/stack-cli/lib/vendors/figma/README.md(new file, +396 lines)- Figma-specific documentation
- Plugin developer guide
- Document structure explanation
- Binding system documentation
Editor Protocol Package README
packages/jay-stack/editor-protocol/readme.md(+124 lines)- Added export/import API examples
- Updated type definitions
- Added vendor document type information
Test Changes
Plugin Resolution Tests
packages/compiler/compiler-shared/test/plugin-resolution.test.ts(+603 lines)- Tests for
resolvePluginManifest() - Tests for
resolvePluginComponent() - Tests for NPM and local plugin resolution
- Tests for validation errors
- Tests for
Vendor System Tests
packages/jay-stack/stack-cli/test/vendors/registry.test.ts(new file, +69 lines)- Tests vendor registration
- Tests vendor lookup
- Tests error cases
packages/jay-stack/stack-cli/test/vendors/integration.test.ts(new file, +267 lines)- End-to-end tests for vendor system
- Tests HTML building
- Tests font collection
- Tests contract generation
Figma Vendor Tests
packages/jay-stack/stack-cli/test/vendors/figma/fixtures.test.ts(new file, +213 lines)- Fixture-based tests with real Figma documents
- Tests basic text conversion
- Tests variants with boolean properties
- Tests repeaters
- Tests plugin contract resolution
- Tests complex pages
packages/jay-stack/stack-cli/test/vendors/figma/fixtures/(new directory)basic-text/- Simple text binding testbutton-with-variants/- Variant conversion testcomplex-page/- Multi-element page testplugin-product-card/- Plugin contract testrepeater-list/- Repeater conversion test- Each fixture has:
page.figma.json- Input Figma documentpage.jay-contract- Contract definitionexpected.jay-html- Expected outputpage.conf.yaml(if needed) - Page configurationREADME.md- Fixture documentation
Editor Handler Tests
packages/jay-stack/stack-cli/test/editor-handlers.test.ts(~417 lines refactored)- Updated tests for new plugin resolution
- Updated tests for contract format changes
- Removed tests for legacy
InstalledAppcode
Editor Server Tests
packages/jay-stack/editor-server/test/editor-server.test.ts(+25 lines)- Tests for export message handling
- Tests for import message handling
Compiler Tests
packages/compiler/compiler-jay-html/test/contract/contract-compiler.test.ts(+10 lines)- Updated for new plugin resolution
packages/compiler/compiler-jay-html/test/jay-target/parse-jay-file.unit.test.ts(+5 lines)- Updated for new imports
Why These Changes?
Documentation and tests ensure:
- Developer Experience: Clear docs help plugin developers and vendor contributors
- Quality: Comprehensive tests catch regressions
- Maintainability: Future contributors understand the system
- Confidence: Well-tested code can be safely refactored
Key Points for Reviewer
- ✅ Comprehensive Docs: Every new feature is documented
- ✅ Real-World Tests: Fixture tests use actual Figma documents
- ✅ Test Coverage: All major code paths have tests
- 📝 Fixture README: Each fixture has its own documentation
Known Limitations & Future Work
Headless Component Instance-Only Support
Context: The main branch merge (PR #159) introduced "instance-only" headless components, where components can be used without a key attribute:
<script type="application/jay-headless" plugin="wix-stores" contract="product-card"></script>
<jay:product-card productId="prod-123">
<h1>{name}</h1>
</jay:product-card>
Current Limitations in Export/Import:
Jay HTML Builder Limitation (
jay-html-builder.ts, lines 204-214)- Only includes headless components with both
plugin,contract, ANDkey - Instance-only headless components (without
key) are not added to generated Jay HTML - Impact: Figma export cannot generate instance-only headless component imports
- Only includes headless components with both
Binding Analysis Limitation (
binding-analysis.ts, lines 118-150)- Plugin binding resolution assumes a
keyexists - For instance-only components,
keyisundefined - Results in invalid binding paths like
"undefined.name"instead of just"name" - Impact: Cannot bind Figma layers to instance-only headless component contracts
- Plugin binding resolution assumes a
Protocol Type Mismatch (
protocol.ts, line 116)usedComponents[].keyis typed asstring(required)- Should be
string | undefinedto support instance-only headless components - Impact: Type safety issue when passing instance-only components through protocol
Protocol Contract Metadata
- Protocol
Contracttype has onlynameandtags - Missing
propsfield that was added for headless components - Impact: Figma plugin cannot discover or validate prop requirements for headless components
- Protocol
Recommendation: Document these as known limitations. Instance-only headless components are a newer feature, and key-based headless components remain fully supported by the vendor system.
Miscellaneous Changes
Configuration
.gitignore(+1 line)- Added pattern for vendor document JSON files:
*.figma.json
- Added pattern for vendor document JSON files:
Design Log
design-log/67 - Figma Vendor Convesion Algorithm(new file, +767 lines)- Complete design documentation for Figma vendor
- Background, problem statement, Q&A
- Design decisions and trade-offs
- Implementation plan and results
- Examples and test cases
Build Fixes
packages/jay-stack/route-scanner/package.json(+1 line changed)- Changed
mainfromdist/index.jstodist/index.mjsfor ESM compatibility
- Changed
packages/jay-stack/route-scanner/vite.config.ts(+1 line changed)- Changed output format from CommonJS to ESM (
formats: ['es']) - Fixes build compatibility with Vite-based consumers
- Changed output format from CommonJS to ESM (
Testing the Branch
Prerequisites
# Install dependencies
yarn install
# Build all packages
yarn build
Run Tests
# Run all tests
yarn test
# Run specific test suites
cd packages/compiler/compiler-shared && yarn test
cd packages/jay-stack/stack-cli && yarn test
Manual Testing
Start Dev Server:
cd examples/jay-stack/fake-shop jay devCheck Vendor Registration: Look for log message:
📦 Registered vendors: figmaTest Export (requires Figma plugin):
- Install Figma plugin
- Bind Figma layers to contracts
- Export from plugin
- Check
page.jay-htmlis created
Summary
This branch introduces a complete vendor system with a fully-functional Figma vendor and enhanced plugin resolution. The changes are extensive but well-organized into logical domains.
Strengths:
- ✅ Clean architecture with separation of concerns
- ✅ Comprehensive test coverage with real-world fixtures
- ✅ Extensive documentation for contributors
- ✅ Type-safe throughout with TypeScript
- ✅ Follows design log methodology
Areas for Attention:
- ⚠️ Large refactor in
editor-handlers.ts(review carefully) - ⚠️ Breaking change in Editor Protocol (
contractSchema→contract) - ⚠️ Complex variant permutation logic (review with Design Log #67)
- ⚠️ Headless component instance-only support not yet implemented (see Known Limitations)
- ⚠️ Protocol type mismatch:
usedComponents[].keyshould bestring | undefined
Recommended Review Order:
- Read Design Log #67 for context
- Review Known Limitations section (important for understanding scope)
- Review plugin resolution (foundation)
- Review protocol extensions (API contract)
- Review vendor architecture (infrastructure)
- Review Figma vendor with fixtures (implementation)
- Review integration code (editor handlers)
- Verify documentation completeness
Changelog
Added
- Vendor system for converting design tool documents to Jay HTML
- Complete Figma vendor implementation with binding support
- Export/Import API in Editor Protocol
- Enhanced plugin resolution with validation
- Comprehensive documentation for vendors and protocol
- Fixture-based testing for Figma vendor
- Support for variant properties and repeaters
- Support for dynamic content, attributes, and refs
Changed
- Plugin resolution returns validation objects instead of throwing errors
- Editor Protocol simplifies
PluginandContracttypes ProjectPage.contractSchemarenamed tocontract- Editor handlers refactored to use new plugin resolution
Fixed
- Plugin manifest resolution from NPM packages
- Plugin component resolution with proper validation
- Contract slug validation
Deprecated
- Legacy
InstalledApptype (replaced byPlugin)
Known Limitations
- Instance-only headless components (without
key) are not supported in vendor export - Protocol
Contracttype does not includepropsfield from compiler contracts - Binding analysis requires
keyfor plugin contracts (incompatible with instance-only headless)
Branch: export_import
Author: Noam Inbar
Original Date: January 15, 2026
Last Updated: February 10, 2026 (after merge with main/PR #159)
Total Changes: 75 files, ~9,893 insertions, ~1,168 deletions
Log Methodology Note
Note: These design logs are written primarily for AI agents as part of the Design Log methodology and made accessible here for human readers. The language and structure are optimized for machine consumption — expect precise, specification-style prose rather than narrative documentation.