docs: Comprehensive documentation update for Dashboard V3 and Canvas

## Documentation Updates
- DASHBOARD.md: Updated to V3.0 with Canvas V3 features, file browser, introspection
- DASHBOARD_IMPLEMENTATION_STATUS.md: Marked Canvas V3 features as COMPLETE
- CANVAS.md: New comprehensive guide for Canvas Builder V3 with all features
- CLAUDE.md: Added dashboard quick reference and Canvas V3 features

## Canvas V3 Features Documented
- File Browser: Browse studies directory for model files
- Model Introspection: Auto-discover expressions, solver type, dependencies
- One-Click Add: Add expressions as design variables instantly
- Claude Bug Fixes: WebSocket reconnection, SQL errors resolved
- Health Check: /api/health endpoint for monitoring

## Backend Services
- NX introspection service with expression discovery
- File browser API with type filtering
- Claude session management improvements
- Context builder enhancements

## Frontend Components
- FileBrowser: Modal for file selection with search
- IntrospectionPanel: View discovered model information
- ExpressionSelector: Dropdown for design variable configuration
- Improved chat hooks with reconnection logic

## Plan Documents
- Added RALPH_LOOP_CANVAS_V2/V3 implementation records
- Added ATOMIZER_DASHBOARD_V2_MASTER_PLAN
- Added investigation and sync documentation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-16 20:48:58 -05:00
parent 1c7c7aff05
commit ac5e9b4054
23 changed files with 10860 additions and 773 deletions

View File

@@ -34,14 +34,60 @@ export interface DesignVarNodeData extends BaseNodeData {
expressionName?: string;
minValue?: number;
maxValue?: number;
baseline?: number;
unit?: string;
enabled?: boolean;
notes?: string;
}
// Extractor-specific config types
export interface ZernikeConfig {
innerRadius?: number;
outerRadius?: number;
nModes?: number;
filterLowOrders?: number;
subcases?: string[];
subcaseLabels?: Record<string, string>;
referenceSubcase?: string;
extractMethod?: 'extract_relative' | 'extract_rms' | 'extract_absolute';
}
export interface DisplacementConfig {
subcase?: number;
nodeSet?: string;
component?: 'magnitude' | 'x' | 'y' | 'z';
}
export interface StressConfig {
subcase?: number;
elementSet?: string;
stressType?: 'vonMises' | 'principal' | 'max_shear';
}
export interface MassConfig {
source?: 'bdf' | 'expression';
expressionName?: string;
}
export interface FrequencyConfig {
modeNumber?: number;
}
export type ExtractorConfig = Record<string, unknown>;
export interface ExtractorNodeData extends BaseNodeData {
type: 'extractor';
extractorId?: string;
extractorName?: string;
config?: Record<string, unknown>;
extractorType?: 'zernike_opd' | 'displacement' | 'stress' | 'mass' | 'frequency';
extractMethod?: string;
config?: ExtractorConfig;
// Zernike-specific (for quick access)
innerRadius?: number;
nModes?: number;
subcases?: string[];
// Output mapping
outputNames?: string[];
}
export interface ObjectiveNodeData extends BaseNodeData {
@@ -49,6 +95,9 @@ export interface ObjectiveNodeData extends BaseNodeData {
name?: string;
direction?: 'minimize' | 'maximize';
weight?: number;
extractorRef?: string; // Reference to extractor ID
outputName?: string; // Which output from the extractor
penaltyWeight?: number; // For hard constraints (penalty method)
}
export interface ConstraintNodeData extends BaseNodeData {
@@ -62,6 +111,11 @@ export interface AlgorithmNodeData extends BaseNodeData {
type: 'algorithm';
method?: 'TPE' | 'CMA-ES' | 'NSGA-II' | 'GP-BO' | 'RandomSearch';
maxTrials?: number;
// CMA-ES specific
sigma0?: number;
restartStrategy?: 'none' | 'ipop' | 'bipop';
// Weight settings for multi-objective
objectiveWeights?: Record<string, number>;
}
export interface SurrogateNodeData extends BaseNodeData {