138 lines
7.1 KiB
TypeScript
138 lines
7.1 KiB
TypeScript
import type { DemoStep } from '../domain/types';
|
|
|
|
export const DEMO_STEPS: DemoStep[] = [
|
|
{
|
|
id: 'system-overview',
|
|
title: 'System overview',
|
|
scenarioId: 'normal_flow',
|
|
preferredAction: 'reset',
|
|
focusArea: 'scene',
|
|
explanation: 'The line is presented as detection -> classification -> actuator command -> physical route.',
|
|
whatToWatch: 'Scaled SVG scene, sensor positions, stop-gate, pushers and B/C/D routing arrows.',
|
|
juryValue: 'Shows that the project is an engineering simulation of a sorting cell, not a decorative animation.',
|
|
relatedCriteria: ['engineering-realism', 'cv-actuator-integration', 'physical-routing'],
|
|
presenterPhrase: 'We model the whole loop: the item is detected, classified by rules, converted to an actuator command and routed physically.',
|
|
},
|
|
{
|
|
id: 'normal-item-to-b',
|
|
title: 'Normal item to B',
|
|
scenarioId: 'normal_flow',
|
|
preferredAction: 'step',
|
|
focusArea: 'classification',
|
|
explanation: 'A regular box passes dimensions and roundness checks, so it stays on the main sorter path.',
|
|
whatToWatch: 'Decision tree PASS/PASS and ROUTE_TO_B command in the scene and event log.',
|
|
juryValue: 'Proves the happy path and shows category correctness for standard goods.',
|
|
relatedCriteria: ['category-correctness', 'classification-rules', 'physical-routing'],
|
|
presenterPhrase: 'For a normal SKU, dimensions pass and circular section is not detected, so the gate opens to B.',
|
|
},
|
|
{
|
|
id: 'oversized-to-c',
|
|
title: 'Oversized item to C',
|
|
scenarioId: 'oversized_item',
|
|
preferredAction: 'step',
|
|
focusArea: 'classification',
|
|
explanation: 'Oversized goods fail the first rule and are routed to roll-cage C before shape is considered.',
|
|
whatToWatch: 'Dimensions FAIL, category C, pusher C and route arrow to the lower roll-cage.',
|
|
juryValue: 'Shows rule priority and safe diversion for non-compliant dimensions.',
|
|
relatedCriteria: ['classification-rules', 'boundary-cases', 'manipulation-logic'],
|
|
presenterPhrase: 'C has priority because geometry safety is checked before shape: this item cannot continue on the main sorter.',
|
|
},
|
|
{
|
|
id: 'round-object-to-d',
|
|
title: 'Round object to D',
|
|
scenarioId: 'round_object',
|
|
preferredAction: 'step',
|
|
focusArea: 'scene',
|
|
explanation: 'Roundness K > 0.8 after valid dimensions sends the item to D for repack/shape issue handling.',
|
|
whatToWatch: 'Roundness FAIL for B, category D and the upper route/pusher D command.',
|
|
juryValue: 'Shows how the circle-section rule becomes a physical route.',
|
|
relatedCriteria: ['classification-rules', 'geometry-variety', 'physical-routing'],
|
|
presenterPhrase: 'The dimensions fit, but roundness is high, so the system sends it to D for do-upakovka.',
|
|
},
|
|
{
|
|
id: 'c-priority-oversized-round',
|
|
title: 'C priority oversized + round',
|
|
scenarioId: 'c_priority',
|
|
preferredAction: 'step',
|
|
focusArea: 'classification',
|
|
explanation: 'Item is both oversized and round; dimensions are checked first so category is C, not D.',
|
|
whatToWatch: 'DIM FAIL, K high, category C, ROUTE_TO_C active, route D inactive.',
|
|
juryValue: 'Proves C-priority rule for Track 3.',
|
|
relatedCriteria: ['classification-rules', 'boundary-cases', 'physical-routing'],
|
|
presenterPhrase: 'Even though the item is round, dimensions fail first, so we route only to C.',
|
|
},
|
|
{
|
|
id: 'boundary-dimensions',
|
|
title: 'Boundary dimensions',
|
|
scenarioId: 'boundary_dimensions',
|
|
|
|
preferredAction: 'step',
|
|
focusArea: 'classification',
|
|
explanation: 'Items at the edge of the allowed envelope prove the rule implementation is stable.',
|
|
whatToWatch: '450 x 320 x 320 passes, while width 9 mm fails min width and goes to C.',
|
|
juryValue: 'Shows deterministic boundary behavior rather than visual guessing.',
|
|
relatedCriteria: ['boundary-cases', 'category-correctness', 'reproducibility-docs'],
|
|
presenterPhrase: 'The exact boundary is accepted, but one millimeter below minimum width is rejected.',
|
|
},
|
|
{
|
|
id: 'low-confidence-fallback',
|
|
title: 'Low confidence fallback',
|
|
scenarioId: 'low_confidence',
|
|
preferredAction: 'step',
|
|
focusArea: 'eventLog',
|
|
explanation: 'Low pseudo-CV confidence raises a warning but does not block rule-based classification.',
|
|
whatToWatch: 'Warning message, fallback note and final category in classification/event log.',
|
|
juryValue: 'Shows graceful degradation when CV is uncertain.',
|
|
relatedCriteria: ['cv-actuator-integration', 'fault-handling', 'classification-rules'],
|
|
presenterPhrase: 'CV confidence is low, so we flag it, but dimensions and roundness still produce a deterministic decision.',
|
|
},
|
|
{
|
|
id: 'close-items-queue',
|
|
title: 'Close items queue',
|
|
scenarioId: 'close_items',
|
|
preferredAction: 'start',
|
|
focusArea: 'timeline',
|
|
explanation: 'Close spacing creates a queue warning and items are still processed one cycle at a time.',
|
|
whatToWatch: 'Queue length, queue delay, spacing warning and sequential timeline.',
|
|
juryValue: 'Shows robustness for a common operational issue without overcomplicated physics.',
|
|
relatedCriteria: ['timing-synchronization', 'cycle-time-throughput', 'fault-handling'],
|
|
presenterPhrase: 'The line detects close spacing, holds the queue and keeps the state machine deterministic.',
|
|
},
|
|
{
|
|
id: 'jam-fault-handling',
|
|
title: 'Jam / fault handling',
|
|
scenarioId: 'jam',
|
|
preferredAction: 'step',
|
|
focusArea: 'safety',
|
|
explanation: 'A jam at the stop-gate moves the system to FAULT and stops the conveyor.',
|
|
whatToWatch: 'FAULT state, red scene overlay, PID target 0 and Reset required.',
|
|
juryValue: 'Shows fail-safe behavior and operator recovery path.',
|
|
relatedCriteria: ['fault-handling', 'safety-emergency', 'pid-synchronization'],
|
|
presenterPhrase: 'When the gate jams, the safest command is to stop motion and require reset.',
|
|
},
|
|
{
|
|
id: 'emergency-stop',
|
|
title: 'Emergency stop',
|
|
scenarioId: 'emergency_stop',
|
|
preferredAction: 'step',
|
|
focusArea: 'safety',
|
|
explanation: 'Emergency stop interrupts the line and brings motion toward zero.',
|
|
whatToWatch: 'EMERGENCY_STOP state, stopped conveyor and PID speed falling to zero.',
|
|
juryValue: 'Shows explicit safety handling for abnormal operation.',
|
|
relatedCriteria: ['safety-emergency', 'fault-handling', 'engineering-realism'],
|
|
presenterPhrase: 'Emergency stop is not another route; it is a safety state that freezes the line until reset.',
|
|
},
|
|
{
|
|
id: 'performance-sync',
|
|
title: 'Performance and synchronization',
|
|
scenarioId: 'normal_flow',
|
|
preferredAction: 'start',
|
|
focusArea: 'pid',
|
|
explanation: 'Timeline, latency cards and PID graph show how the simulated control loop stays synchronized.',
|
|
whatToWatch: 'CycleTimeline, CV latency, actuator latency, throughput and PID speed curve.',
|
|
juryValue: 'Shows that the demo explains timing and throughput, not only classification.',
|
|
relatedCriteria: ['cycle-time-throughput', 'timing-synchronization', 'engineering-realism'],
|
|
presenterPhrase: 'Here we close the loop: decisions are timestamped, actuators have latency and conveyor control is visible.',
|
|
},
|
|
];
|