con un clic
fs-skia-skiaviewer
Work on viewer host contracts and generated product viewer usage.
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
Work on viewer host contracts and generated product viewer usage.
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Consumer-facing guide to hosting an interactive FS.Skia.UI app — the keyboard/pointer input surface, the preview-vs-tree render distinction, and the windowed-fullscreen blur caveat.
Build Skia-rendered FS.Skia.UI Controls, rich text, chart controls, graph controls, DataGrid, custom wrappers, and generated product examples.
Generated product guidance for Skia-rendered FS.Skia.UI Controls, rich text, chart controls, graph controls, DataGrid, and custom wrappers.
Wire a generated FS.Skia.UI product to the desktop viewer host.
Understand and work with the internal keyed VDOM diff over the lowered Control<'msg> IR (feature 067) — its key-first-then-positional matching, the NodePatch/ChildOp operation set, the totality/determinism/identity-at-rest/round-trip invariants, and the module's disposition (internal, property-tested, wired onto the live render path via RetainedRender in feature 091 and current through feature 103 — layout/bounds cache, injected-delta animation clock, visual-state cross-fade). Use when reading the diff invariants, extending the property tests, or working on the wired retained render path.
Maintainer-facing guide to the FS.Skia.UI.Controls.Elmish interactive-host seam — how runInteractiveApp drives the retained render structure each frame (RetainedRender.step over the keyed diff), advances per-identity animation clocks from an injected Tick delta, stamps runtime visual state pre-reconcile, routes keys focus-first through routeFocusedKey, and resolves pointer hits to a stable identity via retainedHitTest. Use when reading or extending the live controls host loop, the per-frame retained-state/clock/visual-state wiring, or the key/pointer routing seam.
Basado en la clasificación ocupacional SOC
| name | fs-skia-skiaviewer |
| description | Work on viewer host contracts and generated product viewer usage. |
Owns src/SkiaViewer/, viewer tests, template/fragments/skiaviewer/, and generated product viewer startup guidance.
The supported API lives in src/SkiaViewer/SkiaViewer.fsi. Surface changes require readiness/surface-baselines/FS.Skia.UI.SkiaViewer.txt.
Run ./fake.sh build -t CapabilityCheck, ./fake.sh build -t DependencyReport, and ./fake.sh build -t PackLocal.
Run dotnet test tests/SkiaViewer.Tests/SkiaViewer.Tests.fsproj and ./fake.sh build -t GeneratedProductCheck.
Capture real viewer command or package evidence under the active feature
readiness package-surface reports. Stable public surface baselines live under
readiness/surface-baselines/. Disclose synthetic native evidence if a
platform window system is unavailable.
Keep native window and render effects at the interpreter edge. Scene descriptions stay in Scene; Elmish adapter behavior stays in Elmish.
Products that select SkiaViewer receive viewer package references, this skill, and product commands that avoid framework gallery checks.
Open the package namespace and drive a bounded, headless-friendly run:
open System
open FS.Skia.UI.Scene
open FS.Skia.UI.SkiaViewer
let options = { Title = "demo"; InitialSize = { Width = 320; Height = 240 } }
let scene = Rectangle((0.0, 0.0, 320.0, 240.0), Colors.rgb 16uy 16uy 24uy)
match Viewer.runUntilFirstFrame options scene with
| Ok evidence -> printfn "frames=%d renderer=%s" evidence.FramesRendered evidence.RendererMode
| Error failure -> printfn "blocked: %A" failure.BlockedStage
Result.Ok/Result.Error shadowed by ViewerDiagnosticLevel. open FS.Skia.UI.SkiaViewer brings ViewerDiagnosticLevel.Error (and its peers
Warning/Info/Debug/Trace) into scope, so a bare Ok/Error in a
match or constructor can bind to the union case instead of the Result case —
e.g. Error msg resolves ambiguously and a bare | Error -> … arm silently
matches the diagnostic level, not a failed Result. Remedy: qualify as
Result.Ok / Result.Error when you mean the result type. This is the same
co-opened-DU collision documented for Unknown in the
[[fs-skia-keyboard-input]] "Common pitfalls" (where ViewerKey.Unknown and
ViewerRunBlockedStage.Unknown collide) — qualify the case when two opened
modules export the same name.When a problem outlasts reasonable in-repo attempts, extensive external research is
mandatory — consult official online docs first (the F#/.NET docs and the driven
library's own documentation/API reference), then community sources (forums, Reddit, Q&A
sites, issue trackers and changelogs). Record the findings and resolving links in the
feature's specs/<feature>/feedback/ folder and, for durable lessons, in this skill's
Sources line. Offline, the mandate degrades to recording "research blocked — "
rather than hard-failing the phase.