@pixel-point/toolcraft 0.0.13 → 0.0.14

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.
@@ -0,0 +1,83 @@
1
+ # Performance
2
+
3
+ Read this module before changing renderer technique, animation, canvas, media, export, render scale, heavy controls, or performance tests.
4
+
5
+ ## Verification Triggers
6
+
7
+ Run a full performance checkpoint only when:
8
+
9
+ - the first working product app version exists;
10
+ - the user explicitly asks to optimize performance, fix lag, remove jank, speed up animation, stabilize drag/zoom, or otherwise complains about performance.
11
+
12
+ After the first working version, feature loops do not run the full performance suite by default. Renderer, canvas, animation, export, timeline, layers, `canvas.renderScale`, bug fixes, and performance-sensitive controls still need targeted functional/browser checks first, plus targeted performance scenarios only when they directly exercise the touched workload, viewport, or export path.
13
+
14
+ ## Verification Tiers
15
+
16
+ - Tier 0-1: targeted docs/typecheck/unit plus focused browser when visual.
17
+ - Tier 2: `pnpm verify:quick` plus relevant browser acceptance.
18
+ - Tier 3: `pnpm verify:quick`, targeted browser acceptance, and targeted performance scenarios for touched workload/viewport/export paths.
19
+ - Tier 4: `pnpm verify:final`; for the first working product version also run and pass a browser performance checkpoint with the current AI agent's controlled browser when available, using `pnpm verify:perf` only as fallback.
20
+
21
+ Record skipped full performance runs and reason in the verification note or worklog.
22
+
23
+ ## Workload Fixtures
24
+
25
+ - Performance scenarios declare `stressFixture` for the tested control value.
26
+ - Browser perf tests use `getToolcraftPerformanceStressValue(appPerformance, scenarioId)` so heavy-case tests cannot use toy values.
27
+ - When the tested control is not itself the whole heavy source, declare `workloadFixture` and apply it first.
28
+ - Numeric maximums, density, item counts, canvas/media size, and combined heavy states declare `loadProfile` with `hardLimit`, `smoothTarget`, and `smoothTargetRatio`.
29
+ - Try the hard limit first.
30
+ - Lower the guaranteed smooth target only in 10 percent steps with failed-measurement and optimization evidence.
31
+ - Ranges above `smoothTarget` are experimental, not silently guaranteed.
32
+
33
+ ## Media And Pixel Workloads
34
+
35
+ - Media import and image-processing workloads use realistic `kind: "media"` fixtures at least `1920x1080`-equivalent.
36
+ - Heavy upload/preview tests must cover realistic source dimensions such as 2K/4K when the app accepts images.
37
+ - Heavy pixel/media Canvas 2D must evaluate WebGL or WebGPU with measured evidence before staying on CPU.
38
+ - Do not stay on CPU for millions of per-pixel operations on the main thread unless measurement proves it remains responsive and alternatives were evaluated.
39
+
40
+ ## Render Scale
41
+
42
+ - Non-vector raster, Canvas 2D, WebGL, and WebGPU previews set `canvas.renderScale: true`.
43
+ - Runtime `Resolution scale` defaults to `2` and changes backing pixels without changing CSS/output size.
44
+ - Performance fixes must preserve selected render scale and visible output quality.
45
+ - Do not downsample, blur, stretch low-resolution backing pixels, or clamp render scale below the user's chosen value to pass budgets.
46
+
47
+ ## Slider Responsiveness
48
+
49
+ - Slider and range slider controls are live canvas controls.
50
+ - Dragging a thumb updates runtime state and product output while the drag is in progress.
51
+ - If live updates are slow, fix renderer path first:
52
+ - update uniforms or stable buffers;
53
+ - cache decoded media and expensive derived inputs;
54
+ - coalesce preview work to `requestAnimationFrame`;
55
+ - cancel stale async renders;
56
+ - move heavy work off React renders;
57
+ - change renderer strategy when measured evidence supports it.
58
+ - Only at an extreme measured ceiling may the app use degraded live preview or delayed heavy refinement; even then, immediate canvas feedback is required.
59
+
60
+ ## Renderer Pipeline Inventory
61
+
62
+ Custom renderer apps declare a typed `rendererPipeline`:
63
+
64
+ - render passes;
65
+ - cache keys;
66
+ - execution location;
67
+ - preview/export quality;
68
+ - interaction invalidation;
69
+ - control-to-pass mapping.
70
+
71
+ Every performance-sensitive control maps to the pass it invalidates.
72
+
73
+ ## Optimization Evidence
74
+
75
+ Optimization worklogs record:
76
+
77
+ - bottleneck diagnosis;
78
+ - renderer technique evaluated;
79
+ - fixtures used;
80
+ - measurements before and after;
81
+ - rejected alternatives;
82
+ - remaining risks;
83
+ - why quality was preserved.
@@ -0,0 +1,115 @@
1
+ # Reference Study
2
+
3
+ Read this module before porting, auditing, or rebuilding from a reference app, Figma file, video, GIF, screen recording, contact sheet, or extracted frames.
4
+
5
+ ## Reference Runtime Clone
6
+
7
+ When porting an existing app, use `transferMode: "reference-runtime-clone"` unless the user explicitly asks for redesign.
8
+
9
+ Preserve the reference runtime as source of truth:
10
+
11
+ - animation loop and time ownership;
12
+ - refs and mutable renderer state;
13
+ - particles, objects, connections, spawn cadence, and lifetime rules;
14
+ - pause/resume, restart, progress, export, and copy semantics;
15
+ - canvas sizing and media lifecycle;
16
+ - control-to-renderer mapping.
17
+
18
+ Toolcraft still owns the shell: schema, controls, canvas, panels, toolbar, file upload, sticky footer actions, and `canvasContent`.
19
+
20
+ Do not iframe the reference, replace the route with copied original UI, or rebuild the app as a different shell.
21
+
22
+ ## Feature Inventory
23
+
24
+ Before implementation, create `starterTransferMode.referenceFeatureInventory` from inspected reference source/runtime/UI.
25
+
26
+ Include every user-visible and output-affecting behavior:
27
+
28
+ - controls;
29
+ - modes;
30
+ - generated objects;
31
+ - renderer state;
32
+ - media import lifecycle;
33
+ - canvas sizing;
34
+ - layers and selection;
35
+ - timeline and transport;
36
+ - export/copy;
37
+ - persistence;
38
+ - randomization;
39
+ - reset behavior.
40
+
41
+ Each inventory item names the reference feature, cites source evidence, cites feature-level behavior evidence, describes original behavior, describes Toolcraft mapping, and points to an `acceptanceId` that proves the behavior.
42
+
43
+ Use `status: "ported"` when the behavior is carried over directly and `status: "toolcraft-native"` when Toolcraft owns the same behavior. If behavior is intentionally changed or omitted, mark it `status: "intentionally-changed"` and set `userApprovedChangeReason` with explicit user approval or redesign/change-request evidence.
44
+
45
+ Do not rely on the user to find missing reference functionality after delivery.
46
+
47
+ ## Reference Study Record
48
+
49
+ Declare `starterTransferMode.referenceStudy` and record:
50
+
51
+ - where the reference lives;
52
+ - which source/runtime files, routes, assets, and handlers were inspected;
53
+ - how the original was run or restored locally in the Toolcraft environment;
54
+ - which runtime/browser behaviors were checked.
55
+
56
+ Use:
57
+
58
+ - `status: "ran-original"` when the original can run as-is;
59
+ - `status: "restored-local"` when enough of the reference was reconstructed locally to observe behavior;
60
+ - `status: "source-inspection-only"` only when running or restoring is blocked. Set `sourceOnlyReason` to the concrete blocker and compensate with stronger source evidence and acceptance coverage.
61
+
62
+ Reference clones also declare `referenceTimeline` with mode `none`, `toolcraft-playback`, `toolcraft-keyframes`, or `custom-reference-timeline`. Custom reference transport such as state buttons, trim handles, selected ranges, or range export uses `referenceTimeline.mode: "custom-reference-timeline"` plus browser-backed `referenceTimelineCoverage`.
63
+
64
+ ## Figma Source
65
+
66
+ When a prompt provides a Figma URL, treat the Figma file as the design source of truth.
67
+
68
+ Required flow:
69
+
70
+ - Use Figma MCP/design context before implementation.
71
+ - Inspect the target node, layer tree, component instances, variants, text nodes, variables, styles, and assets.
72
+ - Recreate the design from the Figma structure and Toolcraft runtime/component contracts.
73
+ - Use screenshots only for final visual QA after reading the file structure.
74
+
75
+ Do not implement a Figma design by eye from an image, screenshot, exported PNG, or rough visual memory.
76
+
77
+ ## Video References
78
+
79
+ When the prompt provides a video, GIF, screen recording, contact sheet, or extracted-frame sequence, study it as behavior before implementation.
80
+
81
+ Write a Video Reference Study before coding. Record:
82
+
83
+ - `referenceLocation`;
84
+ - `extractionEvidence`;
85
+ - `storyboard` with timecoded frames, visible state, and behavior observations;
86
+ - `transitionAnalysis` with frame-to-frame deltas;
87
+ - `behaviorDecomposition`;
88
+ - `acceptanceMapping`.
89
+
90
+ The transition analysis explains what changes between frames: entities, anchors, state persistence, releases, retargeting, input, timeline state, and copied behavior.
91
+
92
+ Do not implement video references from a single screenshot, generic visual summary, or a few static style observations.
93
+
94
+ ## Acceptance Mapping
95
+
96
+ Every reference feature maps to acceptance coverage.
97
+
98
+ Each `acceptanceMapping` item points to a real acceptance row that proves the copied behavior with automated and browser coverage.
99
+
100
+ The port is incomplete until inventory and acceptance coverage prove that reference functionality was reviewed and transferred.
101
+
102
+ ## Worklog Evidence
103
+
104
+ `docs/toolcraft/agent-worklog.md` records:
105
+
106
+ - explicit reference inputs;
107
+ - source/reference checked;
108
+ - contract rules applied;
109
+ - decisions;
110
+ - alternatives rejected;
111
+ - state/output mapping;
112
+ - verification;
113
+ - risks or follow-ups.
114
+
115
+ If a worklog cites a video, GIF, screen recording, contact sheet, extracted frames, Figma URL, or reference app, it must include the corresponding study evidence.
@@ -0,0 +1,53 @@
1
+ # Runtime Boundary
2
+
3
+ Read this module before changing app assembly, routes, runtime surfaces, custom renderers, canvas output, panels, toolbar, timeline, layers, or controls.
4
+
5
+ ## Required Runtime Shell
6
+
7
+ - Build through `defineToolcraft`.
8
+ - Render through `ToolcraftApp`.
9
+ - Read `appSchema.assembly` before adding custom JSX. It lists the enabled runtime surfaces, capabilities, commands, and assumptions for the current app.
10
+ - Keep app state in the Toolcraft runtime schema and runtime commands.
11
+ - Keep route files thin: routes compose the schema-backed Toolcraft app and product renderers.
12
+ - Do not replace Toolcraft with copied reference UI, route-local panels, standalone forms, or hand-built editor chrome.
13
+
14
+ ## Allowed Extension Points
15
+
16
+ Use only these app-specific extension points unless you are intentionally changing the shared Toolcraft runtime:
17
+
18
+ - schema controls;
19
+ - schema `canvas`, `panels`, `toolbar`, `panelActions`, `persistence`, `media`, `assembly`, and transfer-mode metadata;
20
+ - `canvasContent` for product output only;
21
+ - `renderDefaultCanvasMedia={false}` only when a product renderer replaces the default media preview;
22
+ - `controlRenderers` only for true custom controls that pass the built-in fit check;
23
+ - `onPanelAction` for sticky product actions;
24
+ - runtime commands and hooks.
25
+
26
+ ## Forbidden Rebuilds
27
+
28
+ - Do not hand-compose `ToolcraftRoot`, `CanvasShell`, `ControlsPanel`, `LayersPanel`, `TimelinePanel`, `ToolbarPanel`, or panel containers in product routes.
29
+ - Do not render built-in control components such as `SliderControl`, `SelectControl`, `ColorControl`, `GradientControl`, `FontPickerControl`, `FileDropControl`, or `PanelActionsControl` directly in app code.
30
+ - Do not recreate controls, panels, toolbar, timeline, layers, canvas shell, drag handles, section headers, section reset, history, or runtime surfaces by hand.
31
+ - If a shared behavior is wrong, fix the shared runtime/template source and regenerate or sync the copied Toolcraft source instead of patching one exported app.
32
+
33
+ ## Canvas Boundary
34
+
35
+ - `canvasContent` contains product output only: WebGL, Canvas 2D, SVG, DOM product text, shaders, generated previews, export previews, or product editing handles.
36
+ - App UI, CTAs, upload prompts, helper copy, placeholder instructions, buttons, menus, forms, and settings do not belong in `canvasContent`.
37
+ - If upload/import is part of the source-material flow, the pre-content canvas stays neutral and runtime-backed. Upload affordance belongs in `fileDrop`.
38
+ - DOM product text rendered inside `canvasContent` must be marked with `data-toolcraft-product-output` or `data-toolcraft-product-text` so tests and performance fixtures can target product output instead of app chrome.
39
+ - Product editing handles must be textless overlays, write to runtime state, and stay out of export/copy output.
40
+ - Preserve the runtime canvas backing. Product renderers may draw their own product background, but must not hide, replace, or make the Toolcraft canvas shell/backing transparent.
41
+
42
+ ## State Boundary
43
+
44
+ - Bind every visible control to runtime schema state or a runtime command side effect.
45
+ - Use `defaultValue` for resettable controls.
46
+ - Use runtime commands such as `controls.reset`, `controls.resetTargets`, `media.import`, `media.delete`, `canvas.center`, `history.undo`, and `history.redo`.
47
+ - Do not keep final product settings in isolated local React state when they need reset, persistence, import/export, keyframes, browser acceptance, or product export.
48
+
49
+ ## Generated App Source Boundary
50
+
51
+ - Generated applications keep their public editing surface in `src/app/app-schema.ts` and app-specific files under `src/app` and `src/routes`.
52
+ - Do not edit `src/toolcraft` in one generated app unless the task is intentionally changing the local copied runtime. Prefer fixing the monorepo runtime and regenerating or syncing.
53
+ - Generated apps must not contain monorepo app/package folders, workspace-protocol dependencies, or workspace package imports.
@@ -0,0 +1,86 @@
1
+ # Setup, Background, And Export
2
+
3
+ Read this module before changing Setup, canvas sizing, background, image export, video export, sticky actions, render scale, or timeline visibility.
4
+
5
+ ## Runtime Setup
6
+
7
+ - Runtime `Setup` is always the first visible controls block in generated product apps.
8
+ - `Setup` is headerless, not collapsible, and has no section reset action.
9
+ - `Setup` always contains `Export Settings` and `Import Settings`.
10
+ - Do not implement settings import/export through `panelActions`, route-local file inputs, or app-authored controls.
11
+ - Do not gate settings import/export by app complexity.
12
+ - Product-output, exportable, shader, procedural, reference-clone, and uploaded-background/source apps use `editable-output`.
13
+ - With `editable-output`, Setup contains `Aspect ratio`, `Canvas width`, and `Canvas height` after settings transfer.
14
+ - App-authored sections must not declare runtime Setup targets: `runtime.settingsTransfer`, `canvas.aspectRatio`, `canvas.size.width`, `canvas.size.height`, `canvas.renderScale`, or `panels.timeline.extended`.
15
+
16
+ ## Canvas Size Defaults
17
+
18
+ - When no explicit product size is provided, the default canvas size is `16:9` / `1920x1080`.
19
+ - Runtime aspect presets apply canonical canvas sizes; `16:9` is `1920x1080`.
20
+ - A prompt-provided, reference, fixed-format, or base/default size is only the initial `canvas.size`.
21
+ - Fixed/reference/base dimensions are not reasons to hide `Aspect ratio`, `Canvas width`, or `Canvas height`.
22
+ - Manual Canvas width/height edits keep the typed dimension, keep the other dimension unchanged, switch Aspect ratio to Custom, and show the reduced current ratio in the custom ratio inputs.
23
+
24
+ ## Resolution Scale
25
+
26
+ - Non-vector raster, Canvas 2D, WebGL, and WebGPU previews set `canvas.renderScale: true`.
27
+ - Runtime then appends `Resolution scale` after canvas sizing.
28
+ - `Resolution scale` changes backing pixels from `1` to `2` without changing visible CSS size or product output dimensions.
29
+ - DOM/SVG/vector-native previews should not use render scale.
30
+ - Performance fixes must preserve the user's selected render scale. Do not pass budgets by silently downsampling, stretching a lower-resolution backing canvas, blurring output, or clamping render scale below the chosen value.
31
+
32
+ ## Timeline Setup Switch
33
+
34
+ - When `panels.timeline` is enabled, runtime appends a `Timeline` switch as the last Setup control.
35
+ - Off shows compact Play-only transport.
36
+ - On shows the extended timeline with scrubber, duration, loop, and keyframe UI.
37
+ - The switch controls runtime presentation only. It does not pause playback, change product values, remove keyframes, alter export, or reset with `Reset controls`.
38
+ - When `panels.timeline` is omitted, the Timeline switch must not appear.
39
+
40
+ ## Background
41
+
42
+ - Every product app exposes a required `Background` section directly before the first export settings section.
43
+ - The section contains one equal-width inline row:
44
+ - `export.includeBackground` as a switch labeled `Include`;
45
+ - the product background color control with `label: false`.
46
+ - Use a schema `color` target such as `appearance.background` or `scene.background`.
47
+ - Do not hardcode a configurable background in CSS, Canvas `fillStyle`, or WebGL clear color.
48
+ - Live preview calls `shouldIncludeToolcraftPreviewBackground(state)` and hides only the product-rendered background when Include is off.
49
+ - PNG export passes the Include value to the standard PNG export helper.
50
+ - Video export keeps the background even when Include is off.
51
+
52
+ ## Image Export
53
+
54
+ - Every app with `Export PNG` exposes a separate `Image Export` section.
55
+ - `Image Export` uses two `select` controls in one compact two-column inline row:
56
+ - `export.image.format`, default `png`, with baseline `PNG` and `JPG` options;
57
+ - `export.image.resolution`, default `4k`, with baseline `2K`, `4K`, and `8K` options.
58
+ - Still-output apps place `Image Export` directly above sticky footer actions.
59
+ - Animated apps with both image and video export place `Image Export` immediately before `Video Export`.
60
+ - PNG export calls `createToolcraftPngExportCanvas({ includeBackground, resolution, state, render })`.
61
+ - The selected `export.image.resolution` must produce real 2048/4096/8192px long-edge PNG output for 2K/4K/8K. Retina sizing is only the fallback for current/omitted resolution.
62
+
63
+ ## Video Export
64
+
65
+ - Animated product apps expose `Export Video` and `Export PNG`.
66
+ - Any app with `Export Video` must enable the top Toolcraft timeline.
67
+ - Animated apps expose a separate `Video Export` section directly above sticky footer export buttons, after `Image Export`.
68
+ - `Video Export` uses two `select` controls in one compact two-column inline row by default:
69
+ - `export.video.format`, default `mp4`, with baseline `MP4` and `WebM` options;
70
+ - `export.video.resolution`, default `current`, with baseline `Current` and `4K` options.
71
+ - Stack the pair only when labels or selected values would clip, and record that fit reason in the worklog.
72
+ - Use `MediaRecorder.isTypeSupported(...)` or an explicit encoder/transcoder capability check before choosing the actual MIME/container.
73
+ - `MOV` and `ProRes` are not baseline browser outputs; use them only with a custom encoder/transcoder plus acceptance and performance coverage.
74
+ - Use `getToolcraftVideoExportSize` for video dimensions. `current` uses current canvas/output size with even encoder-safe rounding; `4k` fits inside 3840x2160, preserves aspect ratio, and returns even dimensions.
75
+ - Offline rendered-frame video export must write timeline-based timestamps. `canvas.captureStream()` plus `MediaRecorder` records wall-clock time and cannot be the only duration mechanism for heavy renderers.
76
+ - Browser acceptance must load the exported blob as a video, wait for metadata, and compare `video.duration` with the runtime timeline duration.
77
+
78
+ ## Sticky Product Actions
79
+
80
+ - Product apps always expose export in sticky `panelActions`.
81
+ - Still products expose `Export PNG`.
82
+ - Animated products expose `Export Video` plus `Export PNG`.
83
+ - Clipboard copy is optional and never replaces export.
84
+ - Export PNG and Export Video use `icon: "upload-simple"` to match the runtime `Export Settings` action.
85
+ - Async export/download/copy/generate/apply handlers return the real Promise from `onPanelAction`. The runtime shows the sticky footer top accent indicator while the Promise is pending.
86
+ - Use `reportProgress(0..1)` for determinate progress when available.
@@ -0,0 +1,67 @@
1
+ # Timeline And Animation
2
+
3
+ Read this module before changing animation, timeline, keyframes, playback, loop duration, video export, or animated renderer timing.
4
+
5
+ ## Animation Intent Inventory
6
+
7
+ Before adding animation controls, write an Animation Intent Inventory. Classify the animation as one of:
8
+
9
+ - playback timeline;
10
+ - keyframes timeline;
11
+ - custom reference timeline;
12
+ - autonomous decorative output.
13
+
14
+ Use no timeline only when the motion is explicitly autonomous decoration with no user-facing play/pause, scrub, duration, loop, restart, progress, export-at-time behavior, product animation, or video export.
15
+
16
+ ## Timeline Requirement
17
+
18
+ - Product animation uses the top playback timeline by default.
19
+ - Any app with `Export Video` must enable the top Toolcraft timeline.
20
+ - Do not add right-panel Play, Pause, Animate, Restart, or app-wide transport controls. Use the top timeline.
21
+ - Do not replace `TimelinePanel` with app-level playback, transport, or timeline UI to work around performance.
22
+ - Custom timeline UI is allowed only when a reference app has non-Toolcraft timeline behavior and the reference timeline inventory proves it.
23
+
24
+ ## Compact And Extended Timeline
25
+
26
+ - When `panels.timeline` is enabled, runtime Setup appends a `Timeline` switch.
27
+ - Off shows compact Play-only transport.
28
+ - On shows the extended timeline with scrubber, duration, loop, and keyframe UI.
29
+ - The switch is runtime UI state only. It does not pause playback, change keyframes, alter export, write product values, or reset with `Reset controls`.
30
+
31
+ ## Seamless Forward Loops
32
+
33
+ - Product loops are seamless forward-only cycles by default.
34
+ - First and last frames stitch.
35
+ - Direction does not reverse.
36
+ - Mirror, yoyo, ping-pong, or back-and-forth behavior requires explicit user intent.
37
+ - Use `getToolcraftTimelineLoopTime` or `getToolcraftTimelineLoopProgress` in playback renderers instead of local wall-clock or fixed-duration phase math.
38
+ - When the loop period is known or product-derived, set `panels.timeline.defaultDurationSeconds` to that period and record the evidence in animation or reference timeline metadata.
39
+ - Runtime/template fallback `8s` is not evidence for loop duration.
40
+
41
+ ## Duration Changes
42
+
43
+ - Editing timeline duration changes the loop length, not the scene design.
44
+ - The app must keep animation settings stable when duration changes.
45
+ - The loop remains seamless and forward-only after duration changes.
46
+ - Export duration follows runtime timeline duration.
47
+
48
+ ## Keyframes
49
+
50
+ - Use keyframes timeline when users edit property animation over time.
51
+ - Keyframe renderers consume Toolcraft evaluated-value helpers/hooks.
52
+ - Do not parse timeline `valueLabel` strings.
53
+ - Do not read raw `state.values` for keyframed targets when evaluated keyframe helpers are available.
54
+ - When a keyframe point is selected and a parameter is edited, update the selected point instead of creating a new point unless the user explicitly adds one.
55
+
56
+ ## Viewport Interaction Performance
57
+
58
+ - Animated preview renderers suspend or coalesce non-essential animation work during canvas drag, pan, pinch, zoom, and radar/center interactions.
59
+ - Resume from the correct timeline or autonomous time without changing play/pause state.
60
+ - Do not sacrifice selected render scale or visible quality to pass performance budgets without measured evidence.
61
+
62
+ ## Video Export Timing
63
+
64
+ - Video export uses runtime timeline time.
65
+ - Offline rendered-frame video export must encode frame timestamps from timeline time.
66
+ - Real-time `canvas.captureStream()` plus `MediaRecorder` is not enough when renderer work can be slower than playback.
67
+ - Browser acceptance verifies exported video metadata duration against edited timeline duration.
@@ -1,5 +1,7 @@
1
1
  # Custom Controls
2
2
 
3
+ > Reading route: start with `workflow.md`. Core generated-app rules live in `core/*`; this file is a focused custom-control reference for the topic below.
4
+
3
5
  Use a custom control only when no built-in Toolcraft control represents the product interaction.
4
6
 
5
7
  Built-ins come first: `slider`, `rangeSlider`, `select`, `segmented`, `switch`, `checkbox`, `color`, `colorOpacity`, `vector`, `gradient`, `curves`, `fontPicker`, `imagePicker`, `fileDrop`, `text`, `code`, `rangeInput`, `palette`, `actions`, `collectionActions`, and `panelActions`.
@@ -1,5 +1,7 @@
1
1
  # Performance
2
2
 
3
+ > Reading route: start with `workflow.md`. Core generated-app rules live in `core/*`; this file is a focused performance reference for the topic below.
4
+
3
5
  Every visible non-action control needs a `performanceRole` and `performanceReason`.
4
6
 
5
7
  Performance coverage has two levels:
@@ -1,5 +1,7 @@
1
1
  # Renderer Technique
2
2
 
3
+ > Reading route: start with `workflow.md`. Core generated-app rules live in `core/*`; this file is a focused renderer reference for the topic below.
4
+
3
5
  Choose render technology per product layer. Do not choose a renderer because it is convenient; choose it from product output semantics, reference behavior, fidelity, and workload.
4
6
 
5
7
  The initial renderer choice is provisional. It becomes accepted only after the app passes performance checks with the largest useful product canvas and the heaviest useful values for its own controls. If those checks show frame gaps, long tasks, viewport shaking, slow export, or interaction jank, revise the renderer strategy from that evidence before delivery. Do not make a renderer look fast by silently reducing the selected preview scale, backing pixels, source media quality, or export fidelity.