@almadar/std 16.253.0 → 16.255.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/behaviors/lolo/agent/atoms/std-agent-pool.lolo +355 -0
- package/behaviors/lolo/agent/evals/eval-agent-builder.lolo +159 -0
- package/behaviors/lolo/agent/organisms/std-agent-builder.lolo +321 -26
- package/behaviors/lolo-behavior-contracts.json +1 -1
- package/behaviors/registry/agent/atoms/std-agent-context.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-memory.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-planner.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-pool.orb +1 -0
- package/behaviors/registry/agent/atoms/std-agent-proposal.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-session.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-suggestions.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-tool-call.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-tool-loop.orb +1 -1
- package/behaviors/registry/agent/atoms/std-agent-trace.orb +1 -1
- package/behaviors/registry/agent/evals/eval-agent-builder.orb +1 -0
- package/behaviors/registry/agent/organisms/std-agent-assistant.orb +1 -1
- package/behaviors/registry/agent/organisms/std-agent-builder.orb +1 -1
- package/behaviors/registry/infra/atoms/std-analytics.orb +1 -1
- package/behaviors/registry/infra/atoms/std-approval-gate.orb +1 -1
- package/behaviors/registry/infra/atoms/std-audit-capture.orb +1 -1
- package/behaviors/registry/infra/atoms/std-cache-aside.orb +1 -1
- package/behaviors/registry/infra/atoms/std-calendar-sync.orb +1 -1
- package/behaviors/registry/infra/atoms/std-cascade-on-delete.orb +1 -1
- package/behaviors/registry/infra/atoms/std-circuit-breaker.orb +1 -1
- package/behaviors/registry/infra/atoms/std-cross-reference.orb +1 -1
- package/behaviors/registry/infra/atoms/std-data-erasure.orb +1 -1
- package/behaviors/registry/infra/atoms/std-data-import.orb +1 -1
- package/behaviors/registry/infra/atoms/std-global-search.orb +1 -1
- package/behaviors/registry/infra/atoms/std-knowledge-loop.orb +1 -1
- package/behaviors/registry/infra/atoms/std-lifecycle.orb +1 -1
- package/behaviors/registry/infra/atoms/std-migration-job.orb +1 -1
- package/behaviors/registry/infra/atoms/std-mod-queue.orb +1 -1
- package/behaviors/registry/infra/atoms/std-notification-center.orb +1 -1
- package/behaviors/registry/infra/atoms/std-notification-preferences.orb +1 -1
- package/behaviors/registry/infra/atoms/std-notify-on-event.orb +1 -1
- package/behaviors/registry/infra/atoms/std-page-search.orb +1 -1
- package/behaviors/registry/infra/atoms/std-page-watch.orb +1 -1
- package/behaviors/registry/infra/atoms/std-permission-matrix.orb +1 -1
- package/behaviors/registry/infra/atoms/std-rate-limiter.orb +1 -1
- package/behaviors/registry/infra/atoms/std-reminder-scheduler.orb +1 -1
- package/behaviors/registry/infra/atoms/std-review-cycle.orb +1 -1
- package/behaviors/registry/infra/atoms/std-row-access-control.orb +1 -1
- package/behaviors/registry/infra/atoms/std-status-lifecycle.orb +1 -1
- package/behaviors/registry/infra/organisms/std-status-lifecycle-control.orb +1 -1
- package/behaviors/registry/ml/atoms/std-data-collector.orb +1 -1
- package/behaviors/registry/ml/atoms/std-graph-builder.orb +1 -1
- package/behaviors/registry/ml/atoms/std-ml-classify.orb +1 -1
- package/behaviors/registry/ml/atoms/std-ml-exact-check.orb +1 -1
- package/behaviors/registry/ml/atoms/std-ml-infer.orb +1 -1
- package/behaviors/registry/ml/atoms/std-ml-label-capture.orb +1 -1
- package/behaviors/registry/ml/atoms/std-ml-lookup.orb +1 -1
- package/behaviors/registry/ml/atoms/std-ml-posterior.orb +1 -1
- package/behaviors/registry/ml/atoms/std-ml-similarity.orb +1 -1
- package/behaviors/registry/ml/atoms/std-tokenizer.orb +1 -1
- package/behaviors/registry/ml/atoms/std-weight-validator.orb +1 -1
- package/behaviors/registry/ml/organisms/std-escalating-decision.orb +1 -1
- package/behaviors/registry/ml/organisms/std-knowledge-tracing.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/std-avl-cosmic-zoom.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/ui-avl-glyph.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/ui-avl-state-machine.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/ui-avl-transition-detail.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/ui-avl-transition-explainer.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/ui-behavior-view.orb +1 -1
- package/behaviors/registry/ui/avl/atoms/ui-module-card.orb +1 -1
- package/behaviors/registry/ui/avl/organisms/ui-flow-canvas.orb +1 -1
- package/behaviors/registry/ui/avl/organisms/ui-layers-panel.orb +1 -1
- package/behaviors/registry/ui/avl/organisms/ui-orb-inspector.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-app-layout.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-app-search.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-behavior-catalog.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-behavior-tour.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-billable-hour.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-board.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-book-reader.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-browse.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-calendar.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-card-grid.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-confirmation.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-dashboard-grid-embedded.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-date-range.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-doc-page.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-esign-flow.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-esign-request.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-event-log.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-export.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-file-store.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-filter.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-form-advanced.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-gallery.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-gantt-schedule.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-geosearch.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-graphs.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-hero.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-home.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-image-upload-multi.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-import.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-language-picker.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-media-section.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-modal-editor.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-modal.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-multi-party-flow.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-notification-panel.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-panel-launcher.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-pricing.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-proof.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-prose.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-rating-review.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-record-detail.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-recurrence.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-related.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-role-gate.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-saved-search.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-scatter.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-scoped-list.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-search.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-selection.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-site-footer.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-site-header.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-slide-deck.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-stat-band.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-stats.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-step-flow.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-steps.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-tabs.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-tag-strip.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-tag-taxonomy.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-thread.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-tree.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-version-history.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-wizard.orb +1 -1
- package/behaviors/registry/ui/core/atoms/std-workspace-layout.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-animated-graphic.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-animated-reveal.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-aside.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-atlas-image.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-atlas-panel.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-avatar.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-badge.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-box.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-button.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-card.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-center.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-checkbox.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-conditional-wrapper.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-confetti-effect.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-day-cell.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-dialog.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-divider.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-filter-pill.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-flip-container.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-game-icon.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-hstack.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-icon.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-image.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-infinite-scroll-sentinel.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-input.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-label.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-law-reference-tooltip.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-overlay.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-pattern-tile.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-presence.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-progress-bar.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-radio.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-range-slider.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-section-header.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-select.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-spacer.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-sparkline.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-spinner.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-stack.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-status-dot.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-branch.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-connection.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-flow.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-grid.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-lobe.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-mesh.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-morph.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-node.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-pulse.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-ring.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-shield.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-svg-stack.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-switch.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-text-highlight.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-textarea.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-theme-toggle.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-time-slot-cell.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-trend-indicator.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-typewriter-text.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-typography.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-video-embed.orb +1 -1
- package/behaviors/registry/ui/core/atoms/ui-vstack.orb +1 -1
- package/behaviors/registry/ui/core/molecules/std-stat-rows.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-accordion.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-activation-block.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-activity-rail.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-agent-activity-feed.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-agent-activity-row.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-agent-chat-feed.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-alert.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-animated-counter.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-bloom-quiz-block.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-branching-logic-builder.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-breadcrumb.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-calendar-grid.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-carousel.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-change-list.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-chart-legend.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-chart.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-code-block.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-command-palette.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-commit-row.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-confirm-dialog.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-connection-block.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-container.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-content-renderer.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-data-grid.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-data-list.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-date-range-picker.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-date-range-selector.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-doc-breadcrumb.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-doc-pagination.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-doc-search.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-doc-sidebar.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-doc-toc.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-document-details.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-document-panel.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-document-viewer.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-drawer.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-edge-decoration.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-emoji-picker.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-empty-state.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-error-boundary.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-error-state.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-feature-card.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-feature-grid.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-file-tree.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-filter-group.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-flex.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-flip-card.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-floating-action-button.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-floating-toolbar.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-form-actions.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-form-field.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-form-layout.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-form-section-header.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-fx-overlay.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-gantt.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-geometric-pattern.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-gradient-divider.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-graph-canvas.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-graph-view.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-grid.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-header.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-icon-button.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-import-preview-tree.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-import-progress.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-import-source-picker.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-input-group.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-jazari-state-machine.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-lightbox.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-likert-scale.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-line-chart.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-loading-state.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-map-view.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-markdown-content.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-matrix-question.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-menu.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-meter.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-modal.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-navigation.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-notification.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-number-stepper.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-option-constraint-group.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-orbital-visualization.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-page-header.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-page-transition.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-pagination.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-popover.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-positioned-canvas.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-progress-dots.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-pull-to-refresh.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-qr-scanner.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-quiz-block.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-reflection-block.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-relation-select.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-repeatable-form-section.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-reply-tree.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-rich-text-editor.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-scaled-diagram.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-search-input.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-section.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-side-panel.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-sidebar.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-signature-pad.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-simple-grid.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-skeleton.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-social-proof.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-sortable-list.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-split.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-star-rating.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-stat-display.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-swipeable-row.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-table-view.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-tabs.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-tag-input.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-tooltip.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-top-nav-item.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-upload-drop-zone.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-version-diff.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-violation-alert.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-vote-stack.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-wizard-container.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-wizard-navigation.orb +1 -1
- package/behaviors/registry/ui/core/molecules/ui-wizard-progress.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-chat-bar.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-code-runner-panel.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-dashboard-grid.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-detail-panel.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-dock-layout.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-drawer-slot.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-form-section.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-form.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-master-detail-layout.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-media-gallery.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-modal-slot.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-runtime-debugger.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-segment-renderer.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-split-pane.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-stat-card.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-state-machine-view.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-subagent-trace-panel.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-tabbed-container.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-timeline.orb +1 -1
- package/behaviors/registry/ui/core/organisms/ui-toast-slot.orb +1 -1
- package/behaviors/registry/ui/core/templates/ui-auth-layout.orb +1 -1
- package/behaviors/registry/ui/core/templates/ui-counter-template.orb +1 -1
- package/behaviors/registry/ui/core/templates/ui-dashboard-layout.orb +1 -1
- package/behaviors/registry/ui/core/templates/ui-generic-app-template.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-arcade-play.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-area-fill.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-audio-cue.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-camera-rig.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-chase-ai.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-choice-gate.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-coef-pad.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-curve-fog.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-dungeon-combat.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-fx-narrative.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-fx-particles.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-fx-trail.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-gate-lock.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-gather.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-gold.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-grid-tactics.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-hero-nav.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-lives.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-loop-lock.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-motion-body.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-objective-reach.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-pad-lock.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-patience.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-patrol-hazard.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-pickup.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-platformer-body.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-production.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-score.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-tutorial-autodemo.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-tutorial-overlay.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-velocity-gate.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-xp.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-zone-card.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-action-palette.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-action-tile.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-canvas-2d.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-canvas.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-choice-button.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-control-button.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-control-grid.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-dialogue-bubble.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-fx-layer.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-group.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-mesh.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-shape-layer.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-shape.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-skinned-mesh.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-sprite-layer.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-sprite.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-text-layer.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-text.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-game-audio-cue.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-game-audio-toggle.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-game-hud.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-game-menu.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-health-bar.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-score-display.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-sequence-bar.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-stat-badge.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-state-graph.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-state-json-view.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-timer-display.orb +1 -1
- package/behaviors/registry/ui/game/atoms/ui-trait-slot.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-arcade-board-3d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-crew-board-2d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-dungeon-board-2d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-market-board-3d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-objective-board-3d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-platformer-board-2d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-platformer-puzzle.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-survival-board-3d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-tactics-board-2d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-tactics-board-3d.orb +1 -1
- package/behaviors/registry/ui/game/organisms/std-worldmap-board-2d.orb +1 -1
- package/behaviors/registry/ui/game/templates/ui-game-shell.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-arrangement.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-classify.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-compare.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-coupled-sim.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-derivation.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-diagram.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-doser.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-estimate.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-fx-cues.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-generate.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-goal-seek.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-grid-sim.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-hotspot.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-live-sim.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-measure.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-param-explorer.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-perturb.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-predict.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-sample-accumulator.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-sandbox.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-scatter-fit.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-scenario.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-sim-3d.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-slope-probe.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-speed-drill.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-stepper.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-tour-3d.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-trace-player.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-transport.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/std-learn-tree.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/ui-algo-graph-canvas.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/ui-algorithm-canvas.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/ui-biology-canvas.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/ui-chemistry-canvas.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/ui-learning-canvas.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/ui-math-canvas.orb +1 -1
- package/behaviors/registry/ui/learning/atoms/ui-physics-canvas.orb +1 -1
- package/dist/behaviors-embeddings.hash.json +2 -2
- package/dist/behaviors-embeddings.json +1 -1
- package/dist/knob-embeddings.hash.json +2 -2
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"std-learn-classify","version":"1.0.0","description":"Generic classify-with-feedback instrument — items are presented one at a time on a current-item card (with an optional config-declared hint), the learner picks a category from an ordered stacked-backdrop ladder (the picked rung rings, the correct rung glows green, a wrong pick glows red), an explicit verdict beat shows a correct/incorrect badge plus a config-declared explanation, a progress readout tracks item k of n and a running score, and after the last item the learner reaches an end-of-round summary with a per-category breakdown and a Retry affordance. Category and item vocabulary is entirely config-declared, so the same mechanism serves any classification domain (needs hierarchies, checks-and-balances, sociological imagination, and beyond) on a biology-canvas. Standalone by default; behind a lab router set matchMode and it renders only when MODE_SELECTED matches.","orbitals":[{"name":"LearnClassifyOrbital","id":"orb_RBQ15CH017G0KJ56SC9833D5ZQ","entity":{"name":"LearnClassifyScene","id":"ent_Y0EY6S7B24NH20YRD5BY1HQGAS","persistence":"runtime","fields":[{"name":"id","type":"string","required":true},{"name":"active","type":"boolean","default":false},{"name":"items","type":"array","items":{"type":"object","properties":{"hint":{"name":"hint","type":"string","required":false},"options":{"name":"options","type":"array","required":false,"items":{"type":"object","properties":{"category":{"name":"category","type":"string","required":true},"label":{"name":"label","type":"string","required":true}}}},"category":{"name":"category","type":"string","required":true},"explanation":{"name":"explanation","type":"string","required":false},"text":{"name":"text","type":"string","required":true}}}},{"name":"categories","type":"array","items":{"type":"object","properties":{"value":{"name":"value","type":"string","required":true},"color":{"name":"color","type":"string","required":true},"label":{"name":"label","type":"string","required":true}}}},{"name":"title","type":"string"},{"name":"itemIndex","type":"number"},{"name":"itemText","type":"string"},{"name":"itemHint","type":"string"},{"name":"itemExplanation","type":"string"},{"name":"correctCategory","type":"string"},{"name":"selectedCategory","type":"string"},{"name":"feedback","type":"string"},{"name":"verdict","type":"string"},{"name":"correctCount","type":"number"},{"name":"attemptedCount","type":"number"},{"name":"totalItems","type":"number"},{"name":"roundComplete","type":"boolean","default":false},{"name":"running","type":"boolean","default":false},{"name":"elapsedMs","type":"number","default":0},{"name":"score","type":"number","default":0},{"name":"categoryStats","type":"array","items":{"type":"object","properties":{"category":{"name":"category","type":"string","required":true},"correct":{"name":"correct","type":"number","required":true},"label":{"name":"label","type":"string","required":true},"attempted":{"name":"attempted","type":"number","required":true}}}},{"name":"backdropShapes","type":"array","items":{"type":"object","properties":{"radius":{"name":"radius","type":"number","required":false},"type":{"name":"type","type":"string","required":true,"values":["line","arrow","circle","rect","polygon","path","text","axis","grid"]},"textSize":{"name":"textSize","type":"string","required":false},"path":{"name":"path","type":"string","required":false},"y2":{"name":"y2","type":"number","required":false},"y1":{"name":"y1","type":"number","required":false},"axis":{"name":"axis","type":"string","required":false,"values":["x","y"]},"lineWidth":{"name":"lineWidth","type":"number","required":false},"fillTone":{"name":"fillTone","type":"string","required":false},"x":{"name":"x","type":"number","required":false},"stroke":{"name":"stroke","type":"string","required":false},"max":{"name":"max","type":"number","required":false},"opacity":{"name":"opacity","type":"number","required":false},"fontSize":{"name":"fontSize","type":"number","required":false},"y":{"name":"y","type":"number","required":false},"points":{"name":"points","type":"array","required":false,"items":{"type":"object","properties":{"x":{"name":"x","type":"number","required":true},"y":{"name":"y","type":"number","required":true}}}},"step":{"name":"step","type":"number","required":false},"id":{"name":"id","type":"string","required":false},"min":{"name":"min","type":"number","required":false},"fillStyle":{"name":"fillStyle","type":"string","required":false},"x2":{"name":"x2","type":"number","required":false},"tone":{"name":"tone","type":"string","required":false},"color":{"name":"color","type":"string","required":false},"label":{"name":"label","type":"string","required":false},"width":{"name":"width","type":"number","required":false},"x1":{"name":"x1","type":"number","required":false},"text":{"name":"text","type":"string","required":false},"fill":{"name":"fill","type":"string","required":false},"align":{"name":"align","type":"string","required":false,"values":["left","center","right"]},"height":{"name":"height","type":"number","required":false}}}},{"name":"roundView","type":"array","items":{"type":"node"}}]},"traits":[{"name":"LearnClassifySim","id":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8","entityRebindable":true,"entityContract":{"requires":[],"provides":["active","attemptedCount","backdropShapes","categories","categoryStats","correctCategory","correctCount","elapsedMs","feedback","itemExplanation","itemHint","itemIndex","itemText","items","roundComplete","roundView","running","score","selectedCategory","title","totalItems","verdict"]},"effectRow":[{"kind":"emit","resource":"ADVANCE","site":"tick"},{"kind":"emit","resource":"CLASSIFY_UPDATED"},{"kind":"emit","resource":"LEARN_ROUND_COMPLETE"},{"kind":"render-ui","resource":"main"},{"kind":"set","resource":"@entity.active"},{"kind":"set","resource":"@entity.attemptedCount"},{"kind":"set","resource":"@entity.backdropShapes"},{"kind":"set","resource":"@entity.categories"},{"kind":"set","resource":"@entity.categoryStats"},{"kind":"set","resource":"@entity.correctCategory"},{"kind":"set","resource":"@entity.correctCount"},{"kind":"set","resource":"@entity.elapsedMs"},{"kind":"set","resource":"@entity.elapsedMs","site":"tick"},{"kind":"set","resource":"@entity.feedback"},{"kind":"set","resource":"@entity.itemExplanation"},{"kind":"set","resource":"@entity.itemHint"},{"kind":"set","resource":"@entity.itemIndex"},{"kind":"set","resource":"@entity.itemText"},{"kind":"set","resource":"@entity.items"},{"kind":"set","resource":"@entity.roundComplete"},{"kind":"set","resource":"@entity.roundView"},{"kind":"set","resource":"@entity.running"},{"kind":"set","resource":"@entity.score"},{"kind":"set","resource":"@entity.selectedCategory"},{"kind":"set","resource":"@entity.title"},{"kind":"set","resource":"@entity.totalItems"},{"kind":"set","resource":"@entity.verdict"},{"kind":"ticks","site":"tick"}],"category":"interaction","linkedEntity":"LearnClassifyScene","linkedEntityId":"ent_Y0EY6S7B24NH20YRD5BY1HQGAS","entityRefIds":{"LearnClassifyScene":"ent_Y0EY6S7B24NH20YRD5BY1HQGAS"},"emits":[{"event":"CLASSIFY_UPDATED","eventId":"evt_FTAH4MGWW3EE1VV83EY7CJZRRZ","description":"The classification state after each learner action — a composed listener (readout, grader) can subscribe; a harmless no-op when the atom runs standalone.","synonyms":"classify update, pick result, score, running score, verdict","tier":"domain","scope":"external","payloadSchema":[{"name":"itemIndex","type":"number"},{"name":"correctCount","type":"number"},{"name":"attemptedCount","type":"number"},{"name":"selectedCategory","type":"string"},{"name":"verdict","type":"string"},{"name":"roundComplete","type":"boolean"}]},{"event":"LEARN_ROUND_COMPLETE","eventId":"evt_JX9D9BSBPQNVBG1CG6HVD2FD5H","description":"Fired once when the round finishes (the advance past the final item) — the standard learning completion broadcast a celebration/progression sibling (fx cues, badges) rides.","synonyms":"round complete, finished, done, completion","tier":"domain","scope":"external","payloadSchema":[{"name":"score","type":"number"},{"name":"total","type":"number"}]}],"stateMachine":{"states":[{"name":"idle","isInitial":true}],"events":[{"key":"INIT","id":"evt_3WCT8HD6K0K9GF691M6DNYGPH2","name":"Initialize"},{"key":"MODE_SELECTED","id":"evt_SB6ERFS6HZK8ZMG0YMMJQQRQ95","name":"Mode Selected","description":"Lab router broadcast naming the active mode; this instrument renders when the mode equals matchMode, otherwise renders null.","tier":"domain","payloadSchema":[{"name":"mode","type":"string"}],"listened":true},{"key":"ROSTER_LOADED","id":"evt_R2NCYM9KCTSPDFRRFRWPFDHQBN","name":"Roster Loaded","description":"Runtime content feed, honoured only when rosterSource is event — mode names the instrument it is for (the matchMode it carries, blank when standalone), items is the roster to classify and categories the category buckets; a matching instrument re-initialises from them exactly as INIT does from config, any other instrument hides.","tier":"domain","payloadSchema":[{"name":"mode","type":"string","required":true},{"name":"items","type":"[object]","required":true,"properties":[{"name":"text","type":"string","required":true},{"name":"category","type":"string","required":true},{"name":"hint","type":"string"},{"name":"explanation","type":"string"},{"name":"options","type":"[object]","properties":[{"name":"category","type":"string","required":true},{"name":"label","type":"string","required":true}]}]},{"name":"categories","type":"[object]","required":true,"properties":[{"name":"value","type":"string","required":true},{"name":"label","type":"string","required":true},{"name":"color","type":"string","required":true}]}],"listened":true},{"key":"PICK","id":"evt_9MXFB29J3NS1TWYQD9YPVQ1TNC","name":"Pick","description":"Learner picked a category for the current item; verdicted against the item's declared correct category.","tier":"domain","payloadSchema":[{"name":"category","type":"string"}],"listened":true},{"key":"ADVANCE","id":"evt_KG3DKRRQJYBSF0XKJ1MY3WV2YJ","name":"Advance","description":"Learner advanced to the next item, clearing the pick and feedback for the new item; on the last item this instead ends the round and reveals the summary.","tier":"domain","listened":true},{"key":"RETRY","id":"evt_6E91HTP1DJ0PS281JABJX4VCXX","name":"Retry","description":"Learner restarted the round from the summary screen — score, per-category breakdown, and item cursor reset to the beginning.","tier":"domain","listened":true},{"key":"TOGGLE_RUN","id":"evt_CD3SWSP2A5152KXMZ9RMBQTDTP","name":"Toggle Run","description":"Learner toggled auto-advance: while running, the advance clock steps to the next item every advanceMs milliseconds.","tier":"domain","listened":true},{"key":"CLASSIFY_UPDATED","id":"evt_FTAH4MGWW3EE1VV83EY7CJZRRZ","name":"Classify Updated","description":"The classification state after each learner action — a composed listener (readout, grader) can subscribe; a harmless no-op when the atom runs standalone.","synonyms":"classify update, pick result, score, running score, verdict","tier":"domain","payloadSchema":[{"name":"itemIndex","type":"number"},{"name":"correctCount","type":"number"},{"name":"attemptedCount","type":"number"},{"name":"selectedCategory","type":"string"},{"name":"verdict","type":"string"},{"name":"roundComplete","type":"boolean"}]},{"key":"LEARN_ROUND_COMPLETE","id":"evt_JX9D9BSBPQNVBG1CG6HVD2FD5H","name":"Learn Round Complete","description":"Fired once when the round finishes (the advance past the final item) — the standard learning completion broadcast a celebration/progression sibling (fx cues, badges) rides.","synonyms":"round complete, finished, done, completion","tier":"domain","payloadSchema":[{"name":"score","type":"number"},{"name":"total","type":"number"}]}],"transitions":[{"from":"idle","to":"idle","event":"INIT","eventId":"evt_3WCT8HD6K0K9GF691M6DNYGPH2","guard":["and",["==","@config.matchMode",""],["==","@config.rosterSource","config"]],"effects":[["set","@entity.items","@config.items"],["set","@entity.categories","@config.categories"],["set","@entity.active",true],["set","@entity.title","@config.title"],["set","@entity.itemIndex",0],["set","@entity.correctCount",0],["set","@entity.attemptedCount",0],["set","@entity.selectedCategory",""],["set","@entity.feedback",""],["set","@entity.verdict",""],["set","@entity.roundComplete",false],["set","@entity.running","@config.autoRun"],["set","@entity.elapsedMs",0],["set","@entity.score",0],["set","@entity.totalItems",["array/len","@entity.items"]],["set","@entity.categoryStats",["array/map","@entity.categories",["fn","c",{"category":["object/get","@c","value"],"label":["object/get","@c","label"],"attempted":0,"correct":0}]]],["let",[["item",["array/nth","@entity.items",0]]],["do",["set","@entity.itemText",["object/get","@item","text"]],["set","@entity.itemHint",["object/get","@item","hint",""]],["set","@entity.itemExplanation",["object/get","@item","explanation",""]],["set","@entity.correctCategory",["object/get","@item","category"]]]],["let",[["categoryCount",["array/len","@entity.categories"]],["marginX",30],["marginY",20],["plotWidth",["-","@config.width",["*","@marginX",2]]],["plotHeight",["-","@config.height",["*","@marginY",2]]],["plotBottom",["-","@config.height","@marginY"]],["tierHeight",["/","@plotHeight","@categoryCount"]],["maxWidth",["*","@plotWidth",0.95]],["minWidth",["-","@maxWidth",["*","@config.taper",["-","@maxWidth",["*","@plotWidth",0.3]]]]],["widthStep",["/",["-","@maxWidth","@minWidth"],["math/max",1,["-","@categoryCount",1]]]],["centerX",["/","@config.width",2]],["revealed",["!=","@entity.selectedCategory",""]],["rects",["array/flatten",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["categoryValue",["object/get","@category","value"]],["w",["-","@maxWidth",["*","@i","@widthStep"]]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]],["x",["-","@centerX",["/","@w",2]]],["isCorrectCategory",["==","@categoryValue","@entity.correctCategory"]],["isSelectedCategory",["==","@categoryValue","@entity.selectedCategory"]],["fillColor",["if",["and","@revealed","@isCorrectCategory"],"@config.correctColor",["if",["and","@revealed","@isSelectedCategory"],"@config.incorrectColor",["object/get","@category","color"]]]],["baseRect",{"type":"rect","id":["str/concat","category-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"@fillColor","fillTone":"@fillColor","fillStyle":"tint"}]],["if",["and","@revealed","@isSelectedCategory"],["@baseRect",{"type":"rect","id":["str/concat","category-pick-ring-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"ink","fillStyle":"outline","stroke":"bold","opacity":1}],["@baseRect"]]]]]]],["labels",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]]],{"type":"text","id":["str/concat","category-label-","@i"],"x":"@centerX","y":["+","@yTop",["/","@tierHeight",2],5],"text":["object/get","@category","label"],"textSize":"sm","align":"center","tone":"label"}]]]],["backdropShapes",["array/concat","@rects","@labels"]],["summaryView",[{"type":"typography","variant":"h4","content":"Round Complete"},{"type":"stat-display","label":"Final Score","value":"@entity.correctCount","max":"@entity.attemptedCount"},{"type":"stack","direction":"vertical","gap":"xs","children":["array/map","@entity.categoryStats",["fn","s",{"type":"typography","variant":"body","content":["str/concat",["object/get","@s","label"],": ",["str/concat","",["object/get","@s","correct"]],"/",["str/concat","",["object/get","@s","attempted"]]]}]]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"primary"}]],["itemView",[{"type":"card","variant":"bordered","padding":"md","children":["array/concat",[{"type":"typography","variant":"body","content":"@entity.itemText"}],["if",["and","@config.showHint",["!=","@entity.itemHint",""]],[{"type":"typography","variant":"caption","color":"muted","content":"@entity.itemHint"}],[]]]},{"type":"biology-canvas","width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","nodes":[],"edges":[],"shapes":"@backdropShapes","interactive":"@config.interactive","animate":"@config.animate","keyMap":{"Space":"TOGGLE_RUN","ArrowRight":"ADVANCE","KeyR":"RETRY"}},{"type":"stack","direction":"vertical","gap":"sm","children":["let",[["itemOptions",["object/get",["array/nth","@entity.items","@entity.itemIndex"],"options",[]]],["locked",["!=","@entity.selectedCategory",""]]],["if",[">",["array/len","@itemOptions"],0],["array/map","@itemOptions",["fn","o",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@o","category"]},"label":["object/get","@o","label"],"size":"lg","disabled":"@locked","variant":["if",["not","@locked"],"secondary",["if",["==",["object/get","@o","category"],"@entity.correctCategory"],"success",["if",["==",["object/get","@o","category"],"@entity.selectedCategory"],"danger","ghost"]]]}]],["array/map",["array/reverse","@entity.categories"],["fn","c",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@c","value"]},"label":["object/get","@c","label"],"size":"lg","disabled":"@locked","variant":["if",["not","@locked"],"secondary",["if",["==",["object/get","@c","value"],"@entity.correctCategory"],"success",["if",["==",["object/get","@c","value"],"@entity.selectedCategory"],"danger","ghost"]]]}]]]]},["if",["==","@entity.verdict",""],null,{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","error"],"label":["if",["==","@entity.verdict","correct"],"Correct","Incorrect"]},{"type":"typography","variant":"body","content":"@entity.feedback"}]}],{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"ADVANCE","label":"@config.advanceLabel","icon":"chevron-right","variant":"primary","disabled":["==","@entity.selectedCategory",""]},["if","@entity.running",{"type":"button","action":"TOGGLE_RUN","label":"Pause","icon":"pause","variant":"ghost","aria-pressed":"true"},{"type":"button","action":"TOGGLE_RUN","label":"Auto","icon":"play","variant":"ghost","aria-pressed":"false"}],["if",[">","@config.passScore",0],{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Pass at ","@config.passScore"]},null]]}]]],["do",["set","@entity.backdropShapes","@backdropShapes"],["set","@entity.roundView",["if","@entity.roundComplete","@summaryView","@itemView"]]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.roundComplete","Round complete",["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["str/concat","Score ","@entity.score"],["str/concat","@entity.correctCount"," / ","@entity.attemptedCount"," correct"]]],"variant":["if","@entity.roundComplete","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict","incorrect"],"error","neutral"]]]}]},{"type":"progress-bar","value":["+","@entity.itemIndex",1],"max":"@entity.totalItems","showPercentage":false,"label":["str/concat","Item ",["str/concat","",["+","@entity.itemIndex",1]]," of ",["str/concat","","@entity.totalItems"]]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.roundView"}]}]}]]},{"from":"idle","to":"idle","event":"MODE_SELECTED","eventId":"evt_SB6ERFS6HZK8ZMG0YMMJQQRQ95","guard":["and",["not",["==","@config.matchMode",""]],["not",["==","@payload.mode","@config.matchMode"]]],"effects":[["set","@entity.active",false],["set","@entity.running",false],["render-ui","main",null]]},{"from":"idle","to":"idle","event":"MODE_SELECTED","eventId":"evt_SB6ERFS6HZK8ZMG0YMMJQQRQ95","guard":["and",["==","@payload.mode","@config.matchMode"],["==","@config.rosterSource","config"]],"effects":[["set","@entity.items","@config.items"],["set","@entity.categories","@config.categories"],["set","@entity.active",true],["set","@entity.title","@config.title"],["set","@entity.itemIndex",0],["set","@entity.correctCount",0],["set","@entity.attemptedCount",0],["set","@entity.selectedCategory",""],["set","@entity.feedback",""],["set","@entity.verdict",""],["set","@entity.roundComplete",false],["set","@entity.running","@config.autoRun"],["set","@entity.elapsedMs",0],["set","@entity.score",0],["set","@entity.totalItems",["array/len","@entity.items"]],["set","@entity.categoryStats",["array/map","@entity.categories",["fn","c",{"category":["object/get","@c","value"],"label":["object/get","@c","label"],"attempted":0,"correct":0}]]],["let",[["item",["array/nth","@entity.items",0]]],["do",["set","@entity.itemText",["object/get","@item","text"]],["set","@entity.itemHint",["object/get","@item","hint",""]],["set","@entity.itemExplanation",["object/get","@item","explanation",""]],["set","@entity.correctCategory",["object/get","@item","category"]]]],["let",[["categoryCount",["array/len","@entity.categories"]],["marginX",30],["marginY",20],["plotWidth",["-","@config.width",["*","@marginX",2]]],["plotHeight",["-","@config.height",["*","@marginY",2]]],["plotBottom",["-","@config.height","@marginY"]],["tierHeight",["/","@plotHeight","@categoryCount"]],["maxWidth",["*","@plotWidth",0.95]],["minWidth",["-","@maxWidth",["*","@config.taper",["-","@maxWidth",["*","@plotWidth",0.3]]]]],["widthStep",["/",["-","@maxWidth","@minWidth"],["math/max",1,["-","@categoryCount",1]]]],["centerX",["/","@config.width",2]],["revealed",["!=","@entity.selectedCategory",""]],["rects",["array/flatten",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["categoryValue",["object/get","@category","value"]],["w",["-","@maxWidth",["*","@i","@widthStep"]]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]],["x",["-","@centerX",["/","@w",2]]],["isCorrectCategory",["==","@categoryValue","@entity.correctCategory"]],["isSelectedCategory",["==","@categoryValue","@entity.selectedCategory"]],["fillColor",["if",["and","@revealed","@isCorrectCategory"],"@config.correctColor",["if",["and","@revealed","@isSelectedCategory"],"@config.incorrectColor",["object/get","@category","color"]]]],["baseRect",{"type":"rect","id":["str/concat","category-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"@fillColor","fillTone":"@fillColor","fillStyle":"tint"}]],["if",["and","@revealed","@isSelectedCategory"],["@baseRect",{"type":"rect","id":["str/concat","category-pick-ring-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"ink","fillStyle":"outline","stroke":"bold","opacity":1}],["@baseRect"]]]]]]],["labels",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]]],{"type":"text","id":["str/concat","category-label-","@i"],"x":"@centerX","y":["+","@yTop",["/","@tierHeight",2],5],"text":["object/get","@category","label"],"textSize":"sm","align":"center","tone":"label"}]]]],["backdropShapes",["array/concat","@rects","@labels"]],["summaryView",[{"type":"typography","variant":"h4","content":"Round Complete"},{"type":"stat-display","label":"Final Score","value":"@entity.correctCount","max":"@entity.attemptedCount"},{"type":"stack","direction":"vertical","gap":"xs","children":["array/map","@entity.categoryStats",["fn","s",{"type":"typography","variant":"body","content":["str/concat",["object/get","@s","label"],": ",["str/concat","",["object/get","@s","correct"]],"/",["str/concat","",["object/get","@s","attempted"]]]}]]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"primary"}]],["itemView",[{"type":"card","variant":"bordered","padding":"md","children":["array/concat",[{"type":"typography","variant":"body","content":"@entity.itemText"}],["if",["and","@config.showHint",["!=","@entity.itemHint",""]],[{"type":"typography","variant":"caption","color":"muted","content":"@entity.itemHint"}],[]]]},{"type":"biology-canvas","width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","nodes":[],"edges":[],"shapes":"@backdropShapes","interactive":"@config.interactive","animate":"@config.animate","keyMap":{"Space":"TOGGLE_RUN","ArrowRight":"ADVANCE","KeyR":"RETRY"}},{"type":"stack","direction":"horizontal","gap":"xs","children":["let",[["itemOptions",["object/get",["array/nth","@entity.items","@entity.itemIndex"],"options",[]]]],["if",[">",["array/len","@itemOptions"],0],["array/map","@itemOptions",["fn","o",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@o","category"]},"label":["object/get","@o","label"],"variant":["if",["==","@entity.selectedCategory",["object/get","@o","category"]],"primary","secondary"],"size":"sm"}]],["array/map",["array/reverse","@entity.categories"],["fn","c",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@c","value"]},"label":["object/get","@c","label"],"variant":["if",["==","@entity.selectedCategory",["object/get","@c","value"]],"primary","secondary"],"size":"sm"}]]]]},{"type":"stack","direction":"horizontal","gap":"xs","children":["array/concat",["if",["!=","@entity.verdict",""],[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","danger"],"label":["if",["==","@entity.verdict","correct"],"Correct","Incorrect"]}],[]],[{"type":"typography","variant":"caption","content":"@entity.feedback"}]]},{"type":"stack","direction":"horizontal","gap":"sm","children":[{"type":"button","action":"ADVANCE","label":"@config.advanceLabel","variant":"primary","disabled":["if",["==","@entity.selectedCategory",""],true,false]},{"type":"button","action":"TOGGLE_RUN","label":["if","@entity.running","Pause","Auto"],"variant":"ghost"}]},{"type":"stat-display","label":["if",[">","@config.passScore",0],["str/concat","Score — pass at ","@config.passScore"],"Score"],"value":["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],"@entity.score","@entity.correctCount"],"max":["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["if",[">","@config.scoreCap",0],"@config.scoreCap",["*","@entity.totalItems","@config.pointsPerCorrect"]],"@entity.attemptedCount"]}]]],["do",["set","@entity.backdropShapes","@backdropShapes"],["set","@entity.roundView",["if","@entity.roundComplete","@summaryView","@itemView"]]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.roundComplete","Round complete",["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["str/concat","Score ","@entity.score"],["str/concat","@entity.correctCount"," / ","@entity.attemptedCount"," correct"]]],"variant":["if","@entity.roundComplete","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict","incorrect"],"error","neutral"]]]}]},{"type":"progress-bar","value":["+","@entity.itemIndex",1],"max":"@entity.totalItems","showPercentage":false,"label":["str/concat","Item ",["str/concat","",["+","@entity.itemIndex",1]]," of ",["str/concat","","@entity.totalItems"]]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.roundView"}]}]}]]},{"from":"idle","to":"idle","event":"ROSTER_LOADED","eventId":"evt_R2NCYM9KCTSPDFRRFRWPFDHQBN","guard":["and",["==","@config.rosterSource","event"],["and",["==","@payload.mode","@config.matchMode"],["and",[">",["array/len","@payload.items"],0],[">",["array/len","@payload.categories"],0]]]],"effects":[["set","@entity.items","@payload.items"],["set","@entity.categories","@payload.categories"],["set","@entity.active",true],["set","@entity.title","@config.title"],["set","@entity.itemIndex",0],["set","@entity.correctCount",0],["set","@entity.attemptedCount",0],["set","@entity.selectedCategory",""],["set","@entity.feedback",""],["set","@entity.verdict",""],["set","@entity.roundComplete",false],["set","@entity.running","@config.autoRun"],["set","@entity.elapsedMs",0],["set","@entity.score",0],["set","@entity.totalItems",["array/len","@entity.items"]],["set","@entity.categoryStats",["array/map","@entity.categories",["fn","c",{"category":["object/get","@c","value"],"label":["object/get","@c","label"],"attempted":0,"correct":0}]]],["let",[["item",["array/nth","@entity.items",0]]],["do",["set","@entity.itemText",["object/get","@item","text"]],["set","@entity.itemHint",["object/get","@item","hint",""]],["set","@entity.itemExplanation",["object/get","@item","explanation",""]],["set","@entity.correctCategory",["object/get","@item","category"]]]],["let",[["categoryCount",["array/len","@entity.categories"]],["marginX",30],["marginY",20],["plotWidth",["-","@config.width",["*","@marginX",2]]],["plotHeight",["-","@config.height",["*","@marginY",2]]],["plotBottom",["-","@config.height","@marginY"]],["tierHeight",["/","@plotHeight","@categoryCount"]],["maxWidth",["*","@plotWidth",0.95]],["minWidth",["-","@maxWidth",["*","@config.taper",["-","@maxWidth",["*","@plotWidth",0.3]]]]],["widthStep",["/",["-","@maxWidth","@minWidth"],["math/max",1,["-","@categoryCount",1]]]],["centerX",["/","@config.width",2]],["revealed",["!=","@entity.selectedCategory",""]],["rects",["array/flatten",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["categoryValue",["object/get","@category","value"]],["w",["-","@maxWidth",["*","@i","@widthStep"]]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]],["x",["-","@centerX",["/","@w",2]]],["isCorrectCategory",["==","@categoryValue","@entity.correctCategory"]],["isSelectedCategory",["==","@categoryValue","@entity.selectedCategory"]],["fillColor",["if",["and","@revealed","@isCorrectCategory"],"@config.correctColor",["if",["and","@revealed","@isSelectedCategory"],"@config.incorrectColor",["object/get","@category","color"]]]],["baseRect",{"type":"rect","id":["str/concat","category-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"@fillColor","fillTone":"@fillColor","fillStyle":"tint"}]],["if",["and","@revealed","@isSelectedCategory"],["@baseRect",{"type":"rect","id":["str/concat","category-pick-ring-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"ink","fillStyle":"outline","stroke":"bold","opacity":1}],["@baseRect"]]]]]]],["labels",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]]],{"type":"text","id":["str/concat","category-label-","@i"],"x":"@centerX","y":["+","@yTop",["/","@tierHeight",2],5],"text":["object/get","@category","label"],"textSize":"sm","align":"center","tone":"label"}]]]],["backdropShapes",["array/concat","@rects","@labels"]],["summaryView",[{"type":"typography","variant":"h4","content":"Round Complete"},{"type":"stat-display","label":"Final Score","value":"@entity.correctCount","max":"@entity.attemptedCount"},{"type":"stack","direction":"vertical","gap":"xs","children":["array/map","@entity.categoryStats",["fn","s",{"type":"typography","variant":"body","content":["str/concat",["object/get","@s","label"],": ",["str/concat","",["object/get","@s","correct"]],"/",["str/concat","",["object/get","@s","attempted"]]]}]]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"primary"}]],["itemView",[{"type":"card","variant":"bordered","padding":"md","children":["array/concat",[{"type":"typography","variant":"body","content":"@entity.itemText"}],["if",["and","@config.showHint",["!=","@entity.itemHint",""]],[{"type":"typography","variant":"caption","color":"muted","content":"@entity.itemHint"}],[]]]},{"type":"biology-canvas","width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","nodes":[],"edges":[],"shapes":"@backdropShapes","interactive":"@config.interactive","animate":"@config.animate","keyMap":{"Space":"TOGGLE_RUN","ArrowRight":"ADVANCE","KeyR":"RETRY"}},{"type":"stack","direction":"vertical","gap":"sm","children":["let",[["itemOptions",["object/get",["array/nth","@entity.items","@entity.itemIndex"],"options",[]]],["locked",["!=","@entity.selectedCategory",""]]],["if",[">",["array/len","@itemOptions"],0],["array/map","@itemOptions",["fn","o",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@o","category"]},"label":["object/get","@o","label"],"size":"lg","disabled":"@locked","variant":["if",["not","@locked"],"secondary",["if",["==",["object/get","@o","category"],"@entity.correctCategory"],"success",["if",["==",["object/get","@o","category"],"@entity.selectedCategory"],"danger","ghost"]]]}]],["array/map",["array/reverse","@entity.categories"],["fn","c",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@c","value"]},"label":["object/get","@c","label"],"size":"lg","disabled":"@locked","variant":["if",["not","@locked"],"secondary",["if",["==",["object/get","@c","value"],"@entity.correctCategory"],"success",["if",["==",["object/get","@c","value"],"@entity.selectedCategory"],"danger","ghost"]]]}]]]]},["if",["==","@entity.verdict",""],null,{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","error"],"label":["if",["==","@entity.verdict","correct"],"Correct","Incorrect"]},{"type":"typography","variant":"body","content":"@entity.feedback"}]}],{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"ADVANCE","label":"@config.advanceLabel","icon":"chevron-right","variant":"primary","disabled":["==","@entity.selectedCategory",""]},["if","@entity.running",{"type":"button","action":"TOGGLE_RUN","label":"Pause","icon":"pause","variant":"ghost","aria-pressed":"true"},{"type":"button","action":"TOGGLE_RUN","label":"Auto","icon":"play","variant":"ghost","aria-pressed":"false"}],["if",[">","@config.passScore",0],{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Pass at ","@config.passScore"]},null]]}]]],["do",["set","@entity.backdropShapes","@backdropShapes"],["set","@entity.roundView",["if","@entity.roundComplete","@summaryView","@itemView"]]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.roundComplete","Round complete",["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["str/concat","Score ","@entity.score"],["str/concat","@entity.correctCount"," / ","@entity.attemptedCount"," correct"]]],"variant":["if","@entity.roundComplete","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict","incorrect"],"error","neutral"]]]}]},{"type":"progress-bar","value":["+","@entity.itemIndex",1],"max":"@entity.totalItems","showPercentage":false,"label":["str/concat","Item ",["str/concat","",["+","@entity.itemIndex",1]]," of ",["str/concat","","@entity.totalItems"]]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.roundView"}]}]}]]},{"from":"idle","to":"idle","event":"ROSTER_LOADED","eventId":"evt_R2NCYM9KCTSPDFRRFRWPFDHQBN","guard":["and",["==","@config.rosterSource","event"],["not",["==","@payload.mode","@config.matchMode"]]],"effects":[["set","@entity.active",false],["set","@entity.running",false],["render-ui","main",null]]},{"from":"idle","to":"idle","event":"PICK","eventId":"evt_9MXFB29J3NS1TWYQD9YPVQ1TNC","guard":["and",["==","@entity.active",true],["==","@entity.roundComplete",false]],"effects":[["set","@entity.selectedCategory","@payload.category"],["let",[["isCorrect",["==","@entity.selectedCategory","@entity.correctCategory"]],["correctOption",["array/first",["array/filter","@entity.categories",["fn","c",["==",["object/get","@c","value"],"@entity.correctCategory"]]]]],["baseMessage",["if","@isCorrect","Correct!",["str/concat","Not quite — the correct answer is ",["object/get","@correctOption","label"],"."]]],["fullMessage",["if",["!=","@entity.itemExplanation",""],["str/concat","@baseMessage"," ","@entity.itemExplanation"],"@baseMessage"]]],["do",["set","@entity.attemptedCount",["+","@entity.attemptedCount",1]],["set","@entity.correctCount",["if","@isCorrect",["+","@entity.correctCount",1],"@entity.correctCount"]],["set","@entity.score",["let",[["raw",["if","@isCorrect",["+","@entity.score","@config.pointsPerCorrect"],["-","@entity.score","@config.penaltyPerMiss"]]]],["math/max",0,["if",[">","@config.scoreCap",0],["math/min","@raw","@config.scoreCap"],"@raw"]]]],["set","@entity.verdict",["if","@isCorrect","correct","incorrect"]],["set","@entity.feedback","@fullMessage"]]],["set","@entity.categoryStats",["array/map","@entity.categoryStats",["fn","s",["if",["==",["object/get","@s","category"],"@entity.correctCategory"],["object/merge","@s",{"attempted":["+",["object/get","@s","attempted"],1],"correct":["if",["==","@entity.selectedCategory","@entity.correctCategory"],["+",["object/get","@s","correct"],1],["object/get","@s","correct"]]}],"@s"]]]],["let",[["categoryCount",["array/len","@entity.categories"]],["marginX",30],["marginY",20],["plotWidth",["-","@config.width",["*","@marginX",2]]],["plotHeight",["-","@config.height",["*","@marginY",2]]],["plotBottom",["-","@config.height","@marginY"]],["tierHeight",["/","@plotHeight","@categoryCount"]],["maxWidth",["*","@plotWidth",0.95]],["minWidth",["-","@maxWidth",["*","@config.taper",["-","@maxWidth",["*","@plotWidth",0.3]]]]],["widthStep",["/",["-","@maxWidth","@minWidth"],["math/max",1,["-","@categoryCount",1]]]],["centerX",["/","@config.width",2]],["revealed",["!=","@entity.selectedCategory",""]],["rects",["array/flatten",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["categoryValue",["object/get","@category","value"]],["w",["-","@maxWidth",["*","@i","@widthStep"]]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]],["x",["-","@centerX",["/","@w",2]]],["isCorrectCategory",["==","@categoryValue","@entity.correctCategory"]],["isSelectedCategory",["==","@categoryValue","@entity.selectedCategory"]],["fillColor",["if",["and","@revealed","@isCorrectCategory"],"@config.correctColor",["if",["and","@revealed","@isSelectedCategory"],"@config.incorrectColor",["object/get","@category","color"]]]],["baseRect",{"type":"rect","id":["str/concat","category-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"@fillColor","fillTone":"@fillColor","fillStyle":"tint"}]],["if",["and","@revealed","@isSelectedCategory"],["@baseRect",{"type":"rect","id":["str/concat","category-pick-ring-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"ink","fillStyle":"outline","stroke":"bold","opacity":1}],["@baseRect"]]]]]]],["labels",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]]],{"type":"text","id":["str/concat","category-label-","@i"],"x":"@centerX","y":["+","@yTop",["/","@tierHeight",2],5],"text":["object/get","@category","label"],"textSize":"sm","align":"center","tone":"label"}]]]],["backdropShapes",["array/concat","@rects","@labels"]],["summaryView",[{"type":"typography","variant":"h4","content":"Round Complete"},{"type":"stat-display","label":"Final Score","value":"@entity.correctCount","max":"@entity.attemptedCount"},{"type":"stack","direction":"vertical","gap":"xs","children":["array/map","@entity.categoryStats",["fn","s",{"type":"typography","variant":"body","content":["str/concat",["object/get","@s","label"],": ",["str/concat","",["object/get","@s","correct"]],"/",["str/concat","",["object/get","@s","attempted"]]]}]]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"primary"}]],["itemView",[{"type":"card","variant":"bordered","padding":"md","children":["array/concat",[{"type":"typography","variant":"body","content":"@entity.itemText"}],["if",["and","@config.showHint",["!=","@entity.itemHint",""]],[{"type":"typography","variant":"caption","color":"muted","content":"@entity.itemHint"}],[]]]},{"type":"biology-canvas","width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","nodes":[],"edges":[],"shapes":"@backdropShapes","interactive":"@config.interactive","animate":"@config.animate","keyMap":{"Space":"TOGGLE_RUN","ArrowRight":"ADVANCE","KeyR":"RETRY"}},{"type":"stack","direction":"horizontal","gap":"xs","children":["let",[["itemOptions",["object/get",["array/nth","@entity.items","@entity.itemIndex"],"options",[]]]],["if",[">",["array/len","@itemOptions"],0],["array/map","@itemOptions",["fn","o",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@o","category"]},"label":["object/get","@o","label"],"variant":["if",["==","@entity.selectedCategory",["object/get","@o","category"]],"primary","secondary"],"size":"sm"}]],["array/map",["array/reverse","@entity.categories"],["fn","c",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@c","value"]},"label":["object/get","@c","label"],"variant":["if",["==","@entity.selectedCategory",["object/get","@c","value"]],"primary","secondary"],"size":"sm"}]]]]},{"type":"stack","direction":"horizontal","gap":"xs","children":["array/concat",["if",["!=","@entity.verdict",""],[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","danger"],"label":["if",["==","@entity.verdict","correct"],"Correct","Incorrect"]}],[]],[{"type":"typography","variant":"caption","content":"@entity.feedback"}]]},{"type":"stack","direction":"horizontal","gap":"sm","children":[{"type":"button","action":"ADVANCE","label":"@config.advanceLabel","variant":"primary","disabled":["if",["==","@entity.selectedCategory",""],true,false]},{"type":"button","action":"TOGGLE_RUN","label":["if","@entity.running","Pause","Auto"],"variant":"ghost"}]},{"type":"stat-display","label":["if",[">","@config.passScore",0],["str/concat","Score — pass at ","@config.passScore"],"Score"],"value":["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],"@entity.score","@entity.correctCount"],"max":["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["if",[">","@config.scoreCap",0],"@config.scoreCap",["*","@entity.totalItems","@config.pointsPerCorrect"]],"@entity.attemptedCount"]}]]],["do",["set","@entity.backdropShapes","@backdropShapes"],["set","@entity.roundView",["if","@entity.roundComplete","@summaryView","@itemView"]]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.roundComplete","Round complete",["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["str/concat","Score ","@entity.score"],["str/concat","@entity.correctCount"," / ","@entity.attemptedCount"," correct"]]],"variant":["if","@entity.roundComplete","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict","incorrect"],"error","neutral"]]]}]},{"type":"progress-bar","value":["+","@entity.itemIndex",1],"max":"@entity.totalItems","showPercentage":false,"label":["str/concat","Item ",["str/concat","",["+","@entity.itemIndex",1]]," of ",["str/concat","","@entity.totalItems"]]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.roundView"}]}]}],["emit","CLASSIFY_UPDATED",{"itemIndex":"@entity.itemIndex","correctCount":"@entity.correctCount","attemptedCount":"@entity.attemptedCount","selectedCategory":"@entity.selectedCategory","verdict":"@entity.verdict","roundComplete":"@entity.roundComplete"}]]},{"from":"idle","to":"idle","event":"ADVANCE","eventId":"evt_KG3DKRRQJYBSF0XKJ1MY3WV2YJ","guard":["and",["==","@entity.active",true],["==","@entity.roundComplete",false]],"effects":[["if",["and",["not","@config.loopRound"],[">=",["+","@entity.itemIndex","@config.orderStride"],"@entity.totalItems"]],["emit","LEARN_ROUND_COMPLETE",{"score":"@entity.correctCount","total":"@entity.totalItems"}],null],["let",[["isLast",["and",["not","@config.loopRound"],[">=",["+","@entity.itemIndex","@config.orderStride"],"@entity.totalItems"]]]],["if","@isLast",["do",["set","@entity.roundComplete",true],["set","@entity.selectedCategory",""],["set","@entity.feedback",""],["set","@entity.verdict",""]],["let",[["nextIndex",["if","@config.loopRound",["math/mod",["+","@entity.itemIndex","@config.orderStride"],"@entity.totalItems"],["+","@entity.itemIndex","@config.orderStride"]]],["item",["array/nth","@entity.items","@nextIndex"]]],["do",["set","@entity.itemIndex","@nextIndex"],["set","@entity.itemText",["object/get","@item","text"]],["set","@entity.itemHint",["object/get","@item","hint",""]],["set","@entity.itemExplanation",["object/get","@item","explanation",""]],["set","@entity.correctCategory",["object/get","@item","category"]],["set","@entity.selectedCategory",""],["set","@entity.feedback",""],["set","@entity.verdict",""]]]]],["let",[["categoryCount",["array/len","@entity.categories"]],["marginX",30],["marginY",20],["plotWidth",["-","@config.width",["*","@marginX",2]]],["plotHeight",["-","@config.height",["*","@marginY",2]]],["plotBottom",["-","@config.height","@marginY"]],["tierHeight",["/","@plotHeight","@categoryCount"]],["maxWidth",["*","@plotWidth",0.95]],["minWidth",["-","@maxWidth",["*","@config.taper",["-","@maxWidth",["*","@plotWidth",0.3]]]]],["widthStep",["/",["-","@maxWidth","@minWidth"],["math/max",1,["-","@categoryCount",1]]]],["centerX",["/","@config.width",2]],["revealed",["!=","@entity.selectedCategory",""]],["rects",["array/flatten",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["categoryValue",["object/get","@category","value"]],["w",["-","@maxWidth",["*","@i","@widthStep"]]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]],["x",["-","@centerX",["/","@w",2]]],["isCorrectCategory",["==","@categoryValue","@entity.correctCategory"]],["isSelectedCategory",["==","@categoryValue","@entity.selectedCategory"]],["fillColor",["if",["and","@revealed","@isCorrectCategory"],"@config.correctColor",["if",["and","@revealed","@isSelectedCategory"],"@config.incorrectColor",["object/get","@category","color"]]]],["baseRect",{"type":"rect","id":["str/concat","category-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"@fillColor","fillTone":"@fillColor","fillStyle":"tint"}]],["if",["and","@revealed","@isSelectedCategory"],["@baseRect",{"type":"rect","id":["str/concat","category-pick-ring-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"ink","fillStyle":"outline","stroke":"bold","opacity":1}],["@baseRect"]]]]]]],["labels",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]]],{"type":"text","id":["str/concat","category-label-","@i"],"x":"@centerX","y":["+","@yTop",["/","@tierHeight",2],5],"text":["object/get","@category","label"],"textSize":"sm","align":"center","tone":"label"}]]]],["backdropShapes",["array/concat","@rects","@labels"]],["summaryView",[{"type":"typography","variant":"h4","content":"Round Complete"},{"type":"stat-display","label":"Final Score","value":"@entity.correctCount","max":"@entity.attemptedCount"},{"type":"stack","direction":"vertical","gap":"xs","children":["array/map","@entity.categoryStats",["fn","s",{"type":"typography","variant":"body","content":["str/concat",["object/get","@s","label"],": ",["str/concat","",["object/get","@s","correct"]],"/",["str/concat","",["object/get","@s","attempted"]]]}]]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"primary"}]],["itemView",[{"type":"card","variant":"bordered","padding":"md","children":["array/concat",[{"type":"typography","variant":"body","content":"@entity.itemText"}],["if",["and","@config.showHint",["!=","@entity.itemHint",""]],[{"type":"typography","variant":"caption","color":"muted","content":"@entity.itemHint"}],[]]]},{"type":"biology-canvas","width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","nodes":[],"edges":[],"shapes":"@backdropShapes","interactive":"@config.interactive","animate":"@config.animate","keyMap":{"Space":"TOGGLE_RUN","ArrowRight":"ADVANCE","KeyR":"RETRY"}},{"type":"stack","direction":"horizontal","gap":"xs","children":["let",[["itemOptions",["object/get",["array/nth","@entity.items","@entity.itemIndex"],"options",[]]]],["if",[">",["array/len","@itemOptions"],0],["array/map","@itemOptions",["fn","o",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@o","category"]},"label":["object/get","@o","label"],"variant":["if",["==","@entity.selectedCategory",["object/get","@o","category"]],"primary","secondary"],"size":"sm"}]],["array/map",["array/reverse","@entity.categories"],["fn","c",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@c","value"]},"label":["object/get","@c","label"],"variant":["if",["==","@entity.selectedCategory",["object/get","@c","value"]],"primary","secondary"],"size":"sm"}]]]]},{"type":"stack","direction":"horizontal","gap":"xs","children":["array/concat",["if",["!=","@entity.verdict",""],[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","danger"],"label":["if",["==","@entity.verdict","correct"],"Correct","Incorrect"]}],[]],[{"type":"typography","variant":"caption","content":"@entity.feedback"}]]},{"type":"stack","direction":"horizontal","gap":"sm","children":[{"type":"button","action":"ADVANCE","label":"@config.advanceLabel","variant":"primary","disabled":["if",["==","@entity.selectedCategory",""],true,false]},{"type":"button","action":"TOGGLE_RUN","label":["if","@entity.running","Pause","Auto"],"variant":"ghost"}]},{"type":"stat-display","label":["if",[">","@config.passScore",0],["str/concat","Score — pass at ","@config.passScore"],"Score"],"value":["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],"@entity.score","@entity.correctCount"],"max":["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["if",[">","@config.scoreCap",0],"@config.scoreCap",["*","@entity.totalItems","@config.pointsPerCorrect"]],"@entity.attemptedCount"]}]]],["do",["set","@entity.backdropShapes","@backdropShapes"],["set","@entity.roundView",["if","@entity.roundComplete","@summaryView","@itemView"]]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.roundComplete","Round complete",["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["str/concat","Score ","@entity.score"],["str/concat","@entity.correctCount"," / ","@entity.attemptedCount"," correct"]]],"variant":["if","@entity.roundComplete","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict","incorrect"],"error","neutral"]]]}]},{"type":"progress-bar","value":["+","@entity.itemIndex",1],"max":"@entity.totalItems","showPercentage":false,"label":["str/concat","Item ",["str/concat","",["+","@entity.itemIndex",1]]," of ",["str/concat","","@entity.totalItems"]]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.roundView"}]}]}],["emit","CLASSIFY_UPDATED",{"itemIndex":"@entity.itemIndex","correctCount":"@entity.correctCount","attemptedCount":"@entity.attemptedCount","selectedCategory":"@entity.selectedCategory","verdict":"@entity.verdict","roundComplete":"@entity.roundComplete"}]]},{"from":"idle","to":"idle","event":"RETRY","eventId":"evt_6E91HTP1DJ0PS281JABJX4VCXX","guard":["==","@entity.roundComplete",true],"effects":[["set","@entity.active",true],["set","@entity.running","@config.autoRun"],["set","@entity.elapsedMs",0],["set","@entity.score",0],["set","@entity.itemIndex",0],["set","@entity.correctCount",0],["set","@entity.attemptedCount",0],["set","@entity.selectedCategory",""],["set","@entity.feedback",""],["set","@entity.verdict",""],["set","@entity.roundComplete",false],["set","@entity.categoryStats",["array/map","@entity.categories",["fn","c",{"category":["object/get","@c","value"],"label":["object/get","@c","label"],"attempted":0,"correct":0}]]],["let",[["item",["array/nth","@entity.items",0]]],["do",["set","@entity.itemText",["object/get","@item","text"]],["set","@entity.itemHint",["object/get","@item","hint",""]],["set","@entity.itemExplanation",["object/get","@item","explanation",""]],["set","@entity.correctCategory",["object/get","@item","category"]]]],["let",[["categoryCount",["array/len","@entity.categories"]],["marginX",30],["marginY",20],["plotWidth",["-","@config.width",["*","@marginX",2]]],["plotHeight",["-","@config.height",["*","@marginY",2]]],["plotBottom",["-","@config.height","@marginY"]],["tierHeight",["/","@plotHeight","@categoryCount"]],["maxWidth",["*","@plotWidth",0.95]],["minWidth",["-","@maxWidth",["*","@config.taper",["-","@maxWidth",["*","@plotWidth",0.3]]]]],["widthStep",["/",["-","@maxWidth","@minWidth"],["math/max",1,["-","@categoryCount",1]]]],["centerX",["/","@config.width",2]],["revealed",["!=","@entity.selectedCategory",""]],["rects",["array/flatten",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["categoryValue",["object/get","@category","value"]],["w",["-","@maxWidth",["*","@i","@widthStep"]]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]],["x",["-","@centerX",["/","@w",2]]],["isCorrectCategory",["==","@categoryValue","@entity.correctCategory"]],["isSelectedCategory",["==","@categoryValue","@entity.selectedCategory"]],["fillColor",["if",["and","@revealed","@isCorrectCategory"],"@config.correctColor",["if",["and","@revealed","@isSelectedCategory"],"@config.incorrectColor",["object/get","@category","color"]]]],["baseRect",{"type":"rect","id":["str/concat","category-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"@fillColor","fillTone":"@fillColor","fillStyle":"tint"}]],["if",["and","@revealed","@isSelectedCategory"],["@baseRect",{"type":"rect","id":["str/concat","category-pick-ring-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"ink","fillStyle":"outline","stroke":"bold","opacity":1}],["@baseRect"]]]]]]],["labels",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]]],{"type":"text","id":["str/concat","category-label-","@i"],"x":"@centerX","y":["+","@yTop",["/","@tierHeight",2],5],"text":["object/get","@category","label"],"textSize":"sm","align":"center","tone":"label"}]]]],["backdropShapes",["array/concat","@rects","@labels"]],["summaryView",[{"type":"typography","variant":"h4","content":"Round Complete"},{"type":"stat-display","label":"Final Score","value":"@entity.correctCount","max":"@entity.attemptedCount"},{"type":"stack","direction":"vertical","gap":"xs","children":["array/map","@entity.categoryStats",["fn","s",{"type":"typography","variant":"body","content":["str/concat",["object/get","@s","label"],": ",["str/concat","",["object/get","@s","correct"]],"/",["str/concat","",["object/get","@s","attempted"]]]}]]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"primary"}]],["itemView",[{"type":"card","variant":"bordered","padding":"md","children":["array/concat",[{"type":"typography","variant":"body","content":"@entity.itemText"}],["if",["and","@config.showHint",["!=","@entity.itemHint",""]],[{"type":"typography","variant":"caption","color":"muted","content":"@entity.itemHint"}],[]]]},{"type":"biology-canvas","width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","nodes":[],"edges":[],"shapes":"@backdropShapes","interactive":"@config.interactive","animate":"@config.animate","keyMap":{"Space":"TOGGLE_RUN","ArrowRight":"ADVANCE","KeyR":"RETRY"}},{"type":"stack","direction":"horizontal","gap":"xs","children":["let",[["itemOptions",["object/get",["array/nth","@entity.items","@entity.itemIndex"],"options",[]]]],["if",[">",["array/len","@itemOptions"],0],["array/map","@itemOptions",["fn","o",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@o","category"]},"label":["object/get","@o","label"],"variant":["if",["==","@entity.selectedCategory",["object/get","@o","category"]],"primary","secondary"],"size":"sm"}]],["array/map",["array/reverse","@entity.categories"],["fn","c",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@c","value"]},"label":["object/get","@c","label"],"variant":["if",["==","@entity.selectedCategory",["object/get","@c","value"]],"primary","secondary"],"size":"sm"}]]]]},{"type":"stack","direction":"horizontal","gap":"xs","children":["array/concat",["if",["!=","@entity.verdict",""],[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","danger"],"label":["if",["==","@entity.verdict","correct"],"Correct","Incorrect"]}],[]],[{"type":"typography","variant":"caption","content":"@entity.feedback"}]]},{"type":"stack","direction":"horizontal","gap":"sm","children":[{"type":"button","action":"ADVANCE","label":"@config.advanceLabel","variant":"primary","disabled":["if",["==","@entity.selectedCategory",""],true,false]},{"type":"button","action":"TOGGLE_RUN","label":["if","@entity.running","Pause","Auto"],"variant":"ghost"}]},{"type":"stat-display","label":["if",[">","@config.passScore",0],["str/concat","Score — pass at ","@config.passScore"],"Score"],"value":["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],"@entity.score","@entity.correctCount"],"max":["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["if",[">","@config.scoreCap",0],"@config.scoreCap",["*","@entity.totalItems","@config.pointsPerCorrect"]],"@entity.attemptedCount"]}]]],["do",["set","@entity.backdropShapes","@backdropShapes"],["set","@entity.roundView",["if","@entity.roundComplete","@summaryView","@itemView"]]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.roundComplete","Round complete",["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["str/concat","Score ","@entity.score"],["str/concat","@entity.correctCount"," / ","@entity.attemptedCount"," correct"]]],"variant":["if","@entity.roundComplete","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict","incorrect"],"error","neutral"]]]}]},{"type":"progress-bar","value":["+","@entity.itemIndex",1],"max":"@entity.totalItems","showPercentage":false,"label":["str/concat","Item ",["str/concat","",["+","@entity.itemIndex",1]]," of ",["str/concat","","@entity.totalItems"]]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.roundView"}]}]}],["emit","CLASSIFY_UPDATED",{"itemIndex":"@entity.itemIndex","correctCount":"@entity.correctCount","attemptedCount":"@entity.attemptedCount","selectedCategory":"@entity.selectedCategory","verdict":"@entity.verdict","roundComplete":"@entity.roundComplete"}]]},{"from":"idle","to":"idle","event":"TOGGLE_RUN","eventId":"evt_CD3SWSP2A5152KXMZ9RMBQTDTP","guard":["and",["==","@entity.active",true],["==","@entity.roundComplete",false]],"effects":[["set","@entity.running",["not","@entity.running"]],["set","@entity.elapsedMs",0],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.roundComplete","Round complete",["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["str/concat","Score ","@entity.score"],["str/concat","@entity.correctCount"," / ","@entity.attemptedCount"," correct"]]],"variant":["if","@entity.roundComplete","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict","incorrect"],"error","neutral"]]]}]},{"type":"progress-bar","value":["+","@entity.itemIndex",1],"max":"@entity.totalItems","showPercentage":false,"label":["str/concat","Item ",["str/concat","",["+","@entity.itemIndex",1]]," of ",["str/concat","","@entity.totalItems"]]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.roundView"}]}]}]]}]},"ticks":[{"name":"advanceTick","interval":32,"guard":["and",["==","@entity.active",true],["and",["==","@entity.running",true],["==","@entity.roundComplete",false]]],"effects":[["set","@entity.elapsedMs",["+","@entity.elapsedMs",32]],["when",[">=","@entity.elapsedMs","@config.advanceMs"],["do",["set","@entity.elapsedMs",0],["emit","ADVANCE",{}]]]]}],"config":{"pointsPerCorrect":{"type":"number","default":1,"label":"Points Per Correct","description":"Rubric points added to the score for each correct pick; at the default 1 with no penalty, the plain correct/attempted counts render instead of the rubric score.","tier":"domain"},"taper":{"type":"number","default":0,"label":"Taper","description":"How far the category rungs narrow toward the top: 0 = equal-width rungs (no implied order), 1 = a full pyramid for hierarchies (needs, levels). Long category names need 0.","tier":"presentation"},"height":{"type":"number","default":420,"label":"Height","description":"Canvas height in pixels.","tier":"presentation"},"correctColor":{"type":"string","default":"success","label":"Correct Highlight Color","description":"Fill color for the correct category once the learner has picked.","tier":"presentation"},"title":{"type":"string","default":"Classify","label":"Title","description":"Title shown above the instrument.","tier":"presentation"},"retryLabel":{"type":"string","default":"Retry Round","label":"Retry Button Label","description":"Label text for the button that restarts the round from the end-of-round summary.","tier":"presentation"},"penaltyPerMiss":{"type":"number","default":0,"label":"Penalty Per Miss","description":"Rubric points subtracted for each incorrect pick (score never drops below 0).","tier":"domain"},"interactive":{"type":"boolean","default":false,"label":"Interactive","description":"Enable pointer interaction on the canvas.","tier":"presentation"},"matchMode":{"type":"string","default":"","label":"Match Mode","description":"When composed behind a lab router, the MODE_SELECTED mode value this instrument responds to. Empty string means standalone — render immediately on INIT.","tier":"presentation"},"items":{"type":"[LearnClassifyItem]","default":[{"text":"Example item one.","category":"a","hint":"Consider what makes this belong to category A.","explanation":"This example was written to satisfy category A's defining trait."},{"text":"Example item two.","category":"b","hint":"Consider what makes this belong to category B.","explanation":"This example was written to satisfy category B's defining trait."}],"label":"Items","description":"Roster of items the learner classifies; each carries its prompt text, the value of its correct category, and optional hint/explanation text shown before/after the pick.","synonyms":"item, prompt, scenario, situation, case, example, question","tier":"domain","items":{"type":"object","properties":{"options":{"name":"options","type":"array","required":false,"items":{"type":"object","properties":{"category":{"name":"category","type":"string","required":true},"label":{"name":"label","type":"string","required":true}}}},"text":{"name":"text","type":"string","required":true},"hint":{"name":"hint","type":"string","required":false},"category":{"name":"category","type":"string","required":true},"explanation":{"name":"explanation","type":"string","required":false}}}},"summary":{"type":"string","default":"","label":"Concept","description":"One line under the title saying what is being classified (keep it under ~65 characters). Empty shows no line.","tier":"presentation"},"autoRun":{"type":"boolean","default":false,"label":"Auto Run","description":"When true the advance clock starts on load and the drill flips to the next item every advanceMs milliseconds; toggle live with the Auto/Pause button.","tier":"domain"},"categories":{"type":"[LearnClassifyOption]","default":[{"value":"a","label":"Category A","color":"series-1"},{"value":"b","label":"Category B","color":"series-2"}],"label":"Categories","description":"Ordered bottom-to-top roster of category buckets (value/label/color) used to render the stacked backdrop and the pick buttons; order determines the backdrop's stacking, widest at the bottom to narrowest at the top.","synonyms":"category, bucket, class, tier, level, classification, roster","tier":"domain","items":{"type":"object","properties":{"color":{"name":"color","type":"string","required":true},"label":{"name":"label","type":"string","required":true},"value":{"name":"value","type":"string","required":true}}}},"animate":{"type":"boolean","default":false,"label":"Animate","description":"Enable continuous redraw loop.","tier":"presentation"},"advanceLabel":{"type":"string","default":"Next","label":"Advance Button Label","description":"Label text for the button that advances to the next item.","tier":"presentation"},"rosterSource":{"type":"string","default":"config","label":"Roster Source","description":"Where the roster comes from: config reads the items/categories knob(s) at INIT; event waits for ROSTER_LOADED and takes the roster from its payload.","tier":"domain","values":["config","event"]},"orderStride":{"type":"number","default":1,"label":"Order Stride","description":"Items advance by this stride through the roster — 1 is sequential; a stride coprime with the roster length (e.g. 3) interleaves the corpus so adjacent items differ.","tier":"domain"},"showHint":{"type":"boolean","default":true,"label":"Show Hint","description":"Show each item's hint line beneath the prompt before the learner picks; hide for a harder drill.","tier":"domain"},"incorrectColor":{"type":"string","default":"error","label":"Incorrect Highlight Color","description":"Fill color for the learner's picked category when it does not match the correct category.","tier":"presentation"},"backgroundColor":{"type":"string","default":"","label":"Background Color","description":"Canvas ground (tone name, token or colour); empty uses the theme's drawing ground.","tier":"presentation"},"passScore":{"type":"number","default":0,"label":"Pass Score","description":"Target score shown next to the running score as \"pass at N\"; 0 hides the target.","tier":"domain"},"width":{"type":"number","default":640,"label":"Width","description":"Canvas width in pixels.","tier":"presentation"},"advanceMs":{"type":"number","default":900,"label":"Auto-Advance Interval (ms)","description":"Milliseconds between automatic advances while running — the 32ms base tick accumulates elapsed time and fires ADVANCE each time this interval elapses.","tier":"domain"},"loopRound":{"type":"boolean","default":false,"label":"Loop Round","description":"When true the item cursor wraps past the last item forever (a looping drill) instead of ending the round at the summary screen.","tier":"domain"},"scoreCap":{"type":"number","default":0,"label":"Score Cap","description":"Upper bound on the rubric score; 0 means uncapped.","tier":"domain"}},"scope":"instance"}],"pages":[{"name":"LearnClassifyPage","id":"pag_MDZNKZGVD0DPG8ZCW3BC7BG3B2","path":"/learn-classify","traits":[{"ref":"LearnClassifySim","refId":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"}]}],"types":{"LearnClassifyCategoryStat":[{"name":"category","type":"string","required":true},{"name":"label","type":"string","required":true},{"name":"attempted","type":"number","required":true},{"name":"correct","type":"number","required":true}],"LearnClassifyItem":[{"name":"text","type":"string","required":true},{"name":"category","type":"string","required":true},{"name":"hint","type":"string"},{"name":"explanation","type":"string"},{"name":"options","type":"[object]","properties":[{"name":"category","type":"string","required":true},{"name":"label","type":"string","required":true}]}],"LearnClassifyItemOption":[{"name":"category","type":"string","required":true},{"name":"label","type":"string","required":true}],"LearnClassifyOption":[{"name":"value","type":"string","required":true},{"name":"label","type":"string","required":true},{"name":"color","type":"string","required":true}],"LearnClassifyShape":[{"name":"type","type":"string","values":["line","arrow","circle","rect","polygon","path","text","axis","grid"],"required":true},{"name":"id","type":"string"},{"name":"x","type":"number"},{"name":"y","type":"number"},{"name":"x1","type":"number"},{"name":"y1","type":"number"},{"name":"x2","type":"number"},{"name":"y2","type":"number"},{"name":"radius","type":"number"},{"name":"width","type":"number"},{"name":"height","type":"number"},{"name":"points","type":"[object]","properties":[{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true}]},{"name":"path","type":"string"},{"name":"text","type":"string"},{"name":"label","type":"string"},{"name":"fontSize","type":"number"},{"name":"align","type":"string","values":["left","center","right"]},{"name":"axis","type":"string","values":["x","y"]},{"name":"min","type":"number"},{"name":"max","type":"number"},{"name":"step","type":"number"},{"name":"color","type":"string"},{"name":"fill","type":"string"},{"name":"lineWidth","type":"number"},{"name":"opacity","type":"number"},{"name":"tone","type":"string"},{"name":"fillTone","type":"string"},{"name":"stroke","type":"string"},{"name":"textSize","type":"string"},{"name":"fillStyle","type":"string"}],"LearnClassifyShapePoint":[{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true}]}}],"schemaVersion":1,"ledger":{"schemaVersion":1,"entries":{"ent_Y0EY6S7B24NH20YRD5BY1HQGAS":{"id":"ent_Y0EY6S7B24NH20YRD5BY1HQGAS","kind":"entity","bakedName":"LearnClassifyScene","curName":"LearnClassifyScene","renames":[],"owner":"workspace"},"evt_3WCT8HD6K0K9GF691M6DNYGPH2":{"id":"evt_3WCT8HD6K0K9GF691M6DNYGPH2","kind":"event","bakedName":"INIT","curName":"INIT","renames":[],"owner":"workspace","parent":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"},"evt_6E91HTP1DJ0PS281JABJX4VCXX":{"id":"evt_6E91HTP1DJ0PS281JABJX4VCXX","kind":"event","bakedName":"RETRY","curName":"RETRY","renames":[],"owner":"workspace","parent":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"},"evt_9MXFB29J3NS1TWYQD9YPVQ1TNC":{"id":"evt_9MXFB29J3NS1TWYQD9YPVQ1TNC","kind":"event","bakedName":"PICK","curName":"PICK","renames":[],"owner":"workspace","parent":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"},"evt_CD3SWSP2A5152KXMZ9RMBQTDTP":{"id":"evt_CD3SWSP2A5152KXMZ9RMBQTDTP","kind":"event","bakedName":"TOGGLE_RUN","curName":"TOGGLE_RUN","renames":[],"owner":"workspace","parent":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"},"evt_FTAH4MGWW3EE1VV83EY7CJZRRZ":{"id":"evt_FTAH4MGWW3EE1VV83EY7CJZRRZ","kind":"event","bakedName":"CLASSIFY_UPDATED","curName":"CLASSIFY_UPDATED","renames":[],"owner":"workspace","parent":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"},"evt_JX9D9BSBPQNVBG1CG6HVD2FD5H":{"id":"evt_JX9D9BSBPQNVBG1CG6HVD2FD5H","kind":"event","bakedName":"LEARN_ROUND_COMPLETE","curName":"LEARN_ROUND_COMPLETE","renames":[],"owner":"workspace","parent":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"},"evt_KG3DKRRQJYBSF0XKJ1MY3WV2YJ":{"id":"evt_KG3DKRRQJYBSF0XKJ1MY3WV2YJ","kind":"event","bakedName":"ADVANCE","curName":"ADVANCE","renames":[],"owner":"workspace","parent":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"},"evt_R2NCYM9KCTSPDFRRFRWPFDHQBN":{"id":"evt_R2NCYM9KCTSPDFRRFRWPFDHQBN","kind":"event","bakedName":"ROSTER_LOADED","curName":"ROSTER_LOADED","renames":[],"owner":"workspace","parent":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"},"evt_SB6ERFS6HZK8ZMG0YMMJQQRQ95":{"id":"evt_SB6ERFS6HZK8ZMG0YMMJQQRQ95","kind":"event","bakedName":"MODE_SELECTED","curName":"MODE_SELECTED","renames":[],"owner":"workspace","parent":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"},"orb_RBQ15CH017G0KJ56SC9833D5ZQ":{"id":"orb_RBQ15CH017G0KJ56SC9833D5ZQ","kind":"orbital","bakedName":"LearnClassifyOrbital","curName":"LearnClassifyOrbital","renames":[],"owner":"workspace"},"pag_MDZNKZGVD0DPG8ZCW3BC7BG3B2":{"id":"pag_MDZNKZGVD0DPG8ZCW3BC7BG3B2","kind":"page","bakedName":"LearnClassifyPage","curName":"LearnClassifyPage","renames":[],"owner":"workspace"},"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8":{"id":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8","kind":"trait","bakedName":"LearnClassifySim","curName":"LearnClassifySim","renames":[],"owner":"workspace"}}}}
|
|
1
|
+
{"name":"std-learn-classify","version":"1.0.0","description":"Generic classify-with-feedback instrument — items are presented one at a time on a current-item card (with an optional config-declared hint), the learner picks a category from an ordered stacked-backdrop ladder (the picked rung rings, the correct rung glows green, a wrong pick glows red), an explicit verdict beat shows a correct/incorrect badge plus a config-declared explanation, a progress readout tracks item k of n and a running score, and after the last item the learner reaches an end-of-round summary with a per-category breakdown and a Retry affordance. Category and item vocabulary is entirely config-declared, so the same mechanism serves any classification domain (needs hierarchies, checks-and-balances, sociological imagination, and beyond) on a biology-canvas. Standalone by default; behind a lab router set matchMode and it renders only when MODE_SELECTED matches.","orbitals":[{"name":"LearnClassifyOrbital","id":"orb_RBQ15CH017G0KJ56SC9833D5ZQ","entity":{"name":"LearnClassifyScene","id":"ent_Y0EY6S7B24NH20YRD5BY1HQGAS","persistence":"runtime","fields":[{"name":"id","type":"string","required":true},{"name":"active","type":"boolean","default":false},{"name":"items","type":"array","items":{"type":"object","properties":{"options":{"name":"options","type":"array","required":false,"items":{"type":"object","properties":{"category":{"name":"category","type":"string","required":true},"label":{"name":"label","type":"string","required":true}}}},"hint":{"name":"hint","type":"string","required":false},"explanation":{"name":"explanation","type":"string","required":false},"category":{"name":"category","type":"string","required":true},"text":{"name":"text","type":"string","required":true}}}},{"name":"categories","type":"array","items":{"type":"object","properties":{"value":{"name":"value","type":"string","required":true},"color":{"name":"color","type":"string","required":true},"label":{"name":"label","type":"string","required":true}}}},{"name":"title","type":"string"},{"name":"itemIndex","type":"number"},{"name":"itemText","type":"string"},{"name":"itemHint","type":"string"},{"name":"itemExplanation","type":"string"},{"name":"correctCategory","type":"string"},{"name":"selectedCategory","type":"string"},{"name":"feedback","type":"string"},{"name":"verdict","type":"string"},{"name":"correctCount","type":"number"},{"name":"attemptedCount","type":"number"},{"name":"totalItems","type":"number"},{"name":"roundComplete","type":"boolean","default":false},{"name":"running","type":"boolean","default":false},{"name":"elapsedMs","type":"number","default":0},{"name":"score","type":"number","default":0},{"name":"categoryStats","type":"array","items":{"type":"object","properties":{"correct":{"name":"correct","type":"number","required":true},"attempted":{"name":"attempted","type":"number","required":true},"label":{"name":"label","type":"string","required":true},"category":{"name":"category","type":"string","required":true}}}},{"name":"backdropShapes","type":"array","items":{"type":"object","properties":{"points":{"name":"points","type":"array","required":false,"items":{"type":"object","properties":{"x":{"name":"x","type":"number","required":true},"y":{"name":"y","type":"number","required":true}}}},"tone":{"name":"tone","type":"string","required":false},"textSize":{"name":"textSize","type":"string","required":false},"width":{"name":"width","type":"number","required":false},"y1":{"name":"y1","type":"number","required":false},"axis":{"name":"axis","type":"string","required":false,"values":["x","y"]},"height":{"name":"height","type":"number","required":false},"fillStyle":{"name":"fillStyle","type":"string","required":false},"align":{"name":"align","type":"string","required":false,"values":["left","center","right"]},"x":{"name":"x","type":"number","required":false},"color":{"name":"color","type":"string","required":false},"fillTone":{"name":"fillTone","type":"string","required":false},"x1":{"name":"x1","type":"number","required":false},"y":{"name":"y","type":"number","required":false},"text":{"name":"text","type":"string","required":false},"path":{"name":"path","type":"string","required":false},"step":{"name":"step","type":"number","required":false},"type":{"name":"type","type":"string","required":true,"values":["line","arrow","circle","rect","polygon","path","text","axis","grid"]},"fontSize":{"name":"fontSize","type":"number","required":false},"label":{"name":"label","type":"string","required":false},"radius":{"name":"radius","type":"number","required":false},"lineWidth":{"name":"lineWidth","type":"number","required":false},"opacity":{"name":"opacity","type":"number","required":false},"id":{"name":"id","type":"string","required":false},"min":{"name":"min","type":"number","required":false},"stroke":{"name":"stroke","type":"string","required":false},"fill":{"name":"fill","type":"string","required":false},"x2":{"name":"x2","type":"number","required":false},"max":{"name":"max","type":"number","required":false},"y2":{"name":"y2","type":"number","required":false}}}},{"name":"roundView","type":"array","items":{"type":"node"}}]},"traits":[{"name":"LearnClassifySim","id":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8","entityRebindable":true,"entityContract":{"requires":[],"provides":["active","attemptedCount","backdropShapes","categories","categoryStats","correctCategory","correctCount","elapsedMs","feedback","itemExplanation","itemHint","itemIndex","itemText","items","roundComplete","roundView","running","score","selectedCategory","title","totalItems","verdict"]},"effectRow":[{"kind":"emit","resource":"ADVANCE","site":"tick"},{"kind":"emit","resource":"CLASSIFY_UPDATED"},{"kind":"emit","resource":"LEARN_ROUND_COMPLETE"},{"kind":"render-ui","resource":"main"},{"kind":"set","resource":"@entity.active"},{"kind":"set","resource":"@entity.attemptedCount"},{"kind":"set","resource":"@entity.backdropShapes"},{"kind":"set","resource":"@entity.categories"},{"kind":"set","resource":"@entity.categoryStats"},{"kind":"set","resource":"@entity.correctCategory"},{"kind":"set","resource":"@entity.correctCount"},{"kind":"set","resource":"@entity.elapsedMs"},{"kind":"set","resource":"@entity.elapsedMs","site":"tick"},{"kind":"set","resource":"@entity.feedback"},{"kind":"set","resource":"@entity.itemExplanation"},{"kind":"set","resource":"@entity.itemHint"},{"kind":"set","resource":"@entity.itemIndex"},{"kind":"set","resource":"@entity.itemText"},{"kind":"set","resource":"@entity.items"},{"kind":"set","resource":"@entity.roundComplete"},{"kind":"set","resource":"@entity.roundView"},{"kind":"set","resource":"@entity.running"},{"kind":"set","resource":"@entity.score"},{"kind":"set","resource":"@entity.selectedCategory"},{"kind":"set","resource":"@entity.title"},{"kind":"set","resource":"@entity.totalItems"},{"kind":"set","resource":"@entity.verdict"},{"kind":"ticks","site":"tick"}],"category":"interaction","linkedEntity":"LearnClassifyScene","linkedEntityId":"ent_Y0EY6S7B24NH20YRD5BY1HQGAS","entityRefIds":{"LearnClassifyScene":"ent_Y0EY6S7B24NH20YRD5BY1HQGAS"},"emits":[{"event":"CLASSIFY_UPDATED","eventId":"evt_FTAH4MGWW3EE1VV83EY7CJZRRZ","description":"The classification state after each learner action — a composed listener (readout, grader) can subscribe; a harmless no-op when the atom runs standalone.","synonyms":"classify update, pick result, score, running score, verdict","tier":"domain","scope":"external","payloadSchema":[{"name":"itemIndex","type":"number"},{"name":"correctCount","type":"number"},{"name":"attemptedCount","type":"number"},{"name":"selectedCategory","type":"string"},{"name":"verdict","type":"string"},{"name":"roundComplete","type":"boolean"}]},{"event":"LEARN_ROUND_COMPLETE","eventId":"evt_JX9D9BSBPQNVBG1CG6HVD2FD5H","description":"Fired once when the round finishes (the advance past the final item) — the standard learning completion broadcast a celebration/progression sibling (fx cues, badges) rides.","synonyms":"round complete, finished, done, completion","tier":"domain","scope":"external","payloadSchema":[{"name":"score","type":"number"},{"name":"total","type":"number"}]}],"stateMachine":{"states":[{"name":"idle","isInitial":true}],"events":[{"key":"INIT","id":"evt_3WCT8HD6K0K9GF691M6DNYGPH2","name":"Initialize"},{"key":"MODE_SELECTED","id":"evt_SB6ERFS6HZK8ZMG0YMMJQQRQ95","name":"Mode Selected","description":"Lab router broadcast naming the active mode; this instrument renders when the mode equals matchMode, otherwise renders null.","tier":"domain","payloadSchema":[{"name":"mode","type":"string"}],"listened":true},{"key":"ROSTER_LOADED","id":"evt_R2NCYM9KCTSPDFRRFRWPFDHQBN","name":"Roster Loaded","description":"Runtime content feed, honoured only when rosterSource is event — mode names the instrument it is for (the matchMode it carries, blank when standalone), items is the roster to classify and categories the category buckets; a matching instrument re-initialises from them exactly as INIT does from config, any other instrument hides.","tier":"domain","payloadSchema":[{"name":"mode","type":"string","required":true},{"name":"items","type":"[object]","required":true,"properties":[{"name":"text","type":"string","required":true},{"name":"category","type":"string","required":true},{"name":"hint","type":"string"},{"name":"explanation","type":"string"},{"name":"options","type":"[object]","properties":[{"name":"category","type":"string","required":true},{"name":"label","type":"string","required":true}]}]},{"name":"categories","type":"[object]","required":true,"properties":[{"name":"value","type":"string","required":true},{"name":"label","type":"string","required":true},{"name":"color","type":"string","required":true}]}],"listened":true},{"key":"PICK","id":"evt_9MXFB29J3NS1TWYQD9YPVQ1TNC","name":"Pick","description":"Learner picked a category for the current item; verdicted against the item's declared correct category.","tier":"domain","payloadSchema":[{"name":"category","type":"string"}],"listened":true},{"key":"ADVANCE","id":"evt_KG3DKRRQJYBSF0XKJ1MY3WV2YJ","name":"Advance","description":"Learner advanced to the next item, clearing the pick and feedback for the new item; on the last item this instead ends the round and reveals the summary.","tier":"domain","listened":true},{"key":"RETRY","id":"evt_6E91HTP1DJ0PS281JABJX4VCXX","name":"Retry","description":"Learner restarted the round from the summary screen — score, per-category breakdown, and item cursor reset to the beginning.","tier":"domain","listened":true},{"key":"TOGGLE_RUN","id":"evt_CD3SWSP2A5152KXMZ9RMBQTDTP","name":"Toggle Run","description":"Learner toggled auto-advance: while running, the advance clock steps to the next item every advanceMs milliseconds.","tier":"domain","listened":true},{"key":"CLASSIFY_UPDATED","id":"evt_FTAH4MGWW3EE1VV83EY7CJZRRZ","name":"Classify Updated","description":"The classification state after each learner action — a composed listener (readout, grader) can subscribe; a harmless no-op when the atom runs standalone.","synonyms":"classify update, pick result, score, running score, verdict","tier":"domain","payloadSchema":[{"name":"itemIndex","type":"number"},{"name":"correctCount","type":"number"},{"name":"attemptedCount","type":"number"},{"name":"selectedCategory","type":"string"},{"name":"verdict","type":"string"},{"name":"roundComplete","type":"boolean"}]},{"key":"LEARN_ROUND_COMPLETE","id":"evt_JX9D9BSBPQNVBG1CG6HVD2FD5H","name":"Learn Round Complete","description":"Fired once when the round finishes (the advance past the final item) — the standard learning completion broadcast a celebration/progression sibling (fx cues, badges) rides.","synonyms":"round complete, finished, done, completion","tier":"domain","payloadSchema":[{"name":"score","type":"number"},{"name":"total","type":"number"}]}],"transitions":[{"from":"idle","to":"idle","event":"INIT","eventId":"evt_3WCT8HD6K0K9GF691M6DNYGPH2","guard":["and",["==","@config.matchMode",""],["==","@config.rosterSource","config"]],"effects":[["set","@entity.items","@config.items"],["set","@entity.categories","@config.categories"],["set","@entity.active",true],["set","@entity.title","@config.title"],["set","@entity.itemIndex",0],["set","@entity.correctCount",0],["set","@entity.attemptedCount",0],["set","@entity.selectedCategory",""],["set","@entity.feedback",""],["set","@entity.verdict",""],["set","@entity.roundComplete",false],["set","@entity.running","@config.autoRun"],["set","@entity.elapsedMs",0],["set","@entity.score",0],["set","@entity.totalItems",["array/len","@entity.items"]],["set","@entity.categoryStats",["array/map","@entity.categories",["fn","c",{"category":["object/get","@c","value"],"label":["object/get","@c","label"],"attempted":0,"correct":0}]]],["let",[["item",["array/nth","@entity.items",0]]],["do",["set","@entity.itemText",["object/get","@item","text"]],["set","@entity.itemHint",["object/get","@item","hint",""]],["set","@entity.itemExplanation",["object/get","@item","explanation",""]],["set","@entity.correctCategory",["object/get","@item","category"]]]],["let",[["categoryCount",["array/len","@entity.categories"]],["marginX",30],["marginY",20],["plotWidth",["-","@config.width",["*","@marginX",2]]],["plotHeight",["-","@config.height",["*","@marginY",2]]],["plotBottom",["-","@config.height","@marginY"]],["tierHeight",["/","@plotHeight","@categoryCount"]],["maxWidth",["*","@plotWidth",0.95]],["minWidth",["-","@maxWidth",["*","@config.taper",["-","@maxWidth",["*","@plotWidth",0.3]]]]],["widthStep",["/",["-","@maxWidth","@minWidth"],["math/max",1,["-","@categoryCount",1]]]],["centerX",["/","@config.width",2]],["revealed",["!=","@entity.selectedCategory",""]],["rects",["array/flatten",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["categoryValue",["object/get","@category","value"]],["w",["-","@maxWidth",["*","@i","@widthStep"]]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]],["x",["-","@centerX",["/","@w",2]]],["isCorrectCategory",["==","@categoryValue","@entity.correctCategory"]],["isSelectedCategory",["==","@categoryValue","@entity.selectedCategory"]],["fillColor",["if",["and","@revealed","@isCorrectCategory"],"@config.correctColor",["if",["and","@revealed","@isSelectedCategory"],"@config.incorrectColor",["object/get","@category","color"]]]],["baseRect",{"type":"rect","id":["str/concat","category-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"@fillColor","fillTone":"@fillColor","fillStyle":"tint"}]],["if",["and","@revealed","@isSelectedCategory"],["@baseRect",{"type":"rect","id":["str/concat","category-pick-ring-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"ink","fillStyle":"outline","stroke":"bold","opacity":1}],["@baseRect"]]]]]]],["labels",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]]],{"type":"text","id":["str/concat","category-label-","@i"],"x":"@centerX","y":["+","@yTop",["/","@tierHeight",2],5],"text":["object/get","@category","label"],"textSize":"sm","align":"center","tone":"label"}]]]],["backdropShapes",["array/concat","@rects","@labels"]],["summaryView",[{"type":"typography","variant":"h4","content":"Round Complete"},{"type":"stat-display","label":"Final Score","value":"@entity.correctCount","max":"@entity.attemptedCount"},{"type":"stack","direction":"vertical","gap":"xs","children":["array/map","@entity.categoryStats",["fn","s",{"type":"typography","variant":"body","content":["str/concat",["object/get","@s","label"],": ",["str/concat","",["object/get","@s","correct"]],"/",["str/concat","",["object/get","@s","attempted"]]]}]]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"primary"}]],["itemView",[{"type":"card","variant":"bordered","padding":"md","children":["array/concat",[{"type":"typography","variant":"body","content":"@entity.itemText"}],["if",["and","@config.showHint",["!=","@entity.itemHint",""]],[{"type":"typography","variant":"caption","color":"muted","content":"@entity.itemHint"}],[]]]},{"type":"biology-canvas","width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","nodes":[],"edges":[],"shapes":"@backdropShapes","interactive":"@config.interactive","animate":"@config.animate","keyMap":{"Space":"TOGGLE_RUN","ArrowRight":"ADVANCE","KeyR":"RETRY"}},{"type":"stack","direction":"vertical","gap":"sm","children":["let",[["itemOptions",["object/get",["array/nth","@entity.items","@entity.itemIndex"],"options",[]]],["locked",["!=","@entity.selectedCategory",""]]],["if",[">",["array/len","@itemOptions"],0],["array/map","@itemOptions",["fn","o",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@o","category"]},"label":["object/get","@o","label"],"size":"lg","disabled":"@locked","variant":["if",["not","@locked"],"secondary",["if",["==",["object/get","@o","category"],"@entity.correctCategory"],"success",["if",["==",["object/get","@o","category"],"@entity.selectedCategory"],"danger","ghost"]]]}]],["array/map",["array/reverse","@entity.categories"],["fn","c",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@c","value"]},"label":["object/get","@c","label"],"size":"lg","disabled":"@locked","variant":["if",["not","@locked"],"secondary",["if",["==",["object/get","@c","value"],"@entity.correctCategory"],"success",["if",["==",["object/get","@c","value"],"@entity.selectedCategory"],"danger","ghost"]]]}]]]]},["if",["==","@entity.verdict",""],null,{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","error"],"label":["if",["==","@entity.verdict","correct"],"Correct","Incorrect"]},{"type":"typography","variant":"body","content":"@entity.feedback"}]}],{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"ADVANCE","label":"@config.advanceLabel","icon":"chevron-right","variant":"primary","disabled":["==","@entity.selectedCategory",""]},["if","@entity.running",{"type":"button","action":"TOGGLE_RUN","label":"Pause","icon":"pause","variant":"ghost","aria-pressed":"true"},{"type":"button","action":"TOGGLE_RUN","label":"Auto","icon":"play","variant":"ghost","aria-pressed":"false"}],["if",[">","@config.passScore",0],{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Pass at ","@config.passScore"]},null]]}]]],["do",["set","@entity.backdropShapes","@backdropShapes"],["set","@entity.roundView",["if","@entity.roundComplete","@summaryView","@itemView"]]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.roundComplete","Round complete",["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["str/concat","Score ","@entity.score"],["str/concat","@entity.correctCount"," / ","@entity.attemptedCount"," correct"]]],"variant":["if","@entity.roundComplete","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict","incorrect"],"error","neutral"]]]}]},{"type":"progress-bar","value":["+","@entity.itemIndex",1],"max":"@entity.totalItems","showPercentage":false,"label":["str/concat","Item ",["str/concat","",["+","@entity.itemIndex",1]]," of ",["str/concat","","@entity.totalItems"]]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.roundView"}]}]}]]},{"from":"idle","to":"idle","event":"MODE_SELECTED","eventId":"evt_SB6ERFS6HZK8ZMG0YMMJQQRQ95","guard":["and",["not",["==","@config.matchMode",""]],["not",["==","@payload.mode","@config.matchMode"]]],"effects":[["set","@entity.active",false],["set","@entity.running",false],["render-ui","main",null]]},{"from":"idle","to":"idle","event":"MODE_SELECTED","eventId":"evt_SB6ERFS6HZK8ZMG0YMMJQQRQ95","guard":["and",["==","@payload.mode","@config.matchMode"],["==","@config.rosterSource","config"]],"effects":[["set","@entity.items","@config.items"],["set","@entity.categories","@config.categories"],["set","@entity.active",true],["set","@entity.title","@config.title"],["set","@entity.itemIndex",0],["set","@entity.correctCount",0],["set","@entity.attemptedCount",0],["set","@entity.selectedCategory",""],["set","@entity.feedback",""],["set","@entity.verdict",""],["set","@entity.roundComplete",false],["set","@entity.running","@config.autoRun"],["set","@entity.elapsedMs",0],["set","@entity.score",0],["set","@entity.totalItems",["array/len","@entity.items"]],["set","@entity.categoryStats",["array/map","@entity.categories",["fn","c",{"category":["object/get","@c","value"],"label":["object/get","@c","label"],"attempted":0,"correct":0}]]],["let",[["item",["array/nth","@entity.items",0]]],["do",["set","@entity.itemText",["object/get","@item","text"]],["set","@entity.itemHint",["object/get","@item","hint",""]],["set","@entity.itemExplanation",["object/get","@item","explanation",""]],["set","@entity.correctCategory",["object/get","@item","category"]]]],["let",[["categoryCount",["array/len","@entity.categories"]],["marginX",30],["marginY",20],["plotWidth",["-","@config.width",["*","@marginX",2]]],["plotHeight",["-","@config.height",["*","@marginY",2]]],["plotBottom",["-","@config.height","@marginY"]],["tierHeight",["/","@plotHeight","@categoryCount"]],["maxWidth",["*","@plotWidth",0.95]],["minWidth",["-","@maxWidth",["*","@config.taper",["-","@maxWidth",["*","@plotWidth",0.3]]]]],["widthStep",["/",["-","@maxWidth","@minWidth"],["math/max",1,["-","@categoryCount",1]]]],["centerX",["/","@config.width",2]],["revealed",["!=","@entity.selectedCategory",""]],["rects",["array/flatten",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["categoryValue",["object/get","@category","value"]],["w",["-","@maxWidth",["*","@i","@widthStep"]]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]],["x",["-","@centerX",["/","@w",2]]],["isCorrectCategory",["==","@categoryValue","@entity.correctCategory"]],["isSelectedCategory",["==","@categoryValue","@entity.selectedCategory"]],["fillColor",["if",["and","@revealed","@isCorrectCategory"],"@config.correctColor",["if",["and","@revealed","@isSelectedCategory"],"@config.incorrectColor",["object/get","@category","color"]]]],["baseRect",{"type":"rect","id":["str/concat","category-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"@fillColor","fillTone":"@fillColor","fillStyle":"tint"}]],["if",["and","@revealed","@isSelectedCategory"],["@baseRect",{"type":"rect","id":["str/concat","category-pick-ring-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"ink","fillStyle":"outline","stroke":"bold","opacity":1}],["@baseRect"]]]]]]],["labels",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]]],{"type":"text","id":["str/concat","category-label-","@i"],"x":"@centerX","y":["+","@yTop",["/","@tierHeight",2],5],"text":["object/get","@category","label"],"textSize":"sm","align":"center","tone":"label"}]]]],["backdropShapes",["array/concat","@rects","@labels"]],["summaryView",[{"type":"typography","variant":"h4","content":"Round Complete"},{"type":"stat-display","label":"Final Score","value":"@entity.correctCount","max":"@entity.attemptedCount"},{"type":"stack","direction":"vertical","gap":"xs","children":["array/map","@entity.categoryStats",["fn","s",{"type":"typography","variant":"body","content":["str/concat",["object/get","@s","label"],": ",["str/concat","",["object/get","@s","correct"]],"/",["str/concat","",["object/get","@s","attempted"]]]}]]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"primary"}]],["itemView",[{"type":"card","variant":"bordered","padding":"md","children":["array/concat",[{"type":"typography","variant":"body","content":"@entity.itemText"}],["if",["and","@config.showHint",["!=","@entity.itemHint",""]],[{"type":"typography","variant":"caption","color":"muted","content":"@entity.itemHint"}],[]]]},{"type":"biology-canvas","width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","nodes":[],"edges":[],"shapes":"@backdropShapes","interactive":"@config.interactive","animate":"@config.animate","keyMap":{"Space":"TOGGLE_RUN","ArrowRight":"ADVANCE","KeyR":"RETRY"}},{"type":"stack","direction":"horizontal","gap":"xs","children":["let",[["itemOptions",["object/get",["array/nth","@entity.items","@entity.itemIndex"],"options",[]]]],["if",[">",["array/len","@itemOptions"],0],["array/map","@itemOptions",["fn","o",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@o","category"]},"label":["object/get","@o","label"],"variant":["if",["==","@entity.selectedCategory",["object/get","@o","category"]],"primary","secondary"],"size":"sm"}]],["array/map",["array/reverse","@entity.categories"],["fn","c",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@c","value"]},"label":["object/get","@c","label"],"variant":["if",["==","@entity.selectedCategory",["object/get","@c","value"]],"primary","secondary"],"size":"sm"}]]]]},{"type":"stack","direction":"horizontal","gap":"xs","children":["array/concat",["if",["!=","@entity.verdict",""],[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","danger"],"label":["if",["==","@entity.verdict","correct"],"Correct","Incorrect"]}],[]],[{"type":"typography","variant":"caption","content":"@entity.feedback"}]]},{"type":"stack","direction":"horizontal","gap":"sm","children":[{"type":"button","action":"ADVANCE","label":"@config.advanceLabel","variant":"primary","disabled":["if",["==","@entity.selectedCategory",""],true,false]},{"type":"button","action":"TOGGLE_RUN","label":["if","@entity.running","Pause","Auto"],"variant":"ghost"}]},{"type":"stat-display","label":["if",[">","@config.passScore",0],["str/concat","Score — pass at ","@config.passScore"],"Score"],"value":["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],"@entity.score","@entity.correctCount"],"max":["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["if",[">","@config.scoreCap",0],"@config.scoreCap",["*","@entity.totalItems","@config.pointsPerCorrect"]],"@entity.attemptedCount"]}]]],["do",["set","@entity.backdropShapes","@backdropShapes"],["set","@entity.roundView",["if","@entity.roundComplete","@summaryView","@itemView"]]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.roundComplete","Round complete",["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["str/concat","Score ","@entity.score"],["str/concat","@entity.correctCount"," / ","@entity.attemptedCount"," correct"]]],"variant":["if","@entity.roundComplete","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict","incorrect"],"error","neutral"]]]}]},{"type":"progress-bar","value":["+","@entity.itemIndex",1],"max":"@entity.totalItems","showPercentage":false,"label":["str/concat","Item ",["str/concat","",["+","@entity.itemIndex",1]]," of ",["str/concat","","@entity.totalItems"]]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.roundView"}]}]}]]},{"from":"idle","to":"idle","event":"ROSTER_LOADED","eventId":"evt_R2NCYM9KCTSPDFRRFRWPFDHQBN","guard":["and",["==","@config.rosterSource","event"],["and",["==","@payload.mode","@config.matchMode"],["and",[">",["array/len","@payload.items"],0],[">",["array/len","@payload.categories"],0]]]],"effects":[["set","@entity.items","@payload.items"],["set","@entity.categories","@payload.categories"],["set","@entity.active",true],["set","@entity.title","@config.title"],["set","@entity.itemIndex",0],["set","@entity.correctCount",0],["set","@entity.attemptedCount",0],["set","@entity.selectedCategory",""],["set","@entity.feedback",""],["set","@entity.verdict",""],["set","@entity.roundComplete",false],["set","@entity.running","@config.autoRun"],["set","@entity.elapsedMs",0],["set","@entity.score",0],["set","@entity.totalItems",["array/len","@entity.items"]],["set","@entity.categoryStats",["array/map","@entity.categories",["fn","c",{"category":["object/get","@c","value"],"label":["object/get","@c","label"],"attempted":0,"correct":0}]]],["let",[["item",["array/nth","@entity.items",0]]],["do",["set","@entity.itemText",["object/get","@item","text"]],["set","@entity.itemHint",["object/get","@item","hint",""]],["set","@entity.itemExplanation",["object/get","@item","explanation",""]],["set","@entity.correctCategory",["object/get","@item","category"]]]],["let",[["categoryCount",["array/len","@entity.categories"]],["marginX",30],["marginY",20],["plotWidth",["-","@config.width",["*","@marginX",2]]],["plotHeight",["-","@config.height",["*","@marginY",2]]],["plotBottom",["-","@config.height","@marginY"]],["tierHeight",["/","@plotHeight","@categoryCount"]],["maxWidth",["*","@plotWidth",0.95]],["minWidth",["-","@maxWidth",["*","@config.taper",["-","@maxWidth",["*","@plotWidth",0.3]]]]],["widthStep",["/",["-","@maxWidth","@minWidth"],["math/max",1,["-","@categoryCount",1]]]],["centerX",["/","@config.width",2]],["revealed",["!=","@entity.selectedCategory",""]],["rects",["array/flatten",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["categoryValue",["object/get","@category","value"]],["w",["-","@maxWidth",["*","@i","@widthStep"]]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]],["x",["-","@centerX",["/","@w",2]]],["isCorrectCategory",["==","@categoryValue","@entity.correctCategory"]],["isSelectedCategory",["==","@categoryValue","@entity.selectedCategory"]],["fillColor",["if",["and","@revealed","@isCorrectCategory"],"@config.correctColor",["if",["and","@revealed","@isSelectedCategory"],"@config.incorrectColor",["object/get","@category","color"]]]],["baseRect",{"type":"rect","id":["str/concat","category-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"@fillColor","fillTone":"@fillColor","fillStyle":"tint"}]],["if",["and","@revealed","@isSelectedCategory"],["@baseRect",{"type":"rect","id":["str/concat","category-pick-ring-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"ink","fillStyle":"outline","stroke":"bold","opacity":1}],["@baseRect"]]]]]]],["labels",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]]],{"type":"text","id":["str/concat","category-label-","@i"],"x":"@centerX","y":["+","@yTop",["/","@tierHeight",2],5],"text":["object/get","@category","label"],"textSize":"sm","align":"center","tone":"label"}]]]],["backdropShapes",["array/concat","@rects","@labels"]],["summaryView",[{"type":"typography","variant":"h4","content":"Round Complete"},{"type":"stat-display","label":"Final Score","value":"@entity.correctCount","max":"@entity.attemptedCount"},{"type":"stack","direction":"vertical","gap":"xs","children":["array/map","@entity.categoryStats",["fn","s",{"type":"typography","variant":"body","content":["str/concat",["object/get","@s","label"],": ",["str/concat","",["object/get","@s","correct"]],"/",["str/concat","",["object/get","@s","attempted"]]]}]]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"primary"}]],["itemView",[{"type":"card","variant":"bordered","padding":"md","children":["array/concat",[{"type":"typography","variant":"body","content":"@entity.itemText"}],["if",["and","@config.showHint",["!=","@entity.itemHint",""]],[{"type":"typography","variant":"caption","color":"muted","content":"@entity.itemHint"}],[]]]},{"type":"biology-canvas","width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","nodes":[],"edges":[],"shapes":"@backdropShapes","interactive":"@config.interactive","animate":"@config.animate","keyMap":{"Space":"TOGGLE_RUN","ArrowRight":"ADVANCE","KeyR":"RETRY"}},{"type":"stack","direction":"vertical","gap":"sm","children":["let",[["itemOptions",["object/get",["array/nth","@entity.items","@entity.itemIndex"],"options",[]]],["locked",["!=","@entity.selectedCategory",""]]],["if",[">",["array/len","@itemOptions"],0],["array/map","@itemOptions",["fn","o",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@o","category"]},"label":["object/get","@o","label"],"size":"lg","disabled":"@locked","variant":["if",["not","@locked"],"secondary",["if",["==",["object/get","@o","category"],"@entity.correctCategory"],"success",["if",["==",["object/get","@o","category"],"@entity.selectedCategory"],"danger","ghost"]]]}]],["array/map",["array/reverse","@entity.categories"],["fn","c",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@c","value"]},"label":["object/get","@c","label"],"size":"lg","disabled":"@locked","variant":["if",["not","@locked"],"secondary",["if",["==",["object/get","@c","value"],"@entity.correctCategory"],"success",["if",["==",["object/get","@c","value"],"@entity.selectedCategory"],"danger","ghost"]]]}]]]]},["if",["==","@entity.verdict",""],null,{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","error"],"label":["if",["==","@entity.verdict","correct"],"Correct","Incorrect"]},{"type":"typography","variant":"body","content":"@entity.feedback"}]}],{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"ADVANCE","label":"@config.advanceLabel","icon":"chevron-right","variant":"primary","disabled":["==","@entity.selectedCategory",""]},["if","@entity.running",{"type":"button","action":"TOGGLE_RUN","label":"Pause","icon":"pause","variant":"ghost","aria-pressed":"true"},{"type":"button","action":"TOGGLE_RUN","label":"Auto","icon":"play","variant":"ghost","aria-pressed":"false"}],["if",[">","@config.passScore",0],{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Pass at ","@config.passScore"]},null]]}]]],["do",["set","@entity.backdropShapes","@backdropShapes"],["set","@entity.roundView",["if","@entity.roundComplete","@summaryView","@itemView"]]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.roundComplete","Round complete",["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["str/concat","Score ","@entity.score"],["str/concat","@entity.correctCount"," / ","@entity.attemptedCount"," correct"]]],"variant":["if","@entity.roundComplete","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict","incorrect"],"error","neutral"]]]}]},{"type":"progress-bar","value":["+","@entity.itemIndex",1],"max":"@entity.totalItems","showPercentage":false,"label":["str/concat","Item ",["str/concat","",["+","@entity.itemIndex",1]]," of ",["str/concat","","@entity.totalItems"]]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.roundView"}]}]}]]},{"from":"idle","to":"idle","event":"ROSTER_LOADED","eventId":"evt_R2NCYM9KCTSPDFRRFRWPFDHQBN","guard":["and",["==","@config.rosterSource","event"],["not",["==","@payload.mode","@config.matchMode"]]],"effects":[["set","@entity.active",false],["set","@entity.running",false],["render-ui","main",null]]},{"from":"idle","to":"idle","event":"PICK","eventId":"evt_9MXFB29J3NS1TWYQD9YPVQ1TNC","guard":["and",["==","@entity.active",true],["==","@entity.roundComplete",false]],"effects":[["set","@entity.selectedCategory","@payload.category"],["let",[["isCorrect",["==","@entity.selectedCategory","@entity.correctCategory"]],["correctOption",["array/first",["array/filter","@entity.categories",["fn","c",["==",["object/get","@c","value"],"@entity.correctCategory"]]]]],["baseMessage",["if","@isCorrect","Correct!",["str/concat","Not quite — the correct answer is ",["object/get","@correctOption","label"],"."]]],["fullMessage",["if",["!=","@entity.itemExplanation",""],["str/concat","@baseMessage"," ","@entity.itemExplanation"],"@baseMessage"]]],["do",["set","@entity.attemptedCount",["+","@entity.attemptedCount",1]],["set","@entity.correctCount",["if","@isCorrect",["+","@entity.correctCount",1],"@entity.correctCount"]],["set","@entity.score",["let",[["raw",["if","@isCorrect",["+","@entity.score","@config.pointsPerCorrect"],["-","@entity.score","@config.penaltyPerMiss"]]]],["math/max",0,["if",[">","@config.scoreCap",0],["math/min","@raw","@config.scoreCap"],"@raw"]]]],["set","@entity.verdict",["if","@isCorrect","correct","incorrect"]],["set","@entity.feedback","@fullMessage"]]],["set","@entity.categoryStats",["array/map","@entity.categoryStats",["fn","s",["if",["==",["object/get","@s","category"],"@entity.correctCategory"],["object/merge","@s",{"attempted":["+",["object/get","@s","attempted"],1],"correct":["if",["==","@entity.selectedCategory","@entity.correctCategory"],["+",["object/get","@s","correct"],1],["object/get","@s","correct"]]}],"@s"]]]],["let",[["categoryCount",["array/len","@entity.categories"]],["marginX",30],["marginY",20],["plotWidth",["-","@config.width",["*","@marginX",2]]],["plotHeight",["-","@config.height",["*","@marginY",2]]],["plotBottom",["-","@config.height","@marginY"]],["tierHeight",["/","@plotHeight","@categoryCount"]],["maxWidth",["*","@plotWidth",0.95]],["minWidth",["-","@maxWidth",["*","@config.taper",["-","@maxWidth",["*","@plotWidth",0.3]]]]],["widthStep",["/",["-","@maxWidth","@minWidth"],["math/max",1,["-","@categoryCount",1]]]],["centerX",["/","@config.width",2]],["revealed",["!=","@entity.selectedCategory",""]],["rects",["array/flatten",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["categoryValue",["object/get","@category","value"]],["w",["-","@maxWidth",["*","@i","@widthStep"]]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]],["x",["-","@centerX",["/","@w",2]]],["isCorrectCategory",["==","@categoryValue","@entity.correctCategory"]],["isSelectedCategory",["==","@categoryValue","@entity.selectedCategory"]],["fillColor",["if",["and","@revealed","@isCorrectCategory"],"@config.correctColor",["if",["and","@revealed","@isSelectedCategory"],"@config.incorrectColor",["object/get","@category","color"]]]],["baseRect",{"type":"rect","id":["str/concat","category-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"@fillColor","fillTone":"@fillColor","fillStyle":"tint"}]],["if",["and","@revealed","@isSelectedCategory"],["@baseRect",{"type":"rect","id":["str/concat","category-pick-ring-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"ink","fillStyle":"outline","stroke":"bold","opacity":1}],["@baseRect"]]]]]]],["labels",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]]],{"type":"text","id":["str/concat","category-label-","@i"],"x":"@centerX","y":["+","@yTop",["/","@tierHeight",2],5],"text":["object/get","@category","label"],"textSize":"sm","align":"center","tone":"label"}]]]],["backdropShapes",["array/concat","@rects","@labels"]],["summaryView",[{"type":"typography","variant":"h4","content":"Round Complete"},{"type":"stat-display","label":"Final Score","value":"@entity.correctCount","max":"@entity.attemptedCount"},{"type":"stack","direction":"vertical","gap":"xs","children":["array/map","@entity.categoryStats",["fn","s",{"type":"typography","variant":"body","content":["str/concat",["object/get","@s","label"],": ",["str/concat","",["object/get","@s","correct"]],"/",["str/concat","",["object/get","@s","attempted"]]]}]]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"primary"}]],["itemView",[{"type":"card","variant":"bordered","padding":"md","children":["array/concat",[{"type":"typography","variant":"body","content":"@entity.itemText"}],["if",["and","@config.showHint",["!=","@entity.itemHint",""]],[{"type":"typography","variant":"caption","color":"muted","content":"@entity.itemHint"}],[]]]},{"type":"biology-canvas","width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","nodes":[],"edges":[],"shapes":"@backdropShapes","interactive":"@config.interactive","animate":"@config.animate","keyMap":{"Space":"TOGGLE_RUN","ArrowRight":"ADVANCE","KeyR":"RETRY"}},{"type":"stack","direction":"horizontal","gap":"xs","children":["let",[["itemOptions",["object/get",["array/nth","@entity.items","@entity.itemIndex"],"options",[]]]],["if",[">",["array/len","@itemOptions"],0],["array/map","@itemOptions",["fn","o",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@o","category"]},"label":["object/get","@o","label"],"variant":["if",["==","@entity.selectedCategory",["object/get","@o","category"]],"primary","secondary"],"size":"sm"}]],["array/map",["array/reverse","@entity.categories"],["fn","c",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@c","value"]},"label":["object/get","@c","label"],"variant":["if",["==","@entity.selectedCategory",["object/get","@c","value"]],"primary","secondary"],"size":"sm"}]]]]},{"type":"stack","direction":"horizontal","gap":"xs","children":["array/concat",["if",["!=","@entity.verdict",""],[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","danger"],"label":["if",["==","@entity.verdict","correct"],"Correct","Incorrect"]}],[]],[{"type":"typography","variant":"caption","content":"@entity.feedback"}]]},{"type":"stack","direction":"horizontal","gap":"sm","children":[{"type":"button","action":"ADVANCE","label":"@config.advanceLabel","variant":"primary","disabled":["if",["==","@entity.selectedCategory",""],true,false]},{"type":"button","action":"TOGGLE_RUN","label":["if","@entity.running","Pause","Auto"],"variant":"ghost"}]},{"type":"stat-display","label":["if",[">","@config.passScore",0],["str/concat","Score — pass at ","@config.passScore"],"Score"],"value":["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],"@entity.score","@entity.correctCount"],"max":["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["if",[">","@config.scoreCap",0],"@config.scoreCap",["*","@entity.totalItems","@config.pointsPerCorrect"]],"@entity.attemptedCount"]}]]],["do",["set","@entity.backdropShapes","@backdropShapes"],["set","@entity.roundView",["if","@entity.roundComplete","@summaryView","@itemView"]]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.roundComplete","Round complete",["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["str/concat","Score ","@entity.score"],["str/concat","@entity.correctCount"," / ","@entity.attemptedCount"," correct"]]],"variant":["if","@entity.roundComplete","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict","incorrect"],"error","neutral"]]]}]},{"type":"progress-bar","value":["+","@entity.itemIndex",1],"max":"@entity.totalItems","showPercentage":false,"label":["str/concat","Item ",["str/concat","",["+","@entity.itemIndex",1]]," of ",["str/concat","","@entity.totalItems"]]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.roundView"}]}]}],["emit","CLASSIFY_UPDATED",{"itemIndex":"@entity.itemIndex","correctCount":"@entity.correctCount","attemptedCount":"@entity.attemptedCount","selectedCategory":"@entity.selectedCategory","verdict":"@entity.verdict","roundComplete":"@entity.roundComplete"}]]},{"from":"idle","to":"idle","event":"ADVANCE","eventId":"evt_KG3DKRRQJYBSF0XKJ1MY3WV2YJ","guard":["and",["==","@entity.active",true],["==","@entity.roundComplete",false]],"effects":[["if",["and",["not","@config.loopRound"],[">=",["+","@entity.itemIndex","@config.orderStride"],"@entity.totalItems"]],["emit","LEARN_ROUND_COMPLETE",{"score":"@entity.correctCount","total":"@entity.totalItems"}],null],["let",[["isLast",["and",["not","@config.loopRound"],[">=",["+","@entity.itemIndex","@config.orderStride"],"@entity.totalItems"]]]],["if","@isLast",["do",["set","@entity.roundComplete",true],["set","@entity.selectedCategory",""],["set","@entity.feedback",""],["set","@entity.verdict",""]],["let",[["nextIndex",["if","@config.loopRound",["math/mod",["+","@entity.itemIndex","@config.orderStride"],"@entity.totalItems"],["+","@entity.itemIndex","@config.orderStride"]]],["item",["array/nth","@entity.items","@nextIndex"]]],["do",["set","@entity.itemIndex","@nextIndex"],["set","@entity.itemText",["object/get","@item","text"]],["set","@entity.itemHint",["object/get","@item","hint",""]],["set","@entity.itemExplanation",["object/get","@item","explanation",""]],["set","@entity.correctCategory",["object/get","@item","category"]],["set","@entity.selectedCategory",""],["set","@entity.feedback",""],["set","@entity.verdict",""]]]]],["let",[["categoryCount",["array/len","@entity.categories"]],["marginX",30],["marginY",20],["plotWidth",["-","@config.width",["*","@marginX",2]]],["plotHeight",["-","@config.height",["*","@marginY",2]]],["plotBottom",["-","@config.height","@marginY"]],["tierHeight",["/","@plotHeight","@categoryCount"]],["maxWidth",["*","@plotWidth",0.95]],["minWidth",["-","@maxWidth",["*","@config.taper",["-","@maxWidth",["*","@plotWidth",0.3]]]]],["widthStep",["/",["-","@maxWidth","@minWidth"],["math/max",1,["-","@categoryCount",1]]]],["centerX",["/","@config.width",2]],["revealed",["!=","@entity.selectedCategory",""]],["rects",["array/flatten",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["categoryValue",["object/get","@category","value"]],["w",["-","@maxWidth",["*","@i","@widthStep"]]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]],["x",["-","@centerX",["/","@w",2]]],["isCorrectCategory",["==","@categoryValue","@entity.correctCategory"]],["isSelectedCategory",["==","@categoryValue","@entity.selectedCategory"]],["fillColor",["if",["and","@revealed","@isCorrectCategory"],"@config.correctColor",["if",["and","@revealed","@isSelectedCategory"],"@config.incorrectColor",["object/get","@category","color"]]]],["baseRect",{"type":"rect","id":["str/concat","category-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"@fillColor","fillTone":"@fillColor","fillStyle":"tint"}]],["if",["and","@revealed","@isSelectedCategory"],["@baseRect",{"type":"rect","id":["str/concat","category-pick-ring-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"ink","fillStyle":"outline","stroke":"bold","opacity":1}],["@baseRect"]]]]]]],["labels",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]]],{"type":"text","id":["str/concat","category-label-","@i"],"x":"@centerX","y":["+","@yTop",["/","@tierHeight",2],5],"text":["object/get","@category","label"],"textSize":"sm","align":"center","tone":"label"}]]]],["backdropShapes",["array/concat","@rects","@labels"]],["summaryView",[{"type":"typography","variant":"h4","content":"Round Complete"},{"type":"stat-display","label":"Final Score","value":"@entity.correctCount","max":"@entity.attemptedCount"},{"type":"stack","direction":"vertical","gap":"xs","children":["array/map","@entity.categoryStats",["fn","s",{"type":"typography","variant":"body","content":["str/concat",["object/get","@s","label"],": ",["str/concat","",["object/get","@s","correct"]],"/",["str/concat","",["object/get","@s","attempted"]]]}]]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"primary"}]],["itemView",[{"type":"card","variant":"bordered","padding":"md","children":["array/concat",[{"type":"typography","variant":"body","content":"@entity.itemText"}],["if",["and","@config.showHint",["!=","@entity.itemHint",""]],[{"type":"typography","variant":"caption","color":"muted","content":"@entity.itemHint"}],[]]]},{"type":"biology-canvas","width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","nodes":[],"edges":[],"shapes":"@backdropShapes","interactive":"@config.interactive","animate":"@config.animate","keyMap":{"Space":"TOGGLE_RUN","ArrowRight":"ADVANCE","KeyR":"RETRY"}},{"type":"stack","direction":"horizontal","gap":"xs","children":["let",[["itemOptions",["object/get",["array/nth","@entity.items","@entity.itemIndex"],"options",[]]]],["if",[">",["array/len","@itemOptions"],0],["array/map","@itemOptions",["fn","o",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@o","category"]},"label":["object/get","@o","label"],"variant":["if",["==","@entity.selectedCategory",["object/get","@o","category"]],"primary","secondary"],"size":"sm"}]],["array/map",["array/reverse","@entity.categories"],["fn","c",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@c","value"]},"label":["object/get","@c","label"],"variant":["if",["==","@entity.selectedCategory",["object/get","@c","value"]],"primary","secondary"],"size":"sm"}]]]]},{"type":"stack","direction":"horizontal","gap":"xs","children":["array/concat",["if",["!=","@entity.verdict",""],[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","danger"],"label":["if",["==","@entity.verdict","correct"],"Correct","Incorrect"]}],[]],[{"type":"typography","variant":"caption","content":"@entity.feedback"}]]},{"type":"stack","direction":"horizontal","gap":"sm","children":[{"type":"button","action":"ADVANCE","label":"@config.advanceLabel","variant":"primary","disabled":["if",["==","@entity.selectedCategory",""],true,false]},{"type":"button","action":"TOGGLE_RUN","label":["if","@entity.running","Pause","Auto"],"variant":"ghost"}]},{"type":"stat-display","label":["if",[">","@config.passScore",0],["str/concat","Score — pass at ","@config.passScore"],"Score"],"value":["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],"@entity.score","@entity.correctCount"],"max":["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["if",[">","@config.scoreCap",0],"@config.scoreCap",["*","@entity.totalItems","@config.pointsPerCorrect"]],"@entity.attemptedCount"]}]]],["do",["set","@entity.backdropShapes","@backdropShapes"],["set","@entity.roundView",["if","@entity.roundComplete","@summaryView","@itemView"]]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.roundComplete","Round complete",["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["str/concat","Score ","@entity.score"],["str/concat","@entity.correctCount"," / ","@entity.attemptedCount"," correct"]]],"variant":["if","@entity.roundComplete","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict","incorrect"],"error","neutral"]]]}]},{"type":"progress-bar","value":["+","@entity.itemIndex",1],"max":"@entity.totalItems","showPercentage":false,"label":["str/concat","Item ",["str/concat","",["+","@entity.itemIndex",1]]," of ",["str/concat","","@entity.totalItems"]]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.roundView"}]}]}],["emit","CLASSIFY_UPDATED",{"itemIndex":"@entity.itemIndex","correctCount":"@entity.correctCount","attemptedCount":"@entity.attemptedCount","selectedCategory":"@entity.selectedCategory","verdict":"@entity.verdict","roundComplete":"@entity.roundComplete"}]]},{"from":"idle","to":"idle","event":"RETRY","eventId":"evt_6E91HTP1DJ0PS281JABJX4VCXX","guard":["==","@entity.roundComplete",true],"effects":[["set","@entity.active",true],["set","@entity.running","@config.autoRun"],["set","@entity.elapsedMs",0],["set","@entity.score",0],["set","@entity.itemIndex",0],["set","@entity.correctCount",0],["set","@entity.attemptedCount",0],["set","@entity.selectedCategory",""],["set","@entity.feedback",""],["set","@entity.verdict",""],["set","@entity.roundComplete",false],["set","@entity.categoryStats",["array/map","@entity.categories",["fn","c",{"category":["object/get","@c","value"],"label":["object/get","@c","label"],"attempted":0,"correct":0}]]],["let",[["item",["array/nth","@entity.items",0]]],["do",["set","@entity.itemText",["object/get","@item","text"]],["set","@entity.itemHint",["object/get","@item","hint",""]],["set","@entity.itemExplanation",["object/get","@item","explanation",""]],["set","@entity.correctCategory",["object/get","@item","category"]]]],["let",[["categoryCount",["array/len","@entity.categories"]],["marginX",30],["marginY",20],["plotWidth",["-","@config.width",["*","@marginX",2]]],["plotHeight",["-","@config.height",["*","@marginY",2]]],["plotBottom",["-","@config.height","@marginY"]],["tierHeight",["/","@plotHeight","@categoryCount"]],["maxWidth",["*","@plotWidth",0.95]],["minWidth",["-","@maxWidth",["*","@config.taper",["-","@maxWidth",["*","@plotWidth",0.3]]]]],["widthStep",["/",["-","@maxWidth","@minWidth"],["math/max",1,["-","@categoryCount",1]]]],["centerX",["/","@config.width",2]],["revealed",["!=","@entity.selectedCategory",""]],["rects",["array/flatten",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["categoryValue",["object/get","@category","value"]],["w",["-","@maxWidth",["*","@i","@widthStep"]]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]],["x",["-","@centerX",["/","@w",2]]],["isCorrectCategory",["==","@categoryValue","@entity.correctCategory"]],["isSelectedCategory",["==","@categoryValue","@entity.selectedCategory"]],["fillColor",["if",["and","@revealed","@isCorrectCategory"],"@config.correctColor",["if",["and","@revealed","@isSelectedCategory"],"@config.incorrectColor",["object/get","@category","color"]]]],["baseRect",{"type":"rect","id":["str/concat","category-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"@fillColor","fillTone":"@fillColor","fillStyle":"tint"}]],["if",["and","@revealed","@isSelectedCategory"],["@baseRect",{"type":"rect","id":["str/concat","category-pick-ring-","@i"],"x":"@x","y":"@yTop","width":"@w","height":"@tierHeight","tone":"ink","fillStyle":"outline","stroke":"bold","opacity":1}],["@baseRect"]]]]]]],["labels",["array/map",["array/range","@categoryCount"],["fn","i",["let",[["category",["array/nth","@entity.categories","@i"]],["yTop",["-","@plotBottom",["*",["+","@i",1],"@tierHeight"]]]],{"type":"text","id":["str/concat","category-label-","@i"],"x":"@centerX","y":["+","@yTop",["/","@tierHeight",2],5],"text":["object/get","@category","label"],"textSize":"sm","align":"center","tone":"label"}]]]],["backdropShapes",["array/concat","@rects","@labels"]],["summaryView",[{"type":"typography","variant":"h4","content":"Round Complete"},{"type":"stat-display","label":"Final Score","value":"@entity.correctCount","max":"@entity.attemptedCount"},{"type":"stack","direction":"vertical","gap":"xs","children":["array/map","@entity.categoryStats",["fn","s",{"type":"typography","variant":"body","content":["str/concat",["object/get","@s","label"],": ",["str/concat","",["object/get","@s","correct"]],"/",["str/concat","",["object/get","@s","attempted"]]]}]]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"primary"}]],["itemView",[{"type":"card","variant":"bordered","padding":"md","children":["array/concat",[{"type":"typography","variant":"body","content":"@entity.itemText"}],["if",["and","@config.showHint",["!=","@entity.itemHint",""]],[{"type":"typography","variant":"caption","color":"muted","content":"@entity.itemHint"}],[]]]},{"type":"biology-canvas","width":"@config.width","height":"@config.height","backgroundColor":"@config.backgroundColor","nodes":[],"edges":[],"shapes":"@backdropShapes","interactive":"@config.interactive","animate":"@config.animate","keyMap":{"Space":"TOGGLE_RUN","ArrowRight":"ADVANCE","KeyR":"RETRY"}},{"type":"stack","direction":"horizontal","gap":"xs","children":["let",[["itemOptions",["object/get",["array/nth","@entity.items","@entity.itemIndex"],"options",[]]]],["if",[">",["array/len","@itemOptions"],0],["array/map","@itemOptions",["fn","o",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@o","category"]},"label":["object/get","@o","label"],"variant":["if",["==","@entity.selectedCategory",["object/get","@o","category"]],"primary","secondary"],"size":"sm"}]],["array/map",["array/reverse","@entity.categories"],["fn","c",{"type":"button","action":"PICK","actionPayload":{"category":["object/get","@c","value"]},"label":["object/get","@c","label"],"variant":["if",["==","@entity.selectedCategory",["object/get","@c","value"]],"primary","secondary"],"size":"sm"}]]]]},{"type":"stack","direction":"horizontal","gap":"xs","children":["array/concat",["if",["!=","@entity.verdict",""],[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","danger"],"label":["if",["==","@entity.verdict","correct"],"Correct","Incorrect"]}],[]],[{"type":"typography","variant":"caption","content":"@entity.feedback"}]]},{"type":"stack","direction":"horizontal","gap":"sm","children":[{"type":"button","action":"ADVANCE","label":"@config.advanceLabel","variant":"primary","disabled":["if",["==","@entity.selectedCategory",""],true,false]},{"type":"button","action":"TOGGLE_RUN","label":["if","@entity.running","Pause","Auto"],"variant":"ghost"}]},{"type":"stat-display","label":["if",[">","@config.passScore",0],["str/concat","Score — pass at ","@config.passScore"],"Score"],"value":["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],"@entity.score","@entity.correctCount"],"max":["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["if",[">","@config.scoreCap",0],"@config.scoreCap",["*","@entity.totalItems","@config.pointsPerCorrect"]],"@entity.attemptedCount"]}]]],["do",["set","@entity.backdropShapes","@backdropShapes"],["set","@entity.roundView",["if","@entity.roundComplete","@summaryView","@itemView"]]]],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.roundComplete","Round complete",["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["str/concat","Score ","@entity.score"],["str/concat","@entity.correctCount"," / ","@entity.attemptedCount"," correct"]]],"variant":["if","@entity.roundComplete","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict","incorrect"],"error","neutral"]]]}]},{"type":"progress-bar","value":["+","@entity.itemIndex",1],"max":"@entity.totalItems","showPercentage":false,"label":["str/concat","Item ",["str/concat","",["+","@entity.itemIndex",1]]," of ",["str/concat","","@entity.totalItems"]]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.roundView"}]}]}],["emit","CLASSIFY_UPDATED",{"itemIndex":"@entity.itemIndex","correctCount":"@entity.correctCount","attemptedCount":"@entity.attemptedCount","selectedCategory":"@entity.selectedCategory","verdict":"@entity.verdict","roundComplete":"@entity.roundComplete"}]]},{"from":"idle","to":"idle","event":"TOGGLE_RUN","eventId":"evt_CD3SWSP2A5152KXMZ9RMBQTDTP","guard":["and",["==","@entity.active",true],["==","@entity.roundComplete",false]],"effects":[["set","@entity.running",["not","@entity.running"]],["set","@entity.elapsedMs",0],["render-ui","main",{"type":"box","padding":"md","children":[{"type":"stack","direction":"vertical","gap":"md","children":[{"type":"stack","direction":"horizontal","justify":"between","align":"start","gap":"md","children":[{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"typography","variant":"h4","content":"@entity.title"},["if",["==","@config.summary",""],null,{"type":"typography","variant":"body2","color":"muted","content":"@config.summary"}]]},{"type":"badge","label":["if","@entity.roundComplete","Round complete",["if",["or",["!=","@config.pointsPerCorrect",1],[">","@config.penaltyPerMiss",0]],["str/concat","Score ","@entity.score"],["str/concat","@entity.correctCount"," / ","@entity.attemptedCount"," correct"]]],"variant":["if","@entity.roundComplete","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict","incorrect"],"error","neutral"]]]}]},{"type":"progress-bar","value":["+","@entity.itemIndex",1],"max":"@entity.totalItems","showPercentage":false,"label":["str/concat","Item ",["str/concat","",["+","@entity.itemIndex",1]]," of ",["str/concat","","@entity.totalItems"]]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.roundView"}]}]}]]}]},"ticks":[{"name":"advanceTick","interval":32,"guard":["and",["==","@entity.active",true],["and",["==","@entity.running",true],["==","@entity.roundComplete",false]]],"effects":[["set","@entity.elapsedMs",["+","@entity.elapsedMs",32]],["when",[">=","@entity.elapsedMs","@config.advanceMs"],["do",["set","@entity.elapsedMs",0],["emit","ADVANCE",{}]]]]}],"config":{"correctColor":{"type":"string","default":"success","label":"Correct Highlight Color","description":"Fill color for the correct category once the learner has picked.","tier":"presentation"},"passScore":{"type":"number","default":0,"label":"Pass Score","description":"Target score shown next to the running score as \"pass at N\"; 0 hides the target.","tier":"domain"},"pointsPerCorrect":{"type":"number","default":1,"label":"Points Per Correct","description":"Rubric points added to the score for each correct pick; at the default 1 with no penalty, the plain correct/attempted counts render instead of the rubric score.","tier":"domain"},"title":{"type":"string","default":"Classify","label":"Title","description":"Title shown above the instrument.","tier":"presentation"},"advanceLabel":{"type":"string","default":"Next","label":"Advance Button Label","description":"Label text for the button that advances to the next item.","tier":"presentation"},"retryLabel":{"type":"string","default":"Retry Round","label":"Retry Button Label","description":"Label text for the button that restarts the round from the end-of-round summary.","tier":"presentation"},"rosterSource":{"type":"string","default":"config","label":"Roster Source","description":"Where the roster comes from: config reads the items/categories knob(s) at INIT; event waits for ROSTER_LOADED and takes the roster from its payload.","tier":"domain","values":["config","event"]},"categories":{"type":"[LearnClassifyOption]","default":[{"value":"a","label":"Category A","color":"series-1"},{"value":"b","label":"Category B","color":"series-2"}],"label":"Categories","description":"Ordered bottom-to-top roster of category buckets (value/label/color) used to render the stacked backdrop and the pick buttons; order determines the backdrop's stacking, widest at the bottom to narrowest at the top.","synonyms":"category, bucket, class, tier, level, classification, roster","tier":"domain","items":{"type":"object","properties":{"value":{"name":"value","type":"string","required":true},"label":{"name":"label","type":"string","required":true},"color":{"name":"color","type":"string","required":true}}}},"showHint":{"type":"boolean","default":true,"label":"Show Hint","description":"Show each item's hint line beneath the prompt before the learner picks; hide for a harder drill.","tier":"domain"},"matchMode":{"type":"string","default":"","label":"Match Mode","description":"When composed behind a lab router, the MODE_SELECTED mode value this instrument responds to. Empty string means standalone — render immediately on INIT.","tier":"presentation"},"width":{"type":"number","default":640,"label":"Width","description":"Canvas width in pixels.","tier":"presentation"},"animate":{"type":"boolean","default":false,"label":"Animate","description":"Enable continuous redraw loop.","tier":"presentation"},"advanceMs":{"type":"number","default":900,"label":"Auto-Advance Interval (ms)","description":"Milliseconds between automatic advances while running — the 32ms base tick accumulates elapsed time and fires ADVANCE each time this interval elapses.","tier":"domain"},"height":{"type":"number","default":420,"label":"Height","description":"Canvas height in pixels.","tier":"presentation"},"penaltyPerMiss":{"type":"number","default":0,"label":"Penalty Per Miss","description":"Rubric points subtracted for each incorrect pick (score never drops below 0).","tier":"domain"},"taper":{"type":"number","default":0,"label":"Taper","description":"How far the category rungs narrow toward the top: 0 = equal-width rungs (no implied order), 1 = a full pyramid for hierarchies (needs, levels). Long category names need 0.","tier":"presentation"},"autoRun":{"type":"boolean","default":false,"label":"Auto Run","description":"When true the advance clock starts on load and the drill flips to the next item every advanceMs milliseconds; toggle live with the Auto/Pause button.","tier":"domain"},"incorrectColor":{"type":"string","default":"error","label":"Incorrect Highlight Color","description":"Fill color for the learner's picked category when it does not match the correct category.","tier":"presentation"},"scoreCap":{"type":"number","default":0,"label":"Score Cap","description":"Upper bound on the rubric score; 0 means uncapped.","tier":"domain"},"backgroundColor":{"type":"string","default":"","label":"Background Color","description":"Canvas ground (tone name, token or colour); empty uses the theme's drawing ground.","tier":"presentation"},"summary":{"type":"string","default":"","label":"Concept","description":"One line under the title saying what is being classified (keep it under ~65 characters). Empty shows no line.","tier":"presentation"},"loopRound":{"type":"boolean","default":false,"label":"Loop Round","description":"When true the item cursor wraps past the last item forever (a looping drill) instead of ending the round at the summary screen.","tier":"domain"},"interactive":{"type":"boolean","default":false,"label":"Interactive","description":"Enable pointer interaction on the canvas.","tier":"presentation"},"items":{"type":"[LearnClassifyItem]","default":[{"text":"Example item one.","category":"a","hint":"Consider what makes this belong to category A.","explanation":"This example was written to satisfy category A's defining trait."},{"text":"Example item two.","category":"b","hint":"Consider what makes this belong to category B.","explanation":"This example was written to satisfy category B's defining trait."}],"label":"Items","description":"Roster of items the learner classifies; each carries its prompt text, the value of its correct category, and optional hint/explanation text shown before/after the pick.","synonyms":"item, prompt, scenario, situation, case, example, question","tier":"domain","items":{"type":"object","properties":{"hint":{"name":"hint","type":"string","required":false},"text":{"name":"text","type":"string","required":true},"explanation":{"name":"explanation","type":"string","required":false},"category":{"name":"category","type":"string","required":true},"options":{"name":"options","type":"array","required":false,"items":{"type":"object","properties":{"category":{"name":"category","type":"string","required":true},"label":{"name":"label","type":"string","required":true}}}}}}},"orderStride":{"type":"number","default":1,"label":"Order Stride","description":"Items advance by this stride through the roster — 1 is sequential; a stride coprime with the roster length (e.g. 3) interleaves the corpus so adjacent items differ.","tier":"domain"}},"scope":"instance"}],"pages":[{"name":"LearnClassifyPage","id":"pag_MDZNKZGVD0DPG8ZCW3BC7BG3B2","path":"/learn-classify","traits":[{"ref":"LearnClassifySim","refId":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"}]}],"types":{"LearnClassifyCategoryStat":[{"name":"category","type":"string","required":true},{"name":"label","type":"string","required":true},{"name":"attempted","type":"number","required":true},{"name":"correct","type":"number","required":true}],"LearnClassifyItem":[{"name":"text","type":"string","required":true},{"name":"category","type":"string","required":true},{"name":"hint","type":"string"},{"name":"explanation","type":"string"},{"name":"options","type":"[object]","properties":[{"name":"category","type":"string","required":true},{"name":"label","type":"string","required":true}]}],"LearnClassifyItemOption":[{"name":"category","type":"string","required":true},{"name":"label","type":"string","required":true}],"LearnClassifyOption":[{"name":"value","type":"string","required":true},{"name":"label","type":"string","required":true},{"name":"color","type":"string","required":true}],"LearnClassifyShape":[{"name":"type","type":"string","values":["line","arrow","circle","rect","polygon","path","text","axis","grid"],"required":true},{"name":"id","type":"string"},{"name":"x","type":"number"},{"name":"y","type":"number"},{"name":"x1","type":"number"},{"name":"y1","type":"number"},{"name":"x2","type":"number"},{"name":"y2","type":"number"},{"name":"radius","type":"number"},{"name":"width","type":"number"},{"name":"height","type":"number"},{"name":"points","type":"[object]","properties":[{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true}]},{"name":"path","type":"string"},{"name":"text","type":"string"},{"name":"label","type":"string"},{"name":"fontSize","type":"number"},{"name":"align","type":"string","values":["left","center","right"]},{"name":"axis","type":"string","values":["x","y"]},{"name":"min","type":"number"},{"name":"max","type":"number"},{"name":"step","type":"number"},{"name":"color","type":"string"},{"name":"fill","type":"string"},{"name":"lineWidth","type":"number"},{"name":"opacity","type":"number"},{"name":"tone","type":"string"},{"name":"fillTone","type":"string"},{"name":"stroke","type":"string"},{"name":"textSize","type":"string"},{"name":"fillStyle","type":"string"}],"LearnClassifyShapePoint":[{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true}]}}],"schemaVersion":1,"ledger":{"schemaVersion":1,"entries":{"ent_Y0EY6S7B24NH20YRD5BY1HQGAS":{"id":"ent_Y0EY6S7B24NH20YRD5BY1HQGAS","kind":"entity","bakedName":"LearnClassifyScene","curName":"LearnClassifyScene","renames":[],"owner":"workspace"},"evt_3WCT8HD6K0K9GF691M6DNYGPH2":{"id":"evt_3WCT8HD6K0K9GF691M6DNYGPH2","kind":"event","bakedName":"INIT","curName":"INIT","renames":[],"owner":"workspace","parent":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"},"evt_6E91HTP1DJ0PS281JABJX4VCXX":{"id":"evt_6E91HTP1DJ0PS281JABJX4VCXX","kind":"event","bakedName":"RETRY","curName":"RETRY","renames":[],"owner":"workspace","parent":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"},"evt_9MXFB29J3NS1TWYQD9YPVQ1TNC":{"id":"evt_9MXFB29J3NS1TWYQD9YPVQ1TNC","kind":"event","bakedName":"PICK","curName":"PICK","renames":[],"owner":"workspace","parent":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"},"evt_CD3SWSP2A5152KXMZ9RMBQTDTP":{"id":"evt_CD3SWSP2A5152KXMZ9RMBQTDTP","kind":"event","bakedName":"TOGGLE_RUN","curName":"TOGGLE_RUN","renames":[],"owner":"workspace","parent":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"},"evt_FTAH4MGWW3EE1VV83EY7CJZRRZ":{"id":"evt_FTAH4MGWW3EE1VV83EY7CJZRRZ","kind":"event","bakedName":"CLASSIFY_UPDATED","curName":"CLASSIFY_UPDATED","renames":[],"owner":"workspace","parent":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"},"evt_JX9D9BSBPQNVBG1CG6HVD2FD5H":{"id":"evt_JX9D9BSBPQNVBG1CG6HVD2FD5H","kind":"event","bakedName":"LEARN_ROUND_COMPLETE","curName":"LEARN_ROUND_COMPLETE","renames":[],"owner":"workspace","parent":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"},"evt_KG3DKRRQJYBSF0XKJ1MY3WV2YJ":{"id":"evt_KG3DKRRQJYBSF0XKJ1MY3WV2YJ","kind":"event","bakedName":"ADVANCE","curName":"ADVANCE","renames":[],"owner":"workspace","parent":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"},"evt_R2NCYM9KCTSPDFRRFRWPFDHQBN":{"id":"evt_R2NCYM9KCTSPDFRRFRWPFDHQBN","kind":"event","bakedName":"ROSTER_LOADED","curName":"ROSTER_LOADED","renames":[],"owner":"workspace","parent":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"},"evt_SB6ERFS6HZK8ZMG0YMMJQQRQ95":{"id":"evt_SB6ERFS6HZK8ZMG0YMMJQQRQ95","kind":"event","bakedName":"MODE_SELECTED","curName":"MODE_SELECTED","renames":[],"owner":"workspace","parent":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8"},"orb_RBQ15CH017G0KJ56SC9833D5ZQ":{"id":"orb_RBQ15CH017G0KJ56SC9833D5ZQ","kind":"orbital","bakedName":"LearnClassifyOrbital","curName":"LearnClassifyOrbital","renames":[],"owner":"workspace"},"pag_MDZNKZGVD0DPG8ZCW3BC7BG3B2":{"id":"pag_MDZNKZGVD0DPG8ZCW3BC7BG3B2","kind":"page","bakedName":"LearnClassifyPage","curName":"LearnClassifyPage","renames":[],"owner":"workspace"},"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8":{"id":"trt_AJ1SP8T1ZA0ZN6DVCG4VM3K7E8","kind":"trait","bakedName":"LearnClassifySim","curName":"LearnClassifySim","renames":[],"owner":"workspace"}}}}
|