Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
design_fidelity.hpp
Go to the documentation of this file.
1// core/view/include/pulp/view/design_fidelity.hpp
2//
3// Reference-free import-fidelity self-checks. Each invariant is a small pure
4// function registered in one table; codegen captures the geometry it already
5// computes and calls run_fidelity_checks() at each branch. Adding an invariant
6// = one function + one registry line here — design_codegen.cpp does not grow.
7//
8// Every check reads only normalized DesignIR geometry + the emitted dimensions,
9// never a source quirk, so all sources (figma, figma-plugin, pencil, stitch,
10// v0, claude) are validated by the same checks.
11#pragma once
12
14
15#include <cstddef>
16#include <functional>
17#include <optional>
18#include <string>
19#include <vector>
20
21namespace pulp::view {
22
25 std::string node_id;
26 std::string node_name;
27 std::string kind;
30 std::string detail;
31 bool informational = false;
33};
34
38
48
54bool is_vector_kind(const std::string& type);
55
56// ── Individual invariants (pure; testable in isolation) ──────────────────────
57
60std::optional<FidelityIssue> check_image_sizing_fidelity(const FidelityContext&);
61
64std::optional<FidelityIssue> check_gross_size_divergence(const FidelityContext&);
65
71std::optional<FidelityIssue> check_widget_intrinsic_size(const FidelityContext&);
72
77std::optional<FidelityIssue> check_text_vertical_centering(const FidelityContext&);
78
79// ── Registry + entry point ───────────────────────────────────────────────────
80
84void run_fidelity_checks(const FidelityContext& ctx, std::vector<FidelityIssue>& sink);
85
86// ── Tree-level invariants (need subtree / coverage context) ──────────────────
87
111 const IRNode& root,
112 const std::vector<ImportDiagnostic>& diagnostics,
113 const std::function<std::string(const IRNode&)>& node_id_of,
114 std::vector<FidelityIssue>& sink);
115
120std::size_t count_strict_fidelity_failures(const std::vector<FidelityIssue>& issues);
121
122} // namespace pulp::view
Normalized intermediate representation (IR) for imported designs: the IR value model (style,...
Hover-cursor tracking for platform window hosts.
Definition fwd.hpp:27
@ text
Plain text (default color).
Definition code_editor_tokenizer.hpp:37
@ type
Built-in / common type name (e.g. int, Number).
Definition code_editor_tokenizer.hpp:39
std::optional< FidelityIssue > check_gross_size_divergence(const FidelityContext &)
Gross-size: a node the user pinned on BOTH axes (SizingMode::fixed) must not be emitted >3x its sourc...
std::optional< FidelityIssue > check_widget_intrinsic_size(const FidelityContext &)
Widget-intrinsic-size: a recognized audio widget whose emitted box diverges >1.5x from its source int...
std::optional< FidelityIssue > check_text_vertical_centering(const FidelityContext &)
Text-vertical-centering: a SINGLE-LINE text given a reserved vertical slot (emitted box taller than o...
std::size_t count_strict_fidelity_failures(const std::vector< FidelityIssue > &issues)
Number of findings that should fail --strict-fidelity.
void check_vector_renderability(const IRNode &root, const std::vector< ImportDiagnostic > &diagnostics, const std::function< std::string(const IRNode &)> &node_id_of, std::vector< FidelityIssue > &sink)
Vector-renderability: every visible vector/path-like node (svg path/rect/ line, ellipse,...
FidelityElement
What codegen branch produced the emitted geometry — lets a check apply only where it is meaningful wi...
Definition design_fidelity.hpp:37
@ container
Definition design_fidelity.hpp:37
@ image
Definition design_fidelity.hpp:37
@ widget
Definition design_fidelity.hpp:37
void run_fidelity_checks(const FidelityContext &ctx, std::vector< FidelityIssue > &sink)
Run every registered fidelity check against ctx, appending findings to sink.
std::optional< FidelityIssue > check_image_sizing_fidelity(const FidelityContext &)
No-skew: a BLEED sprite (render_bounds or asset_bleed) must be emitted at an aspect matching its sour...
bool is_vector_kind(const std::string &type)
True for every normalized IR type that represents a vector / path-like shape (svg path/rect/line,...
Everything a check needs: the node, its sanitized bridge id, the dimensions codegen emitted for it,...
Definition design_fidelity.hpp:41
std::string node_id
Definition design_fidelity.hpp:43
float emitted_h
Definition design_fidelity.hpp:45
FidelityElement element
Definition design_fidelity.hpp:46
float emitted_w
Definition design_fidelity.hpp:44
const IRNode & node
Definition design_fidelity.hpp:42
A single import-fidelity self-check finding.
Definition design_fidelity.hpp:24
std::string detail
one-line explanation with the measured numbers
Definition design_fidelity.hpp:30
std::string kind
"skew" | "aspect-unverified" | "gross-size" | "widget-size" | "widget-undersized" | "text-vcenter" | ...
Definition design_fidelity.hpp:27
std::string node_id
sanitized bridge id of the offending node
Definition design_fidelity.hpp:25
bool informational
advisory only (e.g.
Definition design_fidelity.hpp:31
std::string node_name
source layer name (for human-readable reports)
Definition design_fidelity.hpp:26
Definition design_ir.hpp:614