@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-slope-probe","version":"1.0.0","description":"Headless derivative probe for graph-riding learning boards: while the body authority's BODY_MOVED reports its `skating` flag (body riding the curve), it brackets the configured curve around the body's x and derives the local calculus readout — the slope dy/dx, a tangent-line segment of half-width `window` centered on the contact point, a rise-over-run triangle (run `triRun`, rise slope·run), and the glow window of curve samples around the contact — all written to a [runtime, shared] entity so the board renders the math the player is physically riding. Emits the sparse SLOPE_CHANGED signal only when the slope crosses a 0.5 bucket boundary, so fx and HUD meters react to *changes* in steepness without paying a per-tick event. The curve is the same sample table the body skates and the canvas draws — one source, three views. Renders nothing.","orbitals":[{"name":"LearnSlopeProbeOrbital","id":"orb_2DX83221B60NK142FCMHN9W0X7","entity":{"name":"SlopeProbeState","id":"ent_8B51GHCGKQ89VR18F72RKQXGVB","persistence":"runtime","fields":[{"name":"id","type":"string","required":true},{"name":"probing","type":"boolean","default":false},{"name":"x","type":"number","default":0},{"name":"y","type":"number","default":0},{"name":"slope","type":"number","default":0},{"name":"tax","type":"number","default":0},{"name":"tay","type":"number","default":0},{"name":"tbx","type":"number","default":0},{"name":"tby","type":"number","default":0},{"name":"triAx","type":"number","default":0},{"name":"triAy","type":"number","default":0},{"name":"triBx","type":"number","default":0},{"name":"triBy","type":"number","default":0},{"name":"triCx","type":"number","default":0},{"name":"triCy","type":"number","default":0},{"name":"curve","type":"array","default":[],"items":{"type":"object","properties":{"y":{"name":"y","type":"number","required":true},"x":{"name":"x","type":"number","required":true}}}},{"name":"segment","type":"array","default":[],"items":{"type":"object","properties":{"x":{"name":"x","type":"number","required":true},"y":{"name":"y","type":"number","required":true}}}},{"name":"bucket","type":"number","default":9999}],"shared":true},"traits":[{"name":"LearnSlopeProbe","id":"trt_QTFW1VH5TNJXAQEY7MFHWNDM9D","entityRebindable":true,"entityContract":{"requires":[],"provides":["bucket","curve","probing","segment","slope","tax","tay","tbx","tby","triAx","triAy","triBx","triBy","triCx","triCy","x","y"]},"effectRow":[{"kind":"emit","resource":"SLOPE_CHANGED"},{"kind":"set","resource":"@entity.bucket"},{"kind":"set","resource":"@entity.curve"},{"kind":"set","resource":"@entity.probing"},{"kind":"set","resource":"@entity.segment"},{"kind":"set","resource":"@entity.slope"},{"kind":"set","resource":"@entity.tax"},{"kind":"set","resource":"@entity.tay"},{"kind":"set","resource":"@entity.tbx"},{"kind":"set","resource":"@entity.tby"},{"kind":"set","resource":"@entity.triAx"},{"kind":"set","resource":"@entity.triAy"},{"kind":"set","resource":"@entity.triBx"},{"kind":"set","resource":"@entity.triBy"},{"kind":"set","resource":"@entity.triCx"},{"kind":"set","resource":"@entity.triCy"},{"kind":"set","resource":"@entity.x"},{"kind":"set","resource":"@entity.y"}],"category":"lifecycle","linkedEntity":"SlopeProbeState","linkedEntityId":"ent_8B51GHCGKQ89VR18F72RKQXGVB","entityRefIds":{"SlopeProbeState":"ent_8B51GHCGKQ89VR18F72RKQXGVB"},"emits":[{"event":"SLOPE_CHANGED","eventId":"evt_88B5B0BKDKSPSVJ4ZSZE5CG6TX","description":"The local dy/dx crossed a 0.5 bucket boundary while the probe was active; slope is exact, bucket is the rounded step — fx/HUD scale with steepness without paying per-tick events.","tier":"domain","scope":"external","payloadSchema":[{"name":"slope","type":"number","required":true},{"name":"bucket","type":"number","required":true}]}],"stateMachine":{"states":[{"name":"idle","isInitial":true}],"events":[{"key":"INIT","id":"evt_XEYMQFEVCADP5DFBMBY2JG79ZV","name":"Initialize"},{"key":"SET_CURVE","id":"evt_DH6XMYRQXWBYYCTMC3PP21X7JP","name":"Set Curve","payloadSchema":[{"name":"curve","type":"[object]","required":true,"properties":[{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true}]}],"listened":true},{"key":"BODY_MOVED","id":"evt_VFY7FF2C5862MC9W7R3XAMEY6E","name":"Body Moved","payloadSchema":[{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true},{"name":"vx","type":"number","required":true},{"name":"vy","type":"number","required":true},{"name":"grounded","type":"boolean","required":true},{"name":"skating","type":"boolean","required":true},{"name":"speed","type":"number","required":true}],"listened":true},{"key":"RESTART","id":"evt_PB01PESSZ0WZGB46TX7CZ0X13J","name":"Restart","payloadSchema":[{"name":"id","type":"string"}],"listened":true},{"key":"SLOPE_CHANGED","id":"evt_88B5B0BKDKSPSVJ4ZSZE5CG6TX","name":"Slope Changed","description":"The local dy/dx crossed a 0.5 bucket boundary while the probe was active; slope is exact, bucket is the rounded step — fx/HUD scale with steepness without paying per-tick events.","tier":"domain","payloadSchema":[{"name":"slope","type":"number","required":true},{"name":"bucket","type":"number","required":true}]}],"transitions":[{"from":"idle","to":"idle","event":"INIT","eventId":"evt_XEYMQFEVCADP5DFBMBY2JG79ZV","effects":[["set","@entity.probing",false],["set","@entity.curve","@config.curve"],["set","@entity.segment",[]],["set","@entity.bucket",9999]]},{"from":"idle","to":"idle","event":"SET_CURVE","eventId":"evt_DH6XMYRQXWBYYCTMC3PP21X7JP","effects":[["set","@entity.curve","@payload.curve"]]},{"from":"idle","to":"idle","event":"BODY_MOVED","eventId":"evt_VFY7FF2C5862MC9W7R3XAMEY6E","guard":"@config.running","effects":[["let",[["on",["and","@payload.skating",[">",["array/len","@entity.curve"],1]]]],["let",[["inRange",["and","@on",["and",[">=","@payload.x",["object/get",["array/first","@entity.curve"],"x"]],["<=","@payload.x",["object/get",["array/last","@entity.curve"],"x"]]]]]],["if","@inRange",["let",[["leftSamp",["array/last",["array/filter","@entity.curve",["fn","s",["<=",["object/get","@s","x"],"@payload.x"]]]]],["rightSamp",["array/first",["array/filter","@entity.curve",["fn","s",[">",["object/get","@s","x"],"@payload.x"]]]]]],["let",[["slope",["if",["==","@rightSamp",null],0,["/",["-",["object/get","@rightSamp","y"],["object/get","@leftSamp","y"]],["-",["object/get","@rightSamp","x"],["object/get","@leftSamp","x"]]]]]],["let",[["curveY",["if",["==","@rightSamp",null],["object/get","@leftSamp","y"],["+",["object/get","@leftSamp","y"],["*","@slope",["-","@payload.x",["object/get","@leftSamp","x"]]]]]]],["let",[["norm",["math/sqrt",["+",1,["*","@slope","@slope"]]]]],["let",[["dx",["/","@config.window","@norm"]],["dy",["/",["*","@slope","@config.window"],"@norm"]]],["let",[["newBucket",["*",["math/round",["*","@slope",2],0],0.5]]],["do",["set","@entity.probing",true],["set","@entity.x","@payload.x"],["set","@entity.y","@curveY"],["set","@entity.slope","@slope"],["set","@entity.tax",["-","@payload.x","@dx"]],["set","@entity.tay",["-","@curveY","@dy"]],["set","@entity.tbx",["+","@payload.x","@dx"]],["set","@entity.tby",["+","@curveY","@dy"]],["set","@entity.triAx","@payload.x"],["set","@entity.triAy","@curveY"],["set","@entity.triBx",["+","@payload.x","@config.triRun"]],["set","@entity.triBy","@curveY"],["set","@entity.triCx",["+","@payload.x","@config.triRun"]],["set","@entity.triCy",["+","@curveY",["*","@slope","@config.triRun"]]],["set","@entity.segment",["array/filter","@entity.curve",["fn","s",["and",[">=",["object/get","@s","x"],["-","@payload.x","@config.window"]],["<=",["object/get","@s","x"],["+","@payload.x","@config.window"]]]]]],["if",["!=","@newBucket","@entity.bucket"],["do",["set","@entity.bucket","@newBucket"],["emit","SLOPE_CHANGED",{"slope":"@slope","bucket":"@newBucket"}]],null]]]]]]]],["if","@entity.probing",["do",["set","@entity.probing",false],["set","@entity.segment",[]]],null]]]]]},{"from":"idle","to":"idle","event":"RESTART","eventId":"evt_PB01PESSZ0WZGB46TX7CZ0X13J","effects":[["set","@entity.probing",false],["set","@entity.segment",[]],["set","@entity.bucket",9999]]}]},"config":{"running":{"type":"boolean","default":true,"label":"Running","description":"When true the probe derives the readout off BODY_MOVED; toggle to freeze it (the board hides the tangent overlays when probing goes stale).","tier":"domain"},"window":{"type":"number","default":1.5,"label":"Tangent Window","description":"Half-length (world units along the tangent) of the tangent segment and of the glow sample window around the contact point.","tier":"presentation"},"curve":{"type":"[ProbeSample]","default":[],"label":"Curve","description":"Surface samples (x strictly increasing) of the graph being ridden — the same table the body skates and the canvas draws, so the readout matches what is underfoot. Seeded onto the entity on INIT; the live curve is entity.curve — SET_CURVE replaces it at runtime (stitched mega-curves) and RESTART does not reseed it.","tier":"domain","items":{"type":"object","properties":{"y":{"name":"y","type":"number","required":true},"x":{"name":"x","type":"number","required":true}}}},"triRun":{"type":"number","default":1,"label":"Triangle Run","description":"Horizontal leg of the rise-over-run triangle; the vertical leg is slope × triRun, so triRun = 1 reads the slope directly.","tier":"presentation"}},"scope":"instance"}],"pages":[{"name":"LearnSlopeProbePage","id":"pag_682K6JM0FV07XPZ9TSF6QXD7TE","path":"/learn-slope-probe","traits":[{"ref":"LearnSlopeProbe","refId":"trt_QTFW1VH5TNJXAQEY7MFHWNDM9D"}]}],"types":{"ProbeSample":[{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true}]}}],"schemaVersion":1,"ledger":{"schemaVersion":1,"entries":{"ent_8B51GHCGKQ89VR18F72RKQXGVB":{"id":"ent_8B51GHCGKQ89VR18F72RKQXGVB","kind":"entity","bakedName":"SlopeProbeState","curName":"SlopeProbeState","renames":[],"owner":"workspace"},"evt_88B5B0BKDKSPSVJ4ZSZE5CG6TX":{"id":"evt_88B5B0BKDKSPSVJ4ZSZE5CG6TX","kind":"event","bakedName":"SLOPE_CHANGED","curName":"SLOPE_CHANGED","renames":[],"owner":"workspace","parent":"trt_QTFW1VH5TNJXAQEY7MFHWNDM9D"},"evt_DH6XMYRQXWBYYCTMC3PP21X7JP":{"id":"evt_DH6XMYRQXWBYYCTMC3PP21X7JP","kind":"event","bakedName":"SET_CURVE","curName":"SET_CURVE","renames":[],"owner":"workspace","parent":"trt_QTFW1VH5TNJXAQEY7MFHWNDM9D"},"evt_PB01PESSZ0WZGB46TX7CZ0X13J":{"id":"evt_PB01PESSZ0WZGB46TX7CZ0X13J","kind":"event","bakedName":"RESTART","curName":"RESTART","renames":[],"owner":"workspace","parent":"trt_QTFW1VH5TNJXAQEY7MFHWNDM9D"},"evt_VFY7FF2C5862MC9W7R3XAMEY6E":{"id":"evt_VFY7FF2C5862MC9W7R3XAMEY6E","kind":"event","bakedName":"BODY_MOVED","curName":"BODY_MOVED","renames":[],"owner":"workspace","parent":"trt_QTFW1VH5TNJXAQEY7MFHWNDM9D"},"evt_XEYMQFEVCADP5DFBMBY2JG79ZV":{"id":"evt_XEYMQFEVCADP5DFBMBY2JG79ZV","kind":"event","bakedName":"INIT","curName":"INIT","renames":[],"owner":"workspace","parent":"trt_QTFW1VH5TNJXAQEY7MFHWNDM9D"},"orb_2DX83221B60NK142FCMHN9W0X7":{"id":"orb_2DX83221B60NK142FCMHN9W0X7","kind":"orbital","bakedName":"LearnSlopeProbeOrbital","curName":"LearnSlopeProbeOrbital","renames":[],"owner":"workspace"},"pag_682K6JM0FV07XPZ9TSF6QXD7TE":{"id":"pag_682K6JM0FV07XPZ9TSF6QXD7TE","kind":"page","bakedName":"LearnSlopeProbePage","curName":"LearnSlopeProbePage","renames":[],"owner":"workspace"},"trt_QTFW1VH5TNJXAQEY7MFHWNDM9D":{"id":"trt_QTFW1VH5TNJXAQEY7MFHWNDM9D","kind":"trait","bakedName":"LearnSlopeProbe","curName":"LearnSlopeProbe","renames":[],"owner":"workspace"}}}}
|
|
1
|
+
{"name":"std-learn-slope-probe","version":"1.0.0","description":"Headless derivative probe for graph-riding learning boards: while the body authority's BODY_MOVED reports its `skating` flag (body riding the curve), it brackets the configured curve around the body's x and derives the local calculus readout — the slope dy/dx, a tangent-line segment of half-width `window` centered on the contact point, a rise-over-run triangle (run `triRun`, rise slope·run), and the glow window of curve samples around the contact — all written to a [runtime, shared] entity so the board renders the math the player is physically riding. Emits the sparse SLOPE_CHANGED signal only when the slope crosses a 0.5 bucket boundary, so fx and HUD meters react to *changes* in steepness without paying a per-tick event. The curve is the same sample table the body skates and the canvas draws — one source, three views. Renders nothing.","orbitals":[{"name":"LearnSlopeProbeOrbital","id":"orb_2DX83221B60NK142FCMHN9W0X7","entity":{"name":"SlopeProbeState","id":"ent_8B51GHCGKQ89VR18F72RKQXGVB","persistence":"runtime","fields":[{"name":"id","type":"string","required":true},{"name":"probing","type":"boolean","default":false},{"name":"x","type":"number","default":0},{"name":"y","type":"number","default":0},{"name":"slope","type":"number","default":0},{"name":"tax","type":"number","default":0},{"name":"tay","type":"number","default":0},{"name":"tbx","type":"number","default":0},{"name":"tby","type":"number","default":0},{"name":"triAx","type":"number","default":0},{"name":"triAy","type":"number","default":0},{"name":"triBx","type":"number","default":0},{"name":"triBy","type":"number","default":0},{"name":"triCx","type":"number","default":0},{"name":"triCy","type":"number","default":0},{"name":"curve","type":"array","default":[],"items":{"type":"object","properties":{"y":{"name":"y","type":"number","required":true},"x":{"name":"x","type":"number","required":true}}}},{"name":"segment","type":"array","default":[],"items":{"type":"object","properties":{"x":{"name":"x","type":"number","required":true},"y":{"name":"y","type":"number","required":true}}}},{"name":"bucket","type":"number","default":9999}],"shared":true},"traits":[{"name":"LearnSlopeProbe","id":"trt_QTFW1VH5TNJXAQEY7MFHWNDM9D","entityRebindable":true,"entityContract":{"requires":[],"provides":["bucket","curve","probing","segment","slope","tax","tay","tbx","tby","triAx","triAy","triBx","triBy","triCx","triCy","x","y"]},"effectRow":[{"kind":"emit","resource":"SLOPE_CHANGED"},{"kind":"set","resource":"@entity.bucket"},{"kind":"set","resource":"@entity.curve"},{"kind":"set","resource":"@entity.probing"},{"kind":"set","resource":"@entity.segment"},{"kind":"set","resource":"@entity.slope"},{"kind":"set","resource":"@entity.tax"},{"kind":"set","resource":"@entity.tay"},{"kind":"set","resource":"@entity.tbx"},{"kind":"set","resource":"@entity.tby"},{"kind":"set","resource":"@entity.triAx"},{"kind":"set","resource":"@entity.triAy"},{"kind":"set","resource":"@entity.triBx"},{"kind":"set","resource":"@entity.triBy"},{"kind":"set","resource":"@entity.triCx"},{"kind":"set","resource":"@entity.triCy"},{"kind":"set","resource":"@entity.x"},{"kind":"set","resource":"@entity.y"}],"category":"lifecycle","linkedEntity":"SlopeProbeState","linkedEntityId":"ent_8B51GHCGKQ89VR18F72RKQXGVB","entityRefIds":{"SlopeProbeState":"ent_8B51GHCGKQ89VR18F72RKQXGVB"},"emits":[{"event":"SLOPE_CHANGED","eventId":"evt_88B5B0BKDKSPSVJ4ZSZE5CG6TX","description":"The local dy/dx crossed a 0.5 bucket boundary while the probe was active; slope is exact, bucket is the rounded step — fx/HUD scale with steepness without paying per-tick events.","tier":"domain","scope":"external","payloadSchema":[{"name":"slope","type":"number","required":true},{"name":"bucket","type":"number","required":true}]}],"stateMachine":{"states":[{"name":"idle","isInitial":true}],"events":[{"key":"INIT","id":"evt_XEYMQFEVCADP5DFBMBY2JG79ZV","name":"Initialize"},{"key":"SET_CURVE","id":"evt_DH6XMYRQXWBYYCTMC3PP21X7JP","name":"Set Curve","payloadSchema":[{"name":"curve","type":"[object]","required":true,"properties":[{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true}]}],"listened":true},{"key":"BODY_MOVED","id":"evt_VFY7FF2C5862MC9W7R3XAMEY6E","name":"Body Moved","payloadSchema":[{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true},{"name":"vx","type":"number","required":true},{"name":"vy","type":"number","required":true},{"name":"grounded","type":"boolean","required":true},{"name":"skating","type":"boolean","required":true},{"name":"speed","type":"number","required":true}],"listened":true},{"key":"RESTART","id":"evt_PB01PESSZ0WZGB46TX7CZ0X13J","name":"Restart","payloadSchema":[{"name":"id","type":"string"}],"listened":true},{"key":"SLOPE_CHANGED","id":"evt_88B5B0BKDKSPSVJ4ZSZE5CG6TX","name":"Slope Changed","description":"The local dy/dx crossed a 0.5 bucket boundary while the probe was active; slope is exact, bucket is the rounded step — fx/HUD scale with steepness without paying per-tick events.","tier":"domain","payloadSchema":[{"name":"slope","type":"number","required":true},{"name":"bucket","type":"number","required":true}]}],"transitions":[{"from":"idle","to":"idle","event":"INIT","eventId":"evt_XEYMQFEVCADP5DFBMBY2JG79ZV","effects":[["set","@entity.probing",false],["set","@entity.curve","@config.curve"],["set","@entity.segment",[]],["set","@entity.bucket",9999]]},{"from":"idle","to":"idle","event":"SET_CURVE","eventId":"evt_DH6XMYRQXWBYYCTMC3PP21X7JP","effects":[["set","@entity.curve","@payload.curve"]]},{"from":"idle","to":"idle","event":"BODY_MOVED","eventId":"evt_VFY7FF2C5862MC9W7R3XAMEY6E","guard":"@config.running","effects":[["let",[["on",["and","@payload.skating",[">",["array/len","@entity.curve"],1]]]],["let",[["inRange",["and","@on",["and",[">=","@payload.x",["object/get",["array/first","@entity.curve"],"x"]],["<=","@payload.x",["object/get",["array/last","@entity.curve"],"x"]]]]]],["if","@inRange",["let",[["leftSamp",["array/last",["array/filter","@entity.curve",["fn","s",["<=",["object/get","@s","x"],"@payload.x"]]]]],["rightSamp",["array/first",["array/filter","@entity.curve",["fn","s",[">",["object/get","@s","x"],"@payload.x"]]]]]],["let",[["slope",["if",["==","@rightSamp",null],0,["/",["-",["object/get","@rightSamp","y"],["object/get","@leftSamp","y"]],["-",["object/get","@rightSamp","x"],["object/get","@leftSamp","x"]]]]]],["let",[["curveY",["if",["==","@rightSamp",null],["object/get","@leftSamp","y"],["+",["object/get","@leftSamp","y"],["*","@slope",["-","@payload.x",["object/get","@leftSamp","x"]]]]]]],["let",[["norm",["math/sqrt",["+",1,["*","@slope","@slope"]]]]],["let",[["dx",["/","@config.window","@norm"]],["dy",["/",["*","@slope","@config.window"],"@norm"]]],["let",[["newBucket",["*",["math/round",["*","@slope",2],0],0.5]]],["do",["set","@entity.probing",true],["set","@entity.x","@payload.x"],["set","@entity.y","@curveY"],["set","@entity.slope","@slope"],["set","@entity.tax",["-","@payload.x","@dx"]],["set","@entity.tay",["-","@curveY","@dy"]],["set","@entity.tbx",["+","@payload.x","@dx"]],["set","@entity.tby",["+","@curveY","@dy"]],["set","@entity.triAx","@payload.x"],["set","@entity.triAy","@curveY"],["set","@entity.triBx",["+","@payload.x","@config.triRun"]],["set","@entity.triBy","@curveY"],["set","@entity.triCx",["+","@payload.x","@config.triRun"]],["set","@entity.triCy",["+","@curveY",["*","@slope","@config.triRun"]]],["set","@entity.segment",["array/filter","@entity.curve",["fn","s",["and",[">=",["object/get","@s","x"],["-","@payload.x","@config.window"]],["<=",["object/get","@s","x"],["+","@payload.x","@config.window"]]]]]],["if",["!=","@newBucket","@entity.bucket"],["do",["set","@entity.bucket","@newBucket"],["emit","SLOPE_CHANGED",{"slope":"@slope","bucket":"@newBucket"}]],null]]]]]]]],["if","@entity.probing",["do",["set","@entity.probing",false],["set","@entity.segment",[]]],null]]]]]},{"from":"idle","to":"idle","event":"RESTART","eventId":"evt_PB01PESSZ0WZGB46TX7CZ0X13J","effects":[["set","@entity.probing",false],["set","@entity.segment",[]],["set","@entity.bucket",9999]]}]},"config":{"triRun":{"type":"number","default":1,"label":"Triangle Run","description":"Horizontal leg of the rise-over-run triangle; the vertical leg is slope × triRun, so triRun = 1 reads the slope directly.","tier":"presentation"},"curve":{"type":"[ProbeSample]","default":[],"label":"Curve","description":"Surface samples (x strictly increasing) of the graph being ridden — the same table the body skates and the canvas draws, so the readout matches what is underfoot. Seeded onto the entity on INIT; the live curve is entity.curve — SET_CURVE replaces it at runtime (stitched mega-curves) and RESTART does not reseed it.","tier":"domain","items":{"type":"object","properties":{"x":{"name":"x","type":"number","required":true},"y":{"name":"y","type":"number","required":true}}}},"window":{"type":"number","default":1.5,"label":"Tangent Window","description":"Half-length (world units along the tangent) of the tangent segment and of the glow sample window around the contact point.","tier":"presentation"},"running":{"type":"boolean","default":true,"label":"Running","description":"When true the probe derives the readout off BODY_MOVED; toggle to freeze it (the board hides the tangent overlays when probing goes stale).","tier":"domain"}},"scope":"instance"}],"pages":[{"name":"LearnSlopeProbePage","id":"pag_682K6JM0FV07XPZ9TSF6QXD7TE","path":"/learn-slope-probe","traits":[{"ref":"LearnSlopeProbe","refId":"trt_QTFW1VH5TNJXAQEY7MFHWNDM9D"}]}],"types":{"ProbeSample":[{"name":"x","type":"number","required":true},{"name":"y","type":"number","required":true}]}}],"schemaVersion":1,"ledger":{"schemaVersion":1,"entries":{"ent_8B51GHCGKQ89VR18F72RKQXGVB":{"id":"ent_8B51GHCGKQ89VR18F72RKQXGVB","kind":"entity","bakedName":"SlopeProbeState","curName":"SlopeProbeState","renames":[],"owner":"workspace"},"evt_88B5B0BKDKSPSVJ4ZSZE5CG6TX":{"id":"evt_88B5B0BKDKSPSVJ4ZSZE5CG6TX","kind":"event","bakedName":"SLOPE_CHANGED","curName":"SLOPE_CHANGED","renames":[],"owner":"workspace","parent":"trt_QTFW1VH5TNJXAQEY7MFHWNDM9D"},"evt_DH6XMYRQXWBYYCTMC3PP21X7JP":{"id":"evt_DH6XMYRQXWBYYCTMC3PP21X7JP","kind":"event","bakedName":"SET_CURVE","curName":"SET_CURVE","renames":[],"owner":"workspace","parent":"trt_QTFW1VH5TNJXAQEY7MFHWNDM9D"},"evt_PB01PESSZ0WZGB46TX7CZ0X13J":{"id":"evt_PB01PESSZ0WZGB46TX7CZ0X13J","kind":"event","bakedName":"RESTART","curName":"RESTART","renames":[],"owner":"workspace","parent":"trt_QTFW1VH5TNJXAQEY7MFHWNDM9D"},"evt_VFY7FF2C5862MC9W7R3XAMEY6E":{"id":"evt_VFY7FF2C5862MC9W7R3XAMEY6E","kind":"event","bakedName":"BODY_MOVED","curName":"BODY_MOVED","renames":[],"owner":"workspace","parent":"trt_QTFW1VH5TNJXAQEY7MFHWNDM9D"},"evt_XEYMQFEVCADP5DFBMBY2JG79ZV":{"id":"evt_XEYMQFEVCADP5DFBMBY2JG79ZV","kind":"event","bakedName":"INIT","curName":"INIT","renames":[],"owner":"workspace","parent":"trt_QTFW1VH5TNJXAQEY7MFHWNDM9D"},"orb_2DX83221B60NK142FCMHN9W0X7":{"id":"orb_2DX83221B60NK142FCMHN9W0X7","kind":"orbital","bakedName":"LearnSlopeProbeOrbital","curName":"LearnSlopeProbeOrbital","renames":[],"owner":"workspace"},"pag_682K6JM0FV07XPZ9TSF6QXD7TE":{"id":"pag_682K6JM0FV07XPZ9TSF6QXD7TE","kind":"page","bakedName":"LearnSlopeProbePage","curName":"LearnSlopeProbePage","renames":[],"owner":"workspace"},"trt_QTFW1VH5TNJXAQEY7MFHWNDM9D":{"id":"trt_QTFW1VH5TNJXAQEY7MFHWNDM9D","kind":"trait","bakedName":"LearnSlopeProbe","curName":"LearnSlopeProbe","renames":[],"owner":"workspace"}}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"std-learn-speed-drill","version":"1.0.0","description":"Generic speeded-response drill — a config-declared item roster of prompt + options runs against a live countdown: answering while the clock runs scores the base points plus a speed bonus proportional to the time left, letting the clock hit zero counts as a miss and reveals the answer, and a streak counter rewards consecutive hits with an end-of-round summary of score and best streak. All vocabulary and timing is config-declared, so the same mechanism serves any fluency drill: times tables, sight vocabulary, chemical symbols, flag recognition, interval identification — anywhere fast retrieval is the skill. Standalone by default; behind a lab router set matchMode and it renders only when MODE_SELECTED matches.","orbitals":[{"name":"SpeedDrillOrbital","id":"orb_6V579HK9JQMSBM3VF1Y8NS45KY","entity":{"name":"SpeedDrillScene","id":"ent_G745FEX7EXKQEYNPJH9H7FW9A5","persistence":"runtime","fields":[{"name":"id","type":"string","required":true},{"name":"active","type":"boolean","default":false},{"name":"title","type":"string"},{"name":"items","type":"array","items":{"type":"object","properties":{"correctIndex":{"name":"correctIndex","type":"number","required":true},"prompt":{"name":"prompt","type":"string","required":true},"options":{"name":"options","type":"array","required":true,"items":{"type":"string"}}}}},{"name":"itemIndex","type":"number","default":0},{"name":"totalItems","type":"number","default":0},{"name":"remaining","type":"number","default":0},{"name":"running","type":"boolean","default":false},{"name":"verdict","type":"string"},{"name":"score","type":"number","default":0},{"name":"streak","type":"number","default":0},{"name":"bestStreak","type":"number","default":0},{"name":"done","type":"boolean","default":false},{"name":"promptText","type":"string"},{"name":"options","type":"array","items":{"type":"string"}},{"name":"correctIndex","type":"number","default":0},{"name":"feedback","type":"string"},{"name":"pickedIndex","type":"number","default":-1},{"name":"view","type":"array","items":{"type":"node"}}]},"traits":[{"name":"SpeedDrillSim","id":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE","entityRebindable":true,"entityContract":{"requires":[],"provides":["active","bestStreak","correctIndex","done","feedback","itemIndex","items","options","pickedIndex","promptText","remaining","running","score","streak","title","totalItems","verdict","view"]},"effectRow":[{"kind":"emit","resource":"ANSWER_JUDGED"},{"kind":"emit","resource":"LEARN_ROUND_COMPLETE"},{"kind":"emit","resource":"PROMPT_ADVANCED"},{"kind":"emit","resource":"ROUND_RESTARTED"},{"kind":"render-ui","resource":"main"},{"kind":"set","resource":"@entity.active"},{"kind":"set","resource":"@entity.bestStreak"},{"kind":"set","resource":"@entity.correctIndex"},{"kind":"set","resource":"@entity.done"},{"kind":"set","resource":"@entity.feedback"},{"kind":"set","resource":"@entity.feedback","site":"tick"},{"kind":"set","resource":"@entity.itemIndex"},{"kind":"set","resource":"@entity.items"},{"kind":"set","resource":"@entity.options"},{"kind":"set","resource":"@entity.pickedIndex"},{"kind":"set","resource":"@entity.promptText"},{"kind":"set","resource":"@entity.remaining"},{"kind":"set","resource":"@entity.remaining","site":"tick"},{"kind":"set","resource":"@entity.running"},{"kind":"set","resource":"@entity.running","site":"tick"},{"kind":"set","resource":"@entity.score"},{"kind":"set","resource":"@entity.streak"},{"kind":"set","resource":"@entity.streak","site":"tick"},{"kind":"set","resource":"@entity.title"},{"kind":"set","resource":"@entity.totalItems"},{"kind":"set","resource":"@entity.verdict"},{"kind":"set","resource":"@entity.verdict","site":"tick"},{"kind":"set","resource":"@entity.view"},{"kind":"ticks","site":"tick"}],"category":"interaction","linkedEntity":"SpeedDrillScene","linkedEntityId":"ent_G745FEX7EXKQEYNPJH9H7FW9A5","entityRefIds":{"SpeedDrillScene":"ent_G745FEX7EXKQEYNPJH9H7FW9A5"},"emits":[{"event":"ANSWER_JUDGED","eventId":"evt_W1NXDBHP08V045P22H5CZ2JWZR","description":"The verdict of a speeded answer: correctness, tenths of a second left on the clock, and the running score and streak — a composed listener (coach, grader) can subscribe; a harmless no-op when the atom runs standalone.","synonyms":"speed drill, reaction time, fluency, timed quiz, countdown, rapid recall","tier":"domain","scope":"external","payloadSchema":[{"name":"correct","type":"boolean"},{"name":"timeLeftTenths","type":"number"},{"name":"score","type":"number"},{"name":"streak","type":"number"}]},{"event":"PROMPT_ADVANCED","eventId":"evt_TDNQHK9WFCY7PFD49KM4CJKRMT","description":"The learner moved to the next item (or completed the round) with the running score.","tier":"domain","scope":"external","payloadSchema":[{"name":"itemIndex","type":"number"},{"name":"done","type":"boolean"},{"name":"score","type":"number"}]},{"event":"ROUND_RESTARTED","eventId":"evt_C5683835B2JNH13V8WMXS8GPYZ","description":"The learner restarted the round from scratch.","tier":"domain","scope":"external","payloadSchema":[{"name":"totalItems","type":"number"}]},{"event":"LEARN_ROUND_COMPLETE","eventId":"evt_Y53M77ZDDVPPXK26QWB0AFK9V3","description":"Fired once when the round finishes (advancing past the final prompt) — 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_Q0PJBAFTWPXEB6QHGS95JRFNFS","name":"Initialize"},{"key":"MODE_SELECTED","id":"evt_8H7J8TRE5Z72ZPFQHE0MB0JA6W","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_RZR7DAVX4EYJ7CJZVXC1HCKZHW","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) and items is the drill roster; a matching instrument re-initialises from it 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":"prompt","type":"string","required":true},{"name":"options","type":"[string]","required":true},{"name":"correctIndex","type":"number","required":true}]}],"listened":true},{"key":"ANSWER","id":"evt_SVZF4QDK05SG2TWPG7HJFQSDP5","name":"Answer","description":"Learner picked an option while the clock was running — index is the chosen option; it is judged immediately and scored with a speed bonus.","tier":"domain","payloadSchema":[{"name":"index","type":"number"}],"listened":true},{"key":"NEXT","id":"evt_8SWKKMJD2D6H6R2BQTJ2TH3CKR","name":"Next","description":"Learner advanced to the next item after a verdict (answered or timed out); past the last item this completes the round.","tier":"domain","listened":true},{"key":"RETRY","id":"evt_2B4DF7EDDG6PR46X112Q5KY72D","name":"Retry","description":"Learner restarted the round from the first item with a cleared score and streak.","tier":"domain","listened":true},{"key":"ANSWER_JUDGED","id":"evt_W1NXDBHP08V045P22H5CZ2JWZR","name":"Answer Judged","description":"The verdict of a speeded answer: correctness, tenths of a second left on the clock, and the running score and streak — a composed listener (coach, grader) can subscribe; a harmless no-op when the atom runs standalone.","synonyms":"speed drill, reaction time, fluency, timed quiz, countdown, rapid recall","tier":"domain","payloadSchema":[{"name":"correct","type":"boolean"},{"name":"timeLeftTenths","type":"number"},{"name":"score","type":"number"},{"name":"streak","type":"number"}]},{"key":"PROMPT_ADVANCED","id":"evt_TDNQHK9WFCY7PFD49KM4CJKRMT","name":"Prompt Advanced","description":"The learner moved to the next item (or completed the round) with the running score.","tier":"domain","payloadSchema":[{"name":"itemIndex","type":"number"},{"name":"done","type":"boolean"},{"name":"score","type":"number"}]},{"key":"ROUND_RESTARTED","id":"evt_C5683835B2JNH13V8WMXS8GPYZ","name":"Round Restarted","description":"The learner restarted the round from scratch.","tier":"domain","payloadSchema":[{"name":"totalItems","type":"number"}]},{"key":"LEARN_ROUND_COMPLETE","id":"evt_Y53M77ZDDVPPXK26QWB0AFK9V3","name":"Learn Round Complete","description":"Fired once when the round finishes (advancing past the final prompt) — 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_Q0PJBAFTWPXEB6QHGS95JRFNFS","guard":["and",["==","@config.matchMode",""],["==","@config.rosterSource","config"]],"effects":[["set","@entity.items","@config.items"],["let",[["first",["array/nth","@config.items",0]]],["do",["set","@entity.active",true],["set","@entity.title","@config.title"],["set","@entity.itemIndex",0],["set","@entity.totalItems",["array/len","@config.items"]],["set","@entity.remaining",["*","@config.timeLimit",10]],["set","@entity.running",true],["set","@entity.verdict",""],["set","@entity.pickedIndex",-1],["set","@entity.score",0],["set","@entity.streak",0],["set","@entity.bestStreak",0],["set","@entity.done",false],["set","@entity.promptText",["object/get","@first","prompt"]],["set","@entity.options",["object/get","@first","options"]],["set","@entity.correctIndex",["object/get","@first","correctIndex"]],["set","@entity.feedback",""],["set","@entity.view",[{"type":"card","variant":"bordered","padding":"md","children":[{"type":"typography","variant":"h4","content":"@entity.promptText"}]}]]]],["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.done","Round complete",["str/concat","@entity.score"," pts · streak ","@entity.streak"]],"variant":["if","@entity.done","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict",""],"neutral","error"]]]}]},{"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":"progress-bar","value":"@entity.remaining","max":["*","@config.timeLimit",10],"variant":["if",["<","@entity.remaining",["*","@config.timeLimit",3]],"warning","primary"],"showPercentage":false,"label":["str/concat","Time left: ",["math/round",["/","@entity.remaining",10],1],"s"]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.view"},{"type":"stack","direction":"vertical","gap":"sm","children":["array/map",["array/range",0,["array/len","@entity.options"]],["fn",["i"],{"type":"button","action":"ANSWER","actionPayload":{"index":"@i"},"label":["array/nth","@entity.options","@i"],"size":"lg","disabled":["not","@entity.running"],"variant":["if","@entity.running","secondary",["if",["==","@i","@entity.correctIndex"],"success",["if",["==","@i","@entity.pickedIndex"],"danger","ghost"]]]}]]},["if",["or",["==","@entity.feedback",""],"@entity.done"],null,{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","error"],"label":["if",["==","@entity.verdict","correct"],"Correct",["if",["==","@entity.verdict","timeout"],"Time's up","Incorrect"]]},{"type":"typography","variant":"body","content":"@entity.feedback"}]}],["if","@entity.done",{"type":"typography","variant":"body","content":"@entity.feedback"},null],{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"NEXT","label":"@config.nextLabel","icon":"chevron-right","variant":"primary","disabled":["if",["and",["==","@entity.running",false],["and",["!=","@entity.verdict",""],["==","@entity.done",false]]],false,true]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"ghost","disabled":["if","@entity.done",false,true]},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Best streak ","@entity.bestStreak"]}]}]}]}]]},{"from":"idle","to":"idle","event":"MODE_SELECTED","eventId":"evt_8H7J8TRE5Z72ZPFQHE0MB0JA6W","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_8H7J8TRE5Z72ZPFQHE0MB0JA6W","guard":["and",["==","@payload.mode","@config.matchMode"],["==","@config.rosterSource","config"]],"effects":[["set","@entity.items","@config.items"],["let",[["first",["array/nth","@config.items",0]]],["do",["set","@entity.active",true],["set","@entity.title","@config.title"],["set","@entity.itemIndex",0],["set","@entity.totalItems",["array/len","@config.items"]],["set","@entity.remaining",["*","@config.timeLimit",10]],["set","@entity.running",true],["set","@entity.verdict",""],["set","@entity.pickedIndex",-1],["set","@entity.score",0],["set","@entity.streak",0],["set","@entity.bestStreak",0],["set","@entity.done",false],["set","@entity.promptText",["object/get","@first","prompt"]],["set","@entity.options",["object/get","@first","options"]],["set","@entity.correctIndex",["object/get","@first","correctIndex"]],["set","@entity.feedback",""],["set","@entity.view",[{"type":"card","variant":"bordered","padding":"md","children":[{"type":"typography","variant":"h4","content":"@entity.promptText"}]}]]]],["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.done","Round complete",["str/concat","@entity.score"," pts · streak ","@entity.streak"]],"variant":["if","@entity.done","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict",""],"neutral","error"]]]}]},{"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":"progress-bar","value":"@entity.remaining","max":["*","@config.timeLimit",10],"variant":["if",["<","@entity.remaining",["*","@config.timeLimit",3]],"warning","primary"],"showPercentage":false,"label":["str/concat","Time left: ",["math/round",["/","@entity.remaining",10],1],"s"]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.view"},{"type":"stack","direction":"vertical","gap":"sm","children":["array/map",["array/range",0,["array/len","@entity.options"]],["fn",["i"],{"type":"button","action":"ANSWER","actionPayload":{"index":"@i"},"label":["array/nth","@entity.options","@i"],"size":"lg","disabled":["not","@entity.running"],"variant":["if","@entity.running","secondary",["if",["==","@i","@entity.correctIndex"],"success",["if",["==","@i","@entity.pickedIndex"],"danger","ghost"]]]}]]},["if",["or",["==","@entity.feedback",""],"@entity.done"],null,{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","error"],"label":["if",["==","@entity.verdict","correct"],"Correct",["if",["==","@entity.verdict","timeout"],"Time's up","Incorrect"]]},{"type":"typography","variant":"body","content":"@entity.feedback"}]}],["if","@entity.done",{"type":"typography","variant":"body","content":"@entity.feedback"},null],{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"NEXT","label":"@config.nextLabel","icon":"chevron-right","variant":"primary","disabled":["if",["and",["==","@entity.running",false],["and",["!=","@entity.verdict",""],["==","@entity.done",false]]],false,true]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"ghost","disabled":["if","@entity.done",false,true]},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Best streak ","@entity.bestStreak"]}]}]}]}]]},{"from":"idle","to":"idle","event":"ROSTER_LOADED","eventId":"evt_RZR7DAVX4EYJ7CJZVXC1HCKZHW","guard":["and",["==","@config.rosterSource","event"],["and",["==","@payload.mode","@config.matchMode"],[">",["array/len","@payload.items"],0]]],"effects":[["set","@entity.items","@payload.items"],["let",[["first",["array/nth","@payload.items",0]]],["do",["set","@entity.active",true],["set","@entity.title","@config.title"],["set","@entity.itemIndex",0],["set","@entity.totalItems",["array/len","@payload.items"]],["set","@entity.remaining",["*","@config.timeLimit",10]],["set","@entity.running",true],["set","@entity.verdict",""],["set","@entity.pickedIndex",-1],["set","@entity.score",0],["set","@entity.streak",0],["set","@entity.bestStreak",0],["set","@entity.done",false],["set","@entity.promptText",["object/get","@first","prompt"]],["set","@entity.options",["object/get","@first","options"]],["set","@entity.correctIndex",["object/get","@first","correctIndex"]],["set","@entity.feedback",""],["set","@entity.view",[{"type":"card","variant":"bordered","padding":"md","children":[{"type":"typography","variant":"h4","content":"@entity.promptText"}]}]]]],["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.done","Round complete",["str/concat","@entity.score"," pts · streak ","@entity.streak"]],"variant":["if","@entity.done","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict",""],"neutral","error"]]]}]},{"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":"progress-bar","value":"@entity.remaining","max":["*","@config.timeLimit",10],"variant":["if",["<","@entity.remaining",["*","@config.timeLimit",3]],"warning","primary"],"showPercentage":false,"label":["str/concat","Time left: ",["math/round",["/","@entity.remaining",10],1],"s"]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.view"},{"type":"stack","direction":"vertical","gap":"sm","children":["array/map",["array/range",0,["array/len","@entity.options"]],["fn",["i"],{"type":"button","action":"ANSWER","actionPayload":{"index":"@i"},"label":["array/nth","@entity.options","@i"],"size":"lg","disabled":["not","@entity.running"],"variant":["if","@entity.running","secondary",["if",["==","@i","@entity.correctIndex"],"success",["if",["==","@i","@entity.pickedIndex"],"danger","ghost"]]]}]]},["if",["or",["==","@entity.feedback",""],"@entity.done"],null,{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","error"],"label":["if",["==","@entity.verdict","correct"],"Correct",["if",["==","@entity.verdict","timeout"],"Time's up","Incorrect"]]},{"type":"typography","variant":"body","content":"@entity.feedback"}]}],["if","@entity.done",{"type":"typography","variant":"body","content":"@entity.feedback"},null],{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"NEXT","label":"@config.nextLabel","icon":"chevron-right","variant":"primary","disabled":["if",["and",["==","@entity.running",false],["and",["!=","@entity.verdict",""],["==","@entity.done",false]]],false,true]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"ghost","disabled":["if","@entity.done",false,true]},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Best streak ","@entity.bestStreak"]}]}]}]}]]},{"from":"idle","to":"idle","event":"ROSTER_LOADED","eventId":"evt_RZR7DAVX4EYJ7CJZVXC1HCKZHW","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":"ANSWER","eventId":"evt_SVZF4QDK05SG2TWPG7HJFQSDP5","guard":["and",["==","@entity.active",true],["and",["==","@entity.running",true],["==","@entity.done",false]]],"effects":[["let",[["correct",["==","@payload.index","@entity.correctIndex"]],["bonus",["math/round",["/","@entity.remaining",10],1]],["points",["if","@correct",["+","@config.basePoints",["math/round",["*","@config.speedBonus",["/","@entity.remaining",["*","@config.timeLimit",10]]],0]],0]],["newStreak",["if","@correct",["+","@entity.streak",1],0]]],["do",["set","@entity.running",false],["set","@entity.pickedIndex","@payload.index"],["set","@entity.verdict",["if","@correct","correct","wrong"]],["set","@entity.score",["+","@entity.score","@points"]],["set","@entity.streak","@newStreak"],["set","@entity.bestStreak",["math/max","@entity.bestStreak","@newStreak"]],["set","@entity.feedback",["if","@correct",["str/concat","Correct with ","@bonus","s to spare — +",["str/concat","","@points"]," points."],["str/concat","Not quite — the answer was: ",["array/nth","@entity.options","@entity.correctIndex"]]]]]],["emit","ANSWER_JUDGED",{"correct":["==","@entity.verdict","correct"],"timeLeftTenths":"@entity.remaining","score":"@entity.score","streak":"@entity.streak"}]]},{"from":"idle","to":"idle","event":"NEXT","eventId":"evt_8SWKKMJD2D6H6R2BQTJ2TH3CKR","guard":["and",["==","@entity.active",true],["and",["==","@entity.running",false],["and",["!=","@entity.verdict",""],["==","@entity.done",false]]]],"effects":[["if",[">=",["+","@entity.itemIndex",1],["array/len","@entity.items"]],["emit","LEARN_ROUND_COMPLETE",{"score":"@entity.score","total":["array/len","@entity.items"]}],null],["let",[["nextIndex",["+","@entity.itemIndex",1]],["finished",[">=","@nextIndex",["array/len","@entity.items"]]],["next",["array/nth","@entity.items",["math/min","@nextIndex",["-",["array/len","@entity.items"],1]]]]],["do",["set","@entity.itemIndex",["if","@finished","@entity.itemIndex","@nextIndex"]],["set","@entity.done",["if","@finished",true,false]],["set","@entity.remaining",["if","@finished",0,["*","@config.timeLimit",10]]],["set","@entity.running",["if","@finished",false,true]],["set","@entity.verdict",""],["set","@entity.pickedIndex",-1],["set","@entity.promptText",["if","@finished","@entity.promptText",["object/get","@next","prompt"]]],["set","@entity.options",["if","@finished",[],["object/get","@next","options"]]],["set","@entity.correctIndex",["if","@finished","@entity.correctIndex",["object/get","@next","correctIndex"]]],["set","@entity.feedback",["if","@finished",["str/concat","Round complete — final score ",["str/concat","","@entity.score"],", best streak ",["str/concat","","@entity.bestStreak"],"."],""]],["set","@entity.view",["if","@finished",[{"type":"typography","variant":"h4","content":"Round Complete"},{"type":"stat-display","label":"Final score","value":"@entity.score","max":0}],[{"type":"card","variant":"bordered","padding":"md","children":[{"type":"typography","variant":"h4","content":"@entity.promptText"}]}]]]]],["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.done","Round complete",["str/concat","@entity.score"," pts · streak ","@entity.streak"]],"variant":["if","@entity.done","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict",""],"neutral","error"]]]}]},{"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":"progress-bar","value":"@entity.remaining","max":["*","@config.timeLimit",10],"variant":["if",["<","@entity.remaining",["*","@config.timeLimit",3]],"warning","primary"],"showPercentage":false,"label":["str/concat","Time left: ",["math/round",["/","@entity.remaining",10],1],"s"]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.view"},{"type":"stack","direction":"vertical","gap":"sm","children":["array/map",["array/range",0,["array/len","@entity.options"]],["fn",["i"],{"type":"button","action":"ANSWER","actionPayload":{"index":"@i"},"label":["array/nth","@entity.options","@i"],"size":"lg","disabled":["not","@entity.running"],"variant":["if","@entity.running","secondary",["if",["==","@i","@entity.correctIndex"],"success",["if",["==","@i","@entity.pickedIndex"],"danger","ghost"]]]}]]},["if",["or",["==","@entity.feedback",""],"@entity.done"],null,{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","error"],"label":["if",["==","@entity.verdict","correct"],"Correct",["if",["==","@entity.verdict","timeout"],"Time's up","Incorrect"]]},{"type":"typography","variant":"body","content":"@entity.feedback"}]}],["if","@entity.done",{"type":"typography","variant":"body","content":"@entity.feedback"},null],{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"NEXT","label":"@config.nextLabel","icon":"chevron-right","variant":"primary","disabled":["if",["and",["==","@entity.running",false],["and",["!=","@entity.verdict",""],["==","@entity.done",false]]],false,true]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"ghost","disabled":["if","@entity.done",false,true]},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Best streak ","@entity.bestStreak"]}]}]}]}],["emit","PROMPT_ADVANCED",{"itemIndex":"@entity.itemIndex","done":"@entity.done","score":"@entity.score"}]]},{"from":"idle","to":"idle","event":"RETRY","eventId":"evt_2B4DF7EDDG6PR46X112Q5KY72D","guard":["and",["==","@entity.active",true],["==","@entity.done",true]],"effects":[["let",[["first",["array/nth","@entity.items",0]]],["do",["set","@entity.itemIndex",0],["set","@entity.remaining",["*","@config.timeLimit",10]],["set","@entity.running",true],["set","@entity.verdict",""],["set","@entity.pickedIndex",-1],["set","@entity.score",0],["set","@entity.streak",0],["set","@entity.bestStreak",0],["set","@entity.done",false],["set","@entity.promptText",["object/get","@first","prompt"]],["set","@entity.options",["object/get","@first","options"]],["set","@entity.correctIndex",["object/get","@first","correctIndex"]],["set","@entity.feedback",""],["set","@entity.view",[{"type":"card","variant":"bordered","padding":"md","children":[{"type":"typography","variant":"h4","content":"@entity.promptText"}]}]]]],["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.done","Round complete",["str/concat","@entity.score"," pts · streak ","@entity.streak"]],"variant":["if","@entity.done","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict",""],"neutral","error"]]]}]},{"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":"progress-bar","value":"@entity.remaining","max":["*","@config.timeLimit",10],"variant":["if",["<","@entity.remaining",["*","@config.timeLimit",3]],"warning","primary"],"showPercentage":false,"label":["str/concat","Time left: ",["math/round",["/","@entity.remaining",10],1],"s"]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.view"},{"type":"stack","direction":"vertical","gap":"sm","children":["array/map",["array/range",0,["array/len","@entity.options"]],["fn",["i"],{"type":"button","action":"ANSWER","actionPayload":{"index":"@i"},"label":["array/nth","@entity.options","@i"],"size":"lg","disabled":["not","@entity.running"],"variant":["if","@entity.running","secondary",["if",["==","@i","@entity.correctIndex"],"success",["if",["==","@i","@entity.pickedIndex"],"danger","ghost"]]]}]]},["if",["or",["==","@entity.feedback",""],"@entity.done"],null,{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","error"],"label":["if",["==","@entity.verdict","correct"],"Correct",["if",["==","@entity.verdict","timeout"],"Time's up","Incorrect"]]},{"type":"typography","variant":"body","content":"@entity.feedback"}]}],["if","@entity.done",{"type":"typography","variant":"body","content":"@entity.feedback"},null],{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"NEXT","label":"@config.nextLabel","icon":"chevron-right","variant":"primary","disabled":["if",["and",["==","@entity.running",false],["and",["!=","@entity.verdict",""],["==","@entity.done",false]]],false,true]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"ghost","disabled":["if","@entity.done",false,true]},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Best streak ","@entity.bestStreak"]}]}]}]}],["emit","ROUND_RESTARTED",{"totalItems":"@entity.totalItems"}]]}]},"ticks":[{"name":"speedTick","interval":100,"guard":["and",["==","@entity.active",true],["==","@entity.running",true]],"effects":[["set","@entity.remaining",["math/max",0,["-","@entity.remaining",1]]],["set","@entity.verdict",["if",["==","@entity.remaining",0],"timeout","@entity.verdict"]],["set","@entity.feedback",["if",["==","@entity.remaining",0],["str/concat","Time's up — the answer was: ",["array/nth","@entity.options","@entity.correctIndex"]],"@entity.feedback"]],["set","@entity.streak",["if",["==","@entity.remaining",0],0,"@entity.streak"]],["set","@entity.running",["if",["==","@entity.remaining",0],false,true]]]}],"config":{"speedBonus":{"type":"number","default":10,"label":"Speed Bonus","description":"Maximum extra points awarded in proportion to the time left on the clock.","tier":"domain"},"title":{"type":"string","default":"Speed Drill","label":"Title","description":"Title shown above the drill.","tier":"presentation"},"summary":{"type":"string","default":"","label":"Concept","description":"One line under the title saying what is being drilled (keep it under ~65 characters). Empty shows no line.","tier":"presentation"},"items":{"type":"[SpeedDrillItem]","default":[{"prompt":"7 × 8","options":["54","56","63","48"],"correctIndex":1},{"prompt":"9 × 6","options":["54","56","45","63"],"correctIndex":0},{"prompt":"12 × 12","options":["124","132","144","148"],"correctIndex":2}],"label":"Items","description":"The drill roster; each item carries a prompt, its options, and the index of the correct option. Realizations declare their own subject's items here.","tier":"domain","items":{"type":"object","properties":{"options":{"name":"options","type":"array","required":true,"items":{"type":"string"}},"prompt":{"name":"prompt","type":"string","required":true},"correctIndex":{"name":"correctIndex","type":"number","required":true}}}},"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, or on ROSTER_LOADED when rosterSource is event.","tier":"presentation"},"timeLimit":{"type":"number","default":6,"label":"Time Limit","description":"Seconds the learner has to answer each item before it counts as a miss.","tier":"domain"},"basePoints":{"type":"number","default":10,"label":"Base Points","description":"Points for a correct answer regardless of speed.","tier":"domain"},"nextLabel":{"type":"string","default":"Next","label":"Next Label","tier":"presentation"},"retryLabel":{"type":"string","default":"Try Again","label":"Retry Label","tier":"presentation"},"rosterSource":{"type":"string","default":"config","label":"Roster Source","description":"Where the roster comes from: config reads items knob at INIT; event waits for ROSTER_LOADED and takes the roster from its payload.","tier":"domain","values":["config","event"]}},"scope":"instance"}],"pages":[{"name":"SpeedDrillPage","id":"pag_PYABVGVEW4QE2F4AVWF853217C","path":"/learn-speed-drill","traits":[{"ref":"SpeedDrillSim","refId":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"}]}],"types":{"SpeedDrillItem":[{"name":"prompt","type":"string","required":true},{"name":"options","type":"[string]","required":true},{"name":"correctIndex","type":"number","required":true}]}}],"schemaVersion":1,"ledger":{"schemaVersion":1,"entries":{"ent_G745FEX7EXKQEYNPJH9H7FW9A5":{"id":"ent_G745FEX7EXKQEYNPJH9H7FW9A5","kind":"entity","bakedName":"SpeedDrillScene","curName":"SpeedDrillScene","renames":[],"owner":"workspace"},"evt_2B4DF7EDDG6PR46X112Q5KY72D":{"id":"evt_2B4DF7EDDG6PR46X112Q5KY72D","kind":"event","bakedName":"RETRY","curName":"RETRY","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"evt_8H7J8TRE5Z72ZPFQHE0MB0JA6W":{"id":"evt_8H7J8TRE5Z72ZPFQHE0MB0JA6W","kind":"event","bakedName":"MODE_SELECTED","curName":"MODE_SELECTED","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"evt_8SWKKMJD2D6H6R2BQTJ2TH3CKR":{"id":"evt_8SWKKMJD2D6H6R2BQTJ2TH3CKR","kind":"event","bakedName":"NEXT","curName":"NEXT","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"evt_C5683835B2JNH13V8WMXS8GPYZ":{"id":"evt_C5683835B2JNH13V8WMXS8GPYZ","kind":"event","bakedName":"ROUND_RESTARTED","curName":"ROUND_RESTARTED","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"evt_Q0PJBAFTWPXEB6QHGS95JRFNFS":{"id":"evt_Q0PJBAFTWPXEB6QHGS95JRFNFS","kind":"event","bakedName":"INIT","curName":"INIT","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"evt_RZR7DAVX4EYJ7CJZVXC1HCKZHW":{"id":"evt_RZR7DAVX4EYJ7CJZVXC1HCKZHW","kind":"event","bakedName":"ROSTER_LOADED","curName":"ROSTER_LOADED","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"evt_SVZF4QDK05SG2TWPG7HJFQSDP5":{"id":"evt_SVZF4QDK05SG2TWPG7HJFQSDP5","kind":"event","bakedName":"ANSWER","curName":"ANSWER","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"evt_TDNQHK9WFCY7PFD49KM4CJKRMT":{"id":"evt_TDNQHK9WFCY7PFD49KM4CJKRMT","kind":"event","bakedName":"PROMPT_ADVANCED","curName":"PROMPT_ADVANCED","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"evt_W1NXDBHP08V045P22H5CZ2JWZR":{"id":"evt_W1NXDBHP08V045P22H5CZ2JWZR","kind":"event","bakedName":"ANSWER_JUDGED","curName":"ANSWER_JUDGED","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"evt_Y53M77ZDDVPPXK26QWB0AFK9V3":{"id":"evt_Y53M77ZDDVPPXK26QWB0AFK9V3","kind":"event","bakedName":"LEARN_ROUND_COMPLETE","curName":"LEARN_ROUND_COMPLETE","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"orb_6V579HK9JQMSBM3VF1Y8NS45KY":{"id":"orb_6V579HK9JQMSBM3VF1Y8NS45KY","kind":"orbital","bakedName":"SpeedDrillOrbital","curName":"SpeedDrillOrbital","renames":[],"owner":"workspace"},"pag_PYABVGVEW4QE2F4AVWF853217C":{"id":"pag_PYABVGVEW4QE2F4AVWF853217C","kind":"page","bakedName":"SpeedDrillPage","curName":"SpeedDrillPage","renames":[],"owner":"workspace"},"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE":{"id":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE","kind":"trait","bakedName":"SpeedDrillSim","curName":"SpeedDrillSim","renames":[],"owner":"workspace"}}}}
|
|
1
|
+
{"name":"std-learn-speed-drill","version":"1.0.0","description":"Generic speeded-response drill — a config-declared item roster of prompt + options runs against a live countdown: answering while the clock runs scores the base points plus a speed bonus proportional to the time left, letting the clock hit zero counts as a miss and reveals the answer, and a streak counter rewards consecutive hits with an end-of-round summary of score and best streak. All vocabulary and timing is config-declared, so the same mechanism serves any fluency drill: times tables, sight vocabulary, chemical symbols, flag recognition, interval identification — anywhere fast retrieval is the skill. Standalone by default; behind a lab router set matchMode and it renders only when MODE_SELECTED matches.","orbitals":[{"name":"SpeedDrillOrbital","id":"orb_6V579HK9JQMSBM3VF1Y8NS45KY","entity":{"name":"SpeedDrillScene","id":"ent_G745FEX7EXKQEYNPJH9H7FW9A5","persistence":"runtime","fields":[{"name":"id","type":"string","required":true},{"name":"active","type":"boolean","default":false},{"name":"title","type":"string"},{"name":"items","type":"array","items":{"type":"object","properties":{"options":{"name":"options","type":"array","required":true,"items":{"type":"string"}},"prompt":{"name":"prompt","type":"string","required":true},"correctIndex":{"name":"correctIndex","type":"number","required":true}}}},{"name":"itemIndex","type":"number","default":0},{"name":"totalItems","type":"number","default":0},{"name":"remaining","type":"number","default":0},{"name":"running","type":"boolean","default":false},{"name":"verdict","type":"string"},{"name":"score","type":"number","default":0},{"name":"streak","type":"number","default":0},{"name":"bestStreak","type":"number","default":0},{"name":"done","type":"boolean","default":false},{"name":"promptText","type":"string"},{"name":"options","type":"array","items":{"type":"string"}},{"name":"correctIndex","type":"number","default":0},{"name":"feedback","type":"string"},{"name":"pickedIndex","type":"number","default":-1},{"name":"view","type":"array","items":{"type":"node"}}]},"traits":[{"name":"SpeedDrillSim","id":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE","entityRebindable":true,"entityContract":{"requires":[],"provides":["active","bestStreak","correctIndex","done","feedback","itemIndex","items","options","pickedIndex","promptText","remaining","running","score","streak","title","totalItems","verdict","view"]},"effectRow":[{"kind":"emit","resource":"ANSWER_JUDGED"},{"kind":"emit","resource":"LEARN_ROUND_COMPLETE"},{"kind":"emit","resource":"PROMPT_ADVANCED"},{"kind":"emit","resource":"ROUND_RESTARTED"},{"kind":"render-ui","resource":"main"},{"kind":"set","resource":"@entity.active"},{"kind":"set","resource":"@entity.bestStreak"},{"kind":"set","resource":"@entity.correctIndex"},{"kind":"set","resource":"@entity.done"},{"kind":"set","resource":"@entity.feedback"},{"kind":"set","resource":"@entity.feedback","site":"tick"},{"kind":"set","resource":"@entity.itemIndex"},{"kind":"set","resource":"@entity.items"},{"kind":"set","resource":"@entity.options"},{"kind":"set","resource":"@entity.pickedIndex"},{"kind":"set","resource":"@entity.promptText"},{"kind":"set","resource":"@entity.remaining"},{"kind":"set","resource":"@entity.remaining","site":"tick"},{"kind":"set","resource":"@entity.running"},{"kind":"set","resource":"@entity.running","site":"tick"},{"kind":"set","resource":"@entity.score"},{"kind":"set","resource":"@entity.streak"},{"kind":"set","resource":"@entity.streak","site":"tick"},{"kind":"set","resource":"@entity.title"},{"kind":"set","resource":"@entity.totalItems"},{"kind":"set","resource":"@entity.verdict"},{"kind":"set","resource":"@entity.verdict","site":"tick"},{"kind":"set","resource":"@entity.view"},{"kind":"ticks","site":"tick"}],"category":"interaction","linkedEntity":"SpeedDrillScene","linkedEntityId":"ent_G745FEX7EXKQEYNPJH9H7FW9A5","entityRefIds":{"SpeedDrillScene":"ent_G745FEX7EXKQEYNPJH9H7FW9A5"},"emits":[{"event":"ANSWER_JUDGED","eventId":"evt_W1NXDBHP08V045P22H5CZ2JWZR","description":"The verdict of a speeded answer: correctness, tenths of a second left on the clock, and the running score and streak — a composed listener (coach, grader) can subscribe; a harmless no-op when the atom runs standalone.","synonyms":"speed drill, reaction time, fluency, timed quiz, countdown, rapid recall","tier":"domain","scope":"external","payloadSchema":[{"name":"correct","type":"boolean"},{"name":"timeLeftTenths","type":"number"},{"name":"score","type":"number"},{"name":"streak","type":"number"}]},{"event":"PROMPT_ADVANCED","eventId":"evt_TDNQHK9WFCY7PFD49KM4CJKRMT","description":"The learner moved to the next item (or completed the round) with the running score.","tier":"domain","scope":"external","payloadSchema":[{"name":"itemIndex","type":"number"},{"name":"done","type":"boolean"},{"name":"score","type":"number"}]},{"event":"ROUND_RESTARTED","eventId":"evt_C5683835B2JNH13V8WMXS8GPYZ","description":"The learner restarted the round from scratch.","tier":"domain","scope":"external","payloadSchema":[{"name":"totalItems","type":"number"}]},{"event":"LEARN_ROUND_COMPLETE","eventId":"evt_Y53M77ZDDVPPXK26QWB0AFK9V3","description":"Fired once when the round finishes (advancing past the final prompt) — 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_Q0PJBAFTWPXEB6QHGS95JRFNFS","name":"Initialize"},{"key":"MODE_SELECTED","id":"evt_8H7J8TRE5Z72ZPFQHE0MB0JA6W","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_RZR7DAVX4EYJ7CJZVXC1HCKZHW","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) and items is the drill roster; a matching instrument re-initialises from it 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":"prompt","type":"string","required":true},{"name":"options","type":"[string]","required":true},{"name":"correctIndex","type":"number","required":true}]}],"listened":true},{"key":"ANSWER","id":"evt_SVZF4QDK05SG2TWPG7HJFQSDP5","name":"Answer","description":"Learner picked an option while the clock was running — index is the chosen option; it is judged immediately and scored with a speed bonus.","tier":"domain","payloadSchema":[{"name":"index","type":"number"}],"listened":true},{"key":"NEXT","id":"evt_8SWKKMJD2D6H6R2BQTJ2TH3CKR","name":"Next","description":"Learner advanced to the next item after a verdict (answered or timed out); past the last item this completes the round.","tier":"domain","listened":true},{"key":"RETRY","id":"evt_2B4DF7EDDG6PR46X112Q5KY72D","name":"Retry","description":"Learner restarted the round from the first item with a cleared score and streak.","tier":"domain","listened":true},{"key":"ANSWER_JUDGED","id":"evt_W1NXDBHP08V045P22H5CZ2JWZR","name":"Answer Judged","description":"The verdict of a speeded answer: correctness, tenths of a second left on the clock, and the running score and streak — a composed listener (coach, grader) can subscribe; a harmless no-op when the atom runs standalone.","synonyms":"speed drill, reaction time, fluency, timed quiz, countdown, rapid recall","tier":"domain","payloadSchema":[{"name":"correct","type":"boolean"},{"name":"timeLeftTenths","type":"number"},{"name":"score","type":"number"},{"name":"streak","type":"number"}]},{"key":"PROMPT_ADVANCED","id":"evt_TDNQHK9WFCY7PFD49KM4CJKRMT","name":"Prompt Advanced","description":"The learner moved to the next item (or completed the round) with the running score.","tier":"domain","payloadSchema":[{"name":"itemIndex","type":"number"},{"name":"done","type":"boolean"},{"name":"score","type":"number"}]},{"key":"ROUND_RESTARTED","id":"evt_C5683835B2JNH13V8WMXS8GPYZ","name":"Round Restarted","description":"The learner restarted the round from scratch.","tier":"domain","payloadSchema":[{"name":"totalItems","type":"number"}]},{"key":"LEARN_ROUND_COMPLETE","id":"evt_Y53M77ZDDVPPXK26QWB0AFK9V3","name":"Learn Round Complete","description":"Fired once when the round finishes (advancing past the final prompt) — 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_Q0PJBAFTWPXEB6QHGS95JRFNFS","guard":["and",["==","@config.matchMode",""],["==","@config.rosterSource","config"]],"effects":[["set","@entity.items","@config.items"],["let",[["first",["array/nth","@config.items",0]]],["do",["set","@entity.active",true],["set","@entity.title","@config.title"],["set","@entity.itemIndex",0],["set","@entity.totalItems",["array/len","@config.items"]],["set","@entity.remaining",["*","@config.timeLimit",10]],["set","@entity.running",true],["set","@entity.verdict",""],["set","@entity.pickedIndex",-1],["set","@entity.score",0],["set","@entity.streak",0],["set","@entity.bestStreak",0],["set","@entity.done",false],["set","@entity.promptText",["object/get","@first","prompt"]],["set","@entity.options",["object/get","@first","options"]],["set","@entity.correctIndex",["object/get","@first","correctIndex"]],["set","@entity.feedback",""],["set","@entity.view",[{"type":"card","variant":"bordered","padding":"md","children":[{"type":"typography","variant":"h4","content":"@entity.promptText"}]}]]]],["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.done","Round complete",["str/concat","@entity.score"," pts · streak ","@entity.streak"]],"variant":["if","@entity.done","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict",""],"neutral","error"]]]}]},{"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":"progress-bar","value":"@entity.remaining","max":["*","@config.timeLimit",10],"variant":["if",["<","@entity.remaining",["*","@config.timeLimit",3]],"warning","primary"],"showPercentage":false,"label":["str/concat","Time left: ",["math/round",["/","@entity.remaining",10],1],"s"]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.view"},{"type":"stack","direction":"vertical","gap":"sm","children":["array/map",["array/range",0,["array/len","@entity.options"]],["fn",["i"],{"type":"button","action":"ANSWER","actionPayload":{"index":"@i"},"label":["array/nth","@entity.options","@i"],"size":"lg","disabled":["not","@entity.running"],"variant":["if","@entity.running","secondary",["if",["==","@i","@entity.correctIndex"],"success",["if",["==","@i","@entity.pickedIndex"],"danger","ghost"]]]}]]},["if",["or",["==","@entity.feedback",""],"@entity.done"],null,{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","error"],"label":["if",["==","@entity.verdict","correct"],"Correct",["if",["==","@entity.verdict","timeout"],"Time's up","Incorrect"]]},{"type":"typography","variant":"body","content":"@entity.feedback"}]}],["if","@entity.done",{"type":"typography","variant":"body","content":"@entity.feedback"},null],{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"NEXT","label":"@config.nextLabel","icon":"chevron-right","variant":"primary","disabled":["if",["and",["==","@entity.running",false],["and",["!=","@entity.verdict",""],["==","@entity.done",false]]],false,true]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"ghost","disabled":["if","@entity.done",false,true]},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Best streak ","@entity.bestStreak"]}]}]}]}]]},{"from":"idle","to":"idle","event":"MODE_SELECTED","eventId":"evt_8H7J8TRE5Z72ZPFQHE0MB0JA6W","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_8H7J8TRE5Z72ZPFQHE0MB0JA6W","guard":["and",["==","@payload.mode","@config.matchMode"],["==","@config.rosterSource","config"]],"effects":[["set","@entity.items","@config.items"],["let",[["first",["array/nth","@config.items",0]]],["do",["set","@entity.active",true],["set","@entity.title","@config.title"],["set","@entity.itemIndex",0],["set","@entity.totalItems",["array/len","@config.items"]],["set","@entity.remaining",["*","@config.timeLimit",10]],["set","@entity.running",true],["set","@entity.verdict",""],["set","@entity.pickedIndex",-1],["set","@entity.score",0],["set","@entity.streak",0],["set","@entity.bestStreak",0],["set","@entity.done",false],["set","@entity.promptText",["object/get","@first","prompt"]],["set","@entity.options",["object/get","@first","options"]],["set","@entity.correctIndex",["object/get","@first","correctIndex"]],["set","@entity.feedback",""],["set","@entity.view",[{"type":"card","variant":"bordered","padding":"md","children":[{"type":"typography","variant":"h4","content":"@entity.promptText"}]}]]]],["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.done","Round complete",["str/concat","@entity.score"," pts · streak ","@entity.streak"]],"variant":["if","@entity.done","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict",""],"neutral","error"]]]}]},{"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":"progress-bar","value":"@entity.remaining","max":["*","@config.timeLimit",10],"variant":["if",["<","@entity.remaining",["*","@config.timeLimit",3]],"warning","primary"],"showPercentage":false,"label":["str/concat","Time left: ",["math/round",["/","@entity.remaining",10],1],"s"]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.view"},{"type":"stack","direction":"vertical","gap":"sm","children":["array/map",["array/range",0,["array/len","@entity.options"]],["fn",["i"],{"type":"button","action":"ANSWER","actionPayload":{"index":"@i"},"label":["array/nth","@entity.options","@i"],"size":"lg","disabled":["not","@entity.running"],"variant":["if","@entity.running","secondary",["if",["==","@i","@entity.correctIndex"],"success",["if",["==","@i","@entity.pickedIndex"],"danger","ghost"]]]}]]},["if",["or",["==","@entity.feedback",""],"@entity.done"],null,{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","error"],"label":["if",["==","@entity.verdict","correct"],"Correct",["if",["==","@entity.verdict","timeout"],"Time's up","Incorrect"]]},{"type":"typography","variant":"body","content":"@entity.feedback"}]}],["if","@entity.done",{"type":"typography","variant":"body","content":"@entity.feedback"},null],{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"NEXT","label":"@config.nextLabel","icon":"chevron-right","variant":"primary","disabled":["if",["and",["==","@entity.running",false],["and",["!=","@entity.verdict",""],["==","@entity.done",false]]],false,true]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"ghost","disabled":["if","@entity.done",false,true]},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Best streak ","@entity.bestStreak"]}]}]}]}]]},{"from":"idle","to":"idle","event":"ROSTER_LOADED","eventId":"evt_RZR7DAVX4EYJ7CJZVXC1HCKZHW","guard":["and",["==","@config.rosterSource","event"],["and",["==","@payload.mode","@config.matchMode"],[">",["array/len","@payload.items"],0]]],"effects":[["set","@entity.items","@payload.items"],["let",[["first",["array/nth","@payload.items",0]]],["do",["set","@entity.active",true],["set","@entity.title","@config.title"],["set","@entity.itemIndex",0],["set","@entity.totalItems",["array/len","@payload.items"]],["set","@entity.remaining",["*","@config.timeLimit",10]],["set","@entity.running",true],["set","@entity.verdict",""],["set","@entity.pickedIndex",-1],["set","@entity.score",0],["set","@entity.streak",0],["set","@entity.bestStreak",0],["set","@entity.done",false],["set","@entity.promptText",["object/get","@first","prompt"]],["set","@entity.options",["object/get","@first","options"]],["set","@entity.correctIndex",["object/get","@first","correctIndex"]],["set","@entity.feedback",""],["set","@entity.view",[{"type":"card","variant":"bordered","padding":"md","children":[{"type":"typography","variant":"h4","content":"@entity.promptText"}]}]]]],["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.done","Round complete",["str/concat","@entity.score"," pts · streak ","@entity.streak"]],"variant":["if","@entity.done","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict",""],"neutral","error"]]]}]},{"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":"progress-bar","value":"@entity.remaining","max":["*","@config.timeLimit",10],"variant":["if",["<","@entity.remaining",["*","@config.timeLimit",3]],"warning","primary"],"showPercentage":false,"label":["str/concat","Time left: ",["math/round",["/","@entity.remaining",10],1],"s"]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.view"},{"type":"stack","direction":"vertical","gap":"sm","children":["array/map",["array/range",0,["array/len","@entity.options"]],["fn",["i"],{"type":"button","action":"ANSWER","actionPayload":{"index":"@i"},"label":["array/nth","@entity.options","@i"],"size":"lg","disabled":["not","@entity.running"],"variant":["if","@entity.running","secondary",["if",["==","@i","@entity.correctIndex"],"success",["if",["==","@i","@entity.pickedIndex"],"danger","ghost"]]]}]]},["if",["or",["==","@entity.feedback",""],"@entity.done"],null,{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","error"],"label":["if",["==","@entity.verdict","correct"],"Correct",["if",["==","@entity.verdict","timeout"],"Time's up","Incorrect"]]},{"type":"typography","variant":"body","content":"@entity.feedback"}]}],["if","@entity.done",{"type":"typography","variant":"body","content":"@entity.feedback"},null],{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"NEXT","label":"@config.nextLabel","icon":"chevron-right","variant":"primary","disabled":["if",["and",["==","@entity.running",false],["and",["!=","@entity.verdict",""],["==","@entity.done",false]]],false,true]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"ghost","disabled":["if","@entity.done",false,true]},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Best streak ","@entity.bestStreak"]}]}]}]}]]},{"from":"idle","to":"idle","event":"ROSTER_LOADED","eventId":"evt_RZR7DAVX4EYJ7CJZVXC1HCKZHW","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":"ANSWER","eventId":"evt_SVZF4QDK05SG2TWPG7HJFQSDP5","guard":["and",["==","@entity.active",true],["and",["==","@entity.running",true],["==","@entity.done",false]]],"effects":[["let",[["correct",["==","@payload.index","@entity.correctIndex"]],["bonus",["math/round",["/","@entity.remaining",10],1]],["points",["if","@correct",["+","@config.basePoints",["math/round",["*","@config.speedBonus",["/","@entity.remaining",["*","@config.timeLimit",10]]],0]],0]],["newStreak",["if","@correct",["+","@entity.streak",1],0]]],["do",["set","@entity.running",false],["set","@entity.pickedIndex","@payload.index"],["set","@entity.verdict",["if","@correct","correct","wrong"]],["set","@entity.score",["+","@entity.score","@points"]],["set","@entity.streak","@newStreak"],["set","@entity.bestStreak",["math/max","@entity.bestStreak","@newStreak"]],["set","@entity.feedback",["if","@correct",["str/concat","Correct with ","@bonus","s to spare — +",["str/concat","","@points"]," points."],["str/concat","Not quite — the answer was: ",["array/nth","@entity.options","@entity.correctIndex"]]]]]],["emit","ANSWER_JUDGED",{"correct":["==","@entity.verdict","correct"],"timeLeftTenths":"@entity.remaining","score":"@entity.score","streak":"@entity.streak"}]]},{"from":"idle","to":"idle","event":"NEXT","eventId":"evt_8SWKKMJD2D6H6R2BQTJ2TH3CKR","guard":["and",["==","@entity.active",true],["and",["==","@entity.running",false],["and",["!=","@entity.verdict",""],["==","@entity.done",false]]]],"effects":[["if",[">=",["+","@entity.itemIndex",1],["array/len","@entity.items"]],["emit","LEARN_ROUND_COMPLETE",{"score":"@entity.score","total":["array/len","@entity.items"]}],null],["let",[["nextIndex",["+","@entity.itemIndex",1]],["finished",[">=","@nextIndex",["array/len","@entity.items"]]],["next",["array/nth","@entity.items",["math/min","@nextIndex",["-",["array/len","@entity.items"],1]]]]],["do",["set","@entity.itemIndex",["if","@finished","@entity.itemIndex","@nextIndex"]],["set","@entity.done",["if","@finished",true,false]],["set","@entity.remaining",["if","@finished",0,["*","@config.timeLimit",10]]],["set","@entity.running",["if","@finished",false,true]],["set","@entity.verdict",""],["set","@entity.pickedIndex",-1],["set","@entity.promptText",["if","@finished","@entity.promptText",["object/get","@next","prompt"]]],["set","@entity.options",["if","@finished",[],["object/get","@next","options"]]],["set","@entity.correctIndex",["if","@finished","@entity.correctIndex",["object/get","@next","correctIndex"]]],["set","@entity.feedback",["if","@finished",["str/concat","Round complete — final score ",["str/concat","","@entity.score"],", best streak ",["str/concat","","@entity.bestStreak"],"."],""]],["set","@entity.view",["if","@finished",[{"type":"typography","variant":"h4","content":"Round Complete"},{"type":"stat-display","label":"Final score","value":"@entity.score","max":0}],[{"type":"card","variant":"bordered","padding":"md","children":[{"type":"typography","variant":"h4","content":"@entity.promptText"}]}]]]]],["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.done","Round complete",["str/concat","@entity.score"," pts · streak ","@entity.streak"]],"variant":["if","@entity.done","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict",""],"neutral","error"]]]}]},{"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":"progress-bar","value":"@entity.remaining","max":["*","@config.timeLimit",10],"variant":["if",["<","@entity.remaining",["*","@config.timeLimit",3]],"warning","primary"],"showPercentage":false,"label":["str/concat","Time left: ",["math/round",["/","@entity.remaining",10],1],"s"]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.view"},{"type":"stack","direction":"vertical","gap":"sm","children":["array/map",["array/range",0,["array/len","@entity.options"]],["fn",["i"],{"type":"button","action":"ANSWER","actionPayload":{"index":"@i"},"label":["array/nth","@entity.options","@i"],"size":"lg","disabled":["not","@entity.running"],"variant":["if","@entity.running","secondary",["if",["==","@i","@entity.correctIndex"],"success",["if",["==","@i","@entity.pickedIndex"],"danger","ghost"]]]}]]},["if",["or",["==","@entity.feedback",""],"@entity.done"],null,{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","error"],"label":["if",["==","@entity.verdict","correct"],"Correct",["if",["==","@entity.verdict","timeout"],"Time's up","Incorrect"]]},{"type":"typography","variant":"body","content":"@entity.feedback"}]}],["if","@entity.done",{"type":"typography","variant":"body","content":"@entity.feedback"},null],{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"NEXT","label":"@config.nextLabel","icon":"chevron-right","variant":"primary","disabled":["if",["and",["==","@entity.running",false],["and",["!=","@entity.verdict",""],["==","@entity.done",false]]],false,true]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"ghost","disabled":["if","@entity.done",false,true]},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Best streak ","@entity.bestStreak"]}]}]}]}],["emit","PROMPT_ADVANCED",{"itemIndex":"@entity.itemIndex","done":"@entity.done","score":"@entity.score"}]]},{"from":"idle","to":"idle","event":"RETRY","eventId":"evt_2B4DF7EDDG6PR46X112Q5KY72D","guard":["and",["==","@entity.active",true],["==","@entity.done",true]],"effects":[["let",[["first",["array/nth","@entity.items",0]]],["do",["set","@entity.itemIndex",0],["set","@entity.remaining",["*","@config.timeLimit",10]],["set","@entity.running",true],["set","@entity.verdict",""],["set","@entity.pickedIndex",-1],["set","@entity.score",0],["set","@entity.streak",0],["set","@entity.bestStreak",0],["set","@entity.done",false],["set","@entity.promptText",["object/get","@first","prompt"]],["set","@entity.options",["object/get","@first","options"]],["set","@entity.correctIndex",["object/get","@first","correctIndex"]],["set","@entity.feedback",""],["set","@entity.view",[{"type":"card","variant":"bordered","padding":"md","children":[{"type":"typography","variant":"h4","content":"@entity.promptText"}]}]]]],["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.done","Round complete",["str/concat","@entity.score"," pts · streak ","@entity.streak"]],"variant":["if","@entity.done","primary",["if",["==","@entity.verdict","correct"],"success",["if",["==","@entity.verdict",""],"neutral","error"]]]}]},{"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":"progress-bar","value":"@entity.remaining","max":["*","@config.timeLimit",10],"variant":["if",["<","@entity.remaining",["*","@config.timeLimit",3]],"warning","primary"],"showPercentage":false,"label":["str/concat","Time left: ",["math/round",["/","@entity.remaining",10],1],"s"]},{"type":"stack","direction":"vertical","gap":"md","children":"@entity.view"},{"type":"stack","direction":"vertical","gap":"sm","children":["array/map",["array/range",0,["array/len","@entity.options"]],["fn",["i"],{"type":"button","action":"ANSWER","actionPayload":{"index":"@i"},"label":["array/nth","@entity.options","@i"],"size":"lg","disabled":["not","@entity.running"],"variant":["if","@entity.running","secondary",["if",["==","@i","@entity.correctIndex"],"success",["if",["==","@i","@entity.pickedIndex"],"danger","ghost"]]]}]]},["if",["or",["==","@entity.feedback",""],"@entity.done"],null,{"type":"stack","direction":"vertical","gap":"xs","children":[{"type":"badge","variant":["if",["==","@entity.verdict","correct"],"success","error"],"label":["if",["==","@entity.verdict","correct"],"Correct",["if",["==","@entity.verdict","timeout"],"Time's up","Incorrect"]]},{"type":"typography","variant":"body","content":"@entity.feedback"}]}],["if","@entity.done",{"type":"typography","variant":"body","content":"@entity.feedback"},null],{"type":"stack","direction":"horizontal","align":"center","gap":"sm","wrap":true,"children":[{"type":"button","action":"NEXT","label":"@config.nextLabel","icon":"chevron-right","variant":"primary","disabled":["if",["and",["==","@entity.running",false],["and",["!=","@entity.verdict",""],["==","@entity.done",false]]],false,true]},{"type":"button","action":"RETRY","label":"@config.retryLabel","icon":"rotate-ccw","variant":"ghost","disabled":["if","@entity.done",false,true]},{"type":"typography","variant":"caption","color":"muted","content":["str/concat","Best streak ","@entity.bestStreak"]}]}]}]}],["emit","ROUND_RESTARTED",{"totalItems":"@entity.totalItems"}]]}]},"ticks":[{"name":"speedTick","interval":100,"guard":["and",["==","@entity.active",true],["==","@entity.running",true]],"effects":[["set","@entity.remaining",["math/max",0,["-","@entity.remaining",1]]],["set","@entity.verdict",["if",["==","@entity.remaining",0],"timeout","@entity.verdict"]],["set","@entity.feedback",["if",["==","@entity.remaining",0],["str/concat","Time's up — the answer was: ",["array/nth","@entity.options","@entity.correctIndex"]],"@entity.feedback"]],["set","@entity.streak",["if",["==","@entity.remaining",0],0,"@entity.streak"]],["set","@entity.running",["if",["==","@entity.remaining",0],false,true]]]}],"config":{"retryLabel":{"type":"string","default":"Try Again","label":"Retry Label","tier":"presentation"},"summary":{"type":"string","default":"","label":"Concept","description":"One line under the title saying what is being drilled (keep it under ~65 characters). Empty shows no line.","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, or on ROSTER_LOADED when rosterSource is event.","tier":"presentation"},"basePoints":{"type":"number","default":10,"label":"Base Points","description":"Points for a correct answer regardless of speed.","tier":"domain"},"speedBonus":{"type":"number","default":10,"label":"Speed Bonus","description":"Maximum extra points awarded in proportion to the time left on the clock.","tier":"domain"},"nextLabel":{"type":"string","default":"Next","label":"Next Label","tier":"presentation"},"rosterSource":{"type":"string","default":"config","label":"Roster Source","description":"Where the roster comes from: config reads items knob at INIT; event waits for ROSTER_LOADED and takes the roster from its payload.","tier":"domain","values":["config","event"]},"timeLimit":{"type":"number","default":6,"label":"Time Limit","description":"Seconds the learner has to answer each item before it counts as a miss.","tier":"domain"},"title":{"type":"string","default":"Speed Drill","label":"Title","description":"Title shown above the drill.","tier":"presentation"},"items":{"type":"[SpeedDrillItem]","default":[{"prompt":"7 × 8","options":["54","56","63","48"],"correctIndex":1},{"prompt":"9 × 6","options":["54","56","45","63"],"correctIndex":0},{"prompt":"12 × 12","options":["124","132","144","148"],"correctIndex":2}],"label":"Items","description":"The drill roster; each item carries a prompt, its options, and the index of the correct option. Realizations declare their own subject's items here.","tier":"domain","items":{"type":"object","properties":{"prompt":{"name":"prompt","type":"string","required":true},"options":{"name":"options","type":"array","required":true,"items":{"type":"string"}},"correctIndex":{"name":"correctIndex","type":"number","required":true}}}}},"scope":"instance"}],"pages":[{"name":"SpeedDrillPage","id":"pag_PYABVGVEW4QE2F4AVWF853217C","path":"/learn-speed-drill","traits":[{"ref":"SpeedDrillSim","refId":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"}]}],"types":{"SpeedDrillItem":[{"name":"prompt","type":"string","required":true},{"name":"options","type":"[string]","required":true},{"name":"correctIndex","type":"number","required":true}]}}],"schemaVersion":1,"ledger":{"schemaVersion":1,"entries":{"ent_G745FEX7EXKQEYNPJH9H7FW9A5":{"id":"ent_G745FEX7EXKQEYNPJH9H7FW9A5","kind":"entity","bakedName":"SpeedDrillScene","curName":"SpeedDrillScene","renames":[],"owner":"workspace"},"evt_2B4DF7EDDG6PR46X112Q5KY72D":{"id":"evt_2B4DF7EDDG6PR46X112Q5KY72D","kind":"event","bakedName":"RETRY","curName":"RETRY","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"evt_8H7J8TRE5Z72ZPFQHE0MB0JA6W":{"id":"evt_8H7J8TRE5Z72ZPFQHE0MB0JA6W","kind":"event","bakedName":"MODE_SELECTED","curName":"MODE_SELECTED","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"evt_8SWKKMJD2D6H6R2BQTJ2TH3CKR":{"id":"evt_8SWKKMJD2D6H6R2BQTJ2TH3CKR","kind":"event","bakedName":"NEXT","curName":"NEXT","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"evt_C5683835B2JNH13V8WMXS8GPYZ":{"id":"evt_C5683835B2JNH13V8WMXS8GPYZ","kind":"event","bakedName":"ROUND_RESTARTED","curName":"ROUND_RESTARTED","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"evt_Q0PJBAFTWPXEB6QHGS95JRFNFS":{"id":"evt_Q0PJBAFTWPXEB6QHGS95JRFNFS","kind":"event","bakedName":"INIT","curName":"INIT","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"evt_RZR7DAVX4EYJ7CJZVXC1HCKZHW":{"id":"evt_RZR7DAVX4EYJ7CJZVXC1HCKZHW","kind":"event","bakedName":"ROSTER_LOADED","curName":"ROSTER_LOADED","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"evt_SVZF4QDK05SG2TWPG7HJFQSDP5":{"id":"evt_SVZF4QDK05SG2TWPG7HJFQSDP5","kind":"event","bakedName":"ANSWER","curName":"ANSWER","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"evt_TDNQHK9WFCY7PFD49KM4CJKRMT":{"id":"evt_TDNQHK9WFCY7PFD49KM4CJKRMT","kind":"event","bakedName":"PROMPT_ADVANCED","curName":"PROMPT_ADVANCED","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"evt_W1NXDBHP08V045P22H5CZ2JWZR":{"id":"evt_W1NXDBHP08V045P22H5CZ2JWZR","kind":"event","bakedName":"ANSWER_JUDGED","curName":"ANSWER_JUDGED","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"evt_Y53M77ZDDVPPXK26QWB0AFK9V3":{"id":"evt_Y53M77ZDDVPPXK26QWB0AFK9V3","kind":"event","bakedName":"LEARN_ROUND_COMPLETE","curName":"LEARN_ROUND_COMPLETE","renames":[],"owner":"workspace","parent":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE"},"orb_6V579HK9JQMSBM3VF1Y8NS45KY":{"id":"orb_6V579HK9JQMSBM3VF1Y8NS45KY","kind":"orbital","bakedName":"SpeedDrillOrbital","curName":"SpeedDrillOrbital","renames":[],"owner":"workspace"},"pag_PYABVGVEW4QE2F4AVWF853217C":{"id":"pag_PYABVGVEW4QE2F4AVWF853217C","kind":"page","bakedName":"SpeedDrillPage","curName":"SpeedDrillPage","renames":[],"owner":"workspace"},"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE":{"id":"trt_CJRFM9HDF1PQGPYHNY0RGVD5VE","kind":"trait","bakedName":"SpeedDrillSim","curName":"SpeedDrillSim","renames":[],"owner":"workspace"}}}}
|