Repository navigation
Integrated: CLI, layout inspection, readiness, charts, offline catalog, concise options, task-status rename (#4–#10) - #14
Merged
Conversation
A begin that returns a cui_id now hands it to the recorder (generated), and a named scroll recomputes the pure cui_make_id hash CUI derived, only while recording. No synthetic ids, no native change: a named Box/Row/Column/Scroll reports its own rect instead of the last widget's. Generated files changed via tools/regen.ps1 only.
…known LayoutFormatter renders a recorded frame with verified rects only where the widget owns the id it was laid out under, observed bounds labelled union>= (a lower bound of recorded rects, never a content extent), extent:UNKNOWN for scrolled/virtualized content CUI keeps private, and a header warning above every view. HeadlessApp.PrintLayout and a headless 'layout' command expose it; the tree and query ranking are untouched.
ui.Row(new(gap: 12, align: Align.Center)), ui.Column(new(pad: 18, gap: 12,
height: Size.Fill)), ui.Text("Live", new(size: 12, color: ...)),
ui.Badge("Updating", new(Tone.Danger)) and ui.Card(new(pad: 16, gap: 12,
dir: Dir.Column)) as partial-struct constructors on Box, Card, TextOpts and
BadgeOpts. Constructors rather than optional-parameter overloads: no new
candidate competes with the generated wrappers, so Row(), Row(default),
Card(new()) and Text("x", default) keep their exact current binding, which
ConvenienceCompilerTests pins with real-compiler symbol assertions. Layout
parity, native byte parity, post-throw sibling placement and steady-state
0 B are asserted on real surfaces.
Co-Authored-By: pi <pi@localhost>
…t rejection Normalization rescales chart series against their first finite nonzero sample. A requested mode rejects nonfinite samples, a baseline-less series, out-of-range results and unknown enum values rather than draw a line that silently lies; None keeps the old pass-through copy. Allocation-free like SeriesDecimator.
…tdown, wait deadlines, and publish-size exclusion
This was referenced Nov 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Merges reviewed issue branches #4–#10, live NamedPipe window control, and main (PR #12 feat/design-tokens, PR #13 investigate/frame-alloc-flake) into a single integration branch.
What this adds
LiveSession,LiveClient,dotnet cui --attach/ps):--live,CUISHARP_LIVE=1, orCuiAppOptions.LiveAttach).cui-live-<pid>-<nonce>,PipeOptions.CurrentUserOnly | PipeOptions.Asynchronous) and publishes a discovery record under%LOCALAPPDATA%\cuisharp\live(overridable viaCUISHARP_LIVE_DIR).tree,layout,find,click,type,key,focus,move,wheel,frame,pulse,wait,waittext,faults,png,quit) at CUI's frame boundaries via a message-only window (CuiSharpLiveMessage) without taking the loop from CUI, leaving the live window open between CLI invocations untilquit.RunThunk, deferred canvasPaintThunk, andFrameCallbacks, live-resize modal loop deferral,WM_DESTROY/WM_NCDESTROYquiescing before nativecui_app_destroy, multi-frame capture re-arming, and post-injection frame waits before cancellation acknowledgement.src/CuiSharp.Tools/Cli.csfrom first principles into a single unified option parser supportingdotnet cui ps [--json]and-a/--attach/--attach=<pid|title>.cuicannot drive file-based apps, anddotnet cuiis not the installed command #4 File-based apps anddotnet cui:AppLocatorresolves.csand.csprojapps from the app directory (dotnet build -getProperty), installed-tool shimdotnet-cui, UTF-8 console streams, bounded MSBuild diagnostics and child-process cleanup.cui layout: container tree with rects and overflow markers #5 Layout inspector:LayoutFormatter.Print(frame)andlayoutcommand; named identity tracking (HasOwnRect), lower-boundunion>=reporting, floating-layer exclusion,extent:UNKNOWNfor scrolled/virtualized content,OVERFLOW(observed bounds)checks.cui png --waituse it #6 Readiness-aware waits:ui.MarkReady()(published afterEndFramecompletes),HeadlessApp.WaitReady/WaitFor, protocolwait/waittext, CLI preconditions--wait ready,--wait-text,--wait-timeout.api.json, addcui api/cui icons, document the traps #7 Offline API and icon catalog:tools/export-api.csexports 692 types / 4,920 members / 5,558 summaries;dotnet cui api <Name> [--json]anddotnet cui icons [filter] [--json]answered offline from the embedded catalog.ChartNormalizer(None/Index100/Percent),ChartOpts.Normalizefor line/area/bar/stacked bars; donut rejection, Count-clipped validation, odd-MaxPointsbuffer fix, pixel/allocation tests.Box,Card,TextOpts,BadgeOptswith no overload ambiguity.CuiSharp.TaskStatuscollides withSystem.Threading.Tasks.TaskStatus#10 Task status enum rename:CuiSharp.TaskStatus->CuiSharp.CuiTaskStatus.Verification
pwsh tools/regen.ps1 -NoNative -NoDiff: passed — bindgen 13/13, export-api--checkno diff,dotnet build -c Release -warnaserror0 W / 0 E,CuiSharp.Tests891/891,CuiSharp.App.Tests28/28.dotnet format CuiSharp.slnx --verify-no-changes: no changes.pwsh tools/verify-template.ps1 -NoPublish: passed (58 s) — pack,cui-appbuild/test,CUI002analyzer check,dotnet-cui.exeinstall +dotnet cui api ChartOpts --json,cui-miniheadless + UTF-8 round-trip, native window smoke.