cjm-substrate-qt-kit
The ONE Qt foundation library for the cjm-substrate application lane (ruling 8b7351e4), in three strata: (a) the design-system runtime — semantic theme tokens as data -> QPalette + QSS + fonts; (b) the app shell (ruling 2bae2cc1, landing); (c) the chrome every app shares — the loop-thread session base, KeymapRegistry, key hints + the modal grammar, the status strip, find bar, picker list, form shell + the manifest-driven config-form model, the HITL panel, the span player (requires ffmpeg on PATH), and text clamps. Born at first duplication between the workbench and the transcription shell (DEC dcf8a712); grown by demand, never speculation. The Textual-era tui-kit's live pieces (ConfigForm, tail) ported here 2026-09-25 and the tui-kit archived — nothing Textual remains on any app's import path.
Modules
cjm_substrate_qt_kit.__init__— The ONE Qt foundation library for the cjm-substrate application lane (ruling 8b7351e4).cjm_substrate_qt_kit.bridge— The Future -> Signal bridge (ruling 2bae2cc1 (2)): a concurrent Futurecjm_substrate_qt_kit.configform— Manifest-driven config form MODEL — the schema half of every kit form.cjm_substrate_qt_kit.findbar— The lane's find-bar universal (the Ctrl-F half of signal c7955f25).cjm_substrate_qt_kit.formdialog— Kit FormShell (work item d55292f9): the frameless modal FORM chrome —cjm_substrate_qt_kit.frame— The window frame — client-side decorations as a shell surface (rulingcjm_substrate_qt_kit.gallery— The gallery SEED: every component class under any design system + modecjm_substrate_qt_kit.gesturebench— Run one app's canonical gestures headlessly -- the scale harness's gesture leg.cjm_substrate_qt_kit.hitl— Kit HITL confirm chrome (work item 55bcc3c5, the payload-agnostic half ofcjm_substrate_qt_kit.icons— Icons recolored at runtime from the vendored Lucide subset (ISC; thecjm_substrate_qt_kit.jobs— The JOB SEAT (ruling 2bae2cc1 (5)): a progress surface for long-runningcjm_substrate_qt_kit.keyhints— Keyboard-hints surface: the ?-overlay + contextual hint line (DEC 2a42c028).cjm_substrate_qt_kit.keymap— KeymapRegistry: the QAction layer from the toolbox verdict (DEC d55f1d0f).cjm_substrate_qt_kit.keys— The keybinding helper both shells grew independently — plus the shell'scjm_substrate_qt_kit.launch— Launch resolution (ruling 2bae2cc1 (4)): where an app's launch values —cjm_substrate_qt_kit.layout— Layout roles for the application lane — the FastHTML-era framework's Qtcjm_substrate_qt_kit.loopthread— The loop-thread session base: a private asyncio loop behind a Qt shell.cjm_substrate_qt_kit.modal— ONE kit modal frame (ruling d1e3043e (2); finding 533d53d0).cjm_substrate_qt_kit.pickerlist— Kit PickerList (work item 8d29f0f0): the native list PAGE the paintedcjm_substrate_qt_kit.player— Span playback over ONE persistent audio stream — the Qt lane's one audiocjm_substrate_qt_kit.prefs— The persisted theme choice — system + mode — and its precedence.cjm_substrate_qt_kit.readingpane— The reading pane: a QTextBrowser with the keyboard reading contract thecjm_substrate_qt_kit.roundtrip— The switch-equals-launch check (finding b7e68f56): a design-system or modecjm_substrate_qt_kit.sessionkey— Session-key adoption + the ONE mint (ruling 2bae2cc1 (3)).cjm_substrate_qt_kit.shell— The APP SHELL (ruling 2bae2cc1; the decorations ruling d1e3043e): everycjm_substrate_qt_kit.statusstrip— StatusStrip: the footer's slot model (DEC 2a42c028).cjm_substrate_qt_kit.style— Row-style vocabulary for the lane's list widgets.cjm_substrate_qt_kit.systems.__init__— The Qt half of each design system (ruling a439c226, design 0858bbd0): acjm_substrate_qt_kit.systems.classical.__init__— Classical — the first seed system: outlined serif (Cormorant Garamondcjm_substrate_qt_kit.systems.netrunner.__init__— Netrunner — the second seed system: hard-edged terminal look (Silkscreencjm_substrate_qt_kit.systems.netrunner.widgets— Netrunner's painted widgets: what QSS cannot draw (chamfered header bars,cjm_substrate_qt_kit.testbed— Readability test-bed: error-seeded reading trials measuring which themecjm_substrate_qt_kit.testbed_corpus— Bundled clean-prose corpus for the readability test-bed.cjm_substrate_qt_kit.text— Text clamps for one-line surfaces — path-like strings keep their END.cjm_substrate_qt_kit.theme— The design-system RUNTIME: ONE Theme object, ONE change signal (rulingcjm_substrate_qt_kit.tools.__init__— Kit tools (run as modules):cjm_substrate_qt_kit.tools.build— Build the static Qt projections of a design system, no QApplicationcjm_substrate_qt_kit.tools.icons_pull— Pull named Lucide icons into the kit's vendored subset (or a system's owncjm_substrate_qt_kit.widgets— Small helpers that map the design system's component classes onto Qt —
API
cjm_substrate_qt_kit.bridge
FutureBridgeclass — watch(future, on_result, on_error) — the callbacks run on the bridge's
cjm_substrate_qt_kit.configform
ConfigFieldclass — One schema property as an editable form row.ConfigFormclass — A capability's editable config, derived from its manifest config_schema.
cjm_substrate_qt_kit.findbar
FindBarclass — Incremental find over an attached text pane. While the bar is open the
cjm_substrate_qt_kit.formdialog
FormShellclass — Frameless modal shell on the kit modal frame: head (QTextBrowser,
cjm_substrate_qt_kit.frame
EdgeGripclass — One invisible strip laid OVER the frame's outer band (top / bottom /FramedWindowclass — The frameless, translucent HOST whose central widget is the paintedShellFrameclass — The painted frame: title bar, then the chrome slot (menubar, toolbars),TitleBarclass — The frame's top row: title left, the window verbs right, a leadingedge_valuefunction — Qt.Edge flags as an int (PySide's flag enums carry .value).hint_system_schemefunction — The fallback's mode hint: when the window manager paints the frame,verb_buttonfunction — One window verb: a QToolButton[role="window-verb"][verb=] theverb_iconfunction — A window-verb glyph inked by the live system (titlebar_ink): the
cjm_substrate_qt_kit.gallery
Galleryclassfieldfunctionmainfunctionrowfunctionsectionfunction
cjm_substrate_qt_kit.gesturebench
ladderfunction — Run a driver's read ladder step by step: a failing gesture is recorded by the seam (itsload_driverfunction — Import the driver namedmodule:function(a malformed name refuses loudly).mainfunction —python -m cjm_substrate_qt_kit.gesturebench <module:function> --params JSON: run the
cjm_substrate_qt_kit.hitl
HitlPanelclass — The composed confirm panel: worklist (stretch) over the verdict stripProposalWorklistclass — The proposal list page: items above (a kit PickerList), the host'sProvenancePaneclass — Key/value provenance — a two-column table of whatever the lane'sVerdictStripclass — The derived-verdict status strip: one line per tier, each verdictfmt_tsfunction — Source-seconds as mm:ss.s — the worklist's span column.worklist_rowfunction — Project one item into a picker row: tier glyph (? / ??), the category
cjm_substrate_qt_kit.icons
IconSetclass — Named SVG icons -> recolored SVG text, files (for QSS url()), QIcons.
cjm_substrate_qt_kit.jobs
Jobclass — One running job: progress(done, total) moves the bar, finish() /JobSeatclass — The rows of running jobs; hidden while empty. `job_done(label, text,fmt_elapsedfunction
cjm_substrate_qt_kit.keyhints
KeyHintsOverlayclass — ?-toggled keyboard-hints overlay. Modal + frameless on the kit modalcolumn_countfunction — Responsive column count: what the CONTAINER width affords (layoutgroup_entriesfunction — [{verb,label,key,group}] -> [(group, entries)] in first-seen grouphint_linefunction — Project the pinned verbs (in pin order, capped at limit) into theis_close_anchorfunction — True for the close affordance modal_header paints — the dialog'skeycapsfunction — Public key-cap renderer — the overlay's chip grammar for OTHERmodal_headerfunction — A kit modal's title row: the title at left, the mouse CLOSErender_hints_htmlfunction — The overlay's document: sections distributed across columns in
cjm_substrate_qt_kit.keymap
KeymapRegistryclass — Declarative verb table -> live QActions on an owner widget.
cjm_substrate_qt_kit.keys
bindfunction — One QShortcut:keyonparent(default: the owner window) firesfn.enter_twinsfunction — A key and its numpad twin: "Return" -> ["Return", "Enter"],
cjm_substrate_qt_kit.launch
LaunchConfigclass — The resolved values + where each came from ("workspace" / "prefs" /LaunchErrorclass — A workspace was named (flag or env) but is not a workspace root.app_config_pathfunctionconfig_dirfunction —$XDG_CONFIG_HOME/~/.config(POSIX) or%APPDATA%(Windows), underpersistfunction — Mergevaluesinto the persisted in-app config (the in-app settingsread_jsonfunction — A JSON object, defensively: {} when absent, unreadable or not an object.recordfunction — Mergevaluesinto the workspace's launch record forapp_id(aresolvefunction — Walk the precedence for every key named (the union of the record, theworkspace_record_pathfunctionworkspace_rootfunction — The workspace root:explicit> CJM_WORKSPACE > None. A namedwrite_jsonfunction — Atomic replace (tmp + rename).
cjm_substrate_qt_kit.layout
affordfunction — R3 container affordance: how many fixed-width units fit in theclassifyfunction — One geometry -> its three role ids: {"mode", "shape", "height"}.height_tierfunction — Absolute height -> height-tier role id ("H1".."H4").modefunction — Width -> mode role id ("M1".."M6").shapefunction — Aspect ratio -> shape role id ("S1".."S6").
cjm_substrate_qt_kit.loopthread
LoopThreadSessionclass — Owns one daemon asyncio loop thread; subclasses put their subsystem'scoro_namefunction — A coroutine's own code name, leading underscores stripped (_node->node): theop_writefunction — One session write gesture = ONE op clock window (design 8f6f2343, amendment efd659a1's
cjm_substrate_qt_kit.modal
Confirmclass — A question with two answers;answer()is True on the affirmative.Dialogclass — A widget-built kit dialog: header (title + close), acontentlayoutModalFrameclass — The translucent host + the painted frame. Subclasses parent theirModalHeaderclass — A widget-built modal's title row: the title left, the close verbNoticeclass — A message with one button.TextPromptclass — One line of text: a label, a field, OK (default) / Cancel. The valueask_textfunction — Blocking text prompt (the kit's QInputDialog.getText): the text oncenter_over_ownerfunction — Move the dialog to the owner's center (no-op when ownerless).confirmfunction — Blocking yes/no (the kit's QMessageBox.question).modal_boundsfunction — (avail_w, avail_h) a kit modal may occupy: the owner's size less anoticefunction — Blocking message (the kit's QMessageBox.information).open_centeredfunction — Open a kit modal centered over its owner at (width, height) capped by
cjm_substrate_qt_kit.pickerlist
PickerListclass — The kit list page: native list above, budget-reserved detail below.SpanRowDelegateclass — Paint one row's rich-text fragment (the _ROW_HTML data) through aspans_to_htmlfunction — Project style-worded spans into one QTextDocument-ready fragment.
cjm_substrate_qt_kit.player
SpanPlayerclass — Play/stop one file span at a time over the persistent stream; replaydecode_commandfunction — The ffmpeg invocation for one span: input-side seek (fast),-tbounds
cjm_substrate_qt_kit.prefs
decorationsfunction — (decorations, source) after the precedence walk: explicit >parse_envfunction —CJM_THEMEgrammar:<system>,<system>:<mode>or:<mode>.prefs_pathfunction —$CJM_KIT_PREFS, else<config dir>/cjm-substrate/theme.jsonwherereadfunction — The stored choices ({"system", "mode", "decorations"} — whichever areresolvefunction — (system, mode, source) after the precedence walk.sourcenames wherewritefunction — Persist the theme choice (atomic replace, the other keys kept);write_decorationsfunction — Persist the decorations choice ("client" / "system"), the theme keys kept.
cjm_substrate_qt_kit.readingpane
ReadingPaneclass
cjm_substrate_qt_kit.roundtrip
Diffclasscheck_switchfunction — Run both legs for systemsa->b->aand return every differingdiff_imagesfunction — (differing pixel count, bbox) — (0, None) when identical; (-1, None)grabfunction — Grab every page ofwindow(ARGB32, comparable across grabs).settlefunction — Let polish, layout and deferred restores (seat restores ride the nexttabs_offunction — Every tab oftabsas a page (the gallery's shape:
cjm_substrate_qt_kit.sessionkey
active_keyfunction — The live sitting: CJM_SESSION, else the workspace pointer.adoptfunction — Adopt the live key for this process: (key, source). An inheritedboot_promptfunction — The start-ritual boot prompt the mint gesture puts on the clipboard.is_repeatfunction — A just-minted live key means this press is a key repeat / double tapmintfunction — The ONE mint: refuse a repeat, adopt the new key BEFORE the journaledmint_signalfunction — The transcript-mapping PREFIX the boot prompt must carry (substringnew_keyfunction — A session key IS its mint timestamp (local time).parse_keyfunction — The mint time of a key; None for legacy / free-form names.pointer_pathfunction —.cjm/current-sessionbeside the WRITES journal (journal_paths[0]) —read_pointerfunction — The pointed key, or None (a missing / empty pointer is not an error).write_pointerfunction — Point the file atkeyATOMICALLY (tmp + replace: a reader never sees
cjm_substrate_qt_kit.shell
AppShellclassadd_theme_menufunction — The in-app theme switcher (item 812beb51): Design system + Mode radio
cjm_substrate_qt_kit.statusstrip
StatusStripclass — Two-row footer: chips + readout + transient above, hint line below
cjm_substrate_qt_kit.style
apply_row_stylefunction — Map a row's style words onto a list item (color words + bold).
cjm_substrate_qt_kit.systems.__init__
qss_dirfunction — A trial system's ownqss/beside its tokens.json first, else the
cjm_substrate_qt_kit.systems.netrunner.widgets
ChamferHeaderclass — Solid fill bar with the top-left corner cut. Colors come from the live theme.Panelclass — Chamfered header + surface body. Click the header to collapse.gallery_pagefunction — The system's own gallery tab: the panel + chamfer grammar the sharedparafunctionsection_titlefunctiontrackedfunction — Display / section label with letter-spacing (QSS has none).
cjm_substrate_qt_kit.testbed
ClickPaneclass — Read-only pane reporting the whitespace-token index of clicks thatTrialWindowclass — The trial loop: render the paragraph under its variant, take thebuild_trialsfunction — The trial plan: variants covered evenly (shuffled round-robin over thebuild_variantsfunction — Cross the sweep dimensions into variant dicts. Defaults reproduce theload_paragraphsfunction — Prose paragraphs from a markdown file: fence markers stripped (fencemainfunction — CLI: run trials over a markdown file, or summarize result JSONLs.seed_errorfunction — Apply one error class to a token list; (mutated_words, target_token,summarizefunction — Catch rate + latency per dimension marginal, per variant cell, per
cjm_substrate_qt_kit.text
tailfunction — Clamp a string to width keeping its END.
cjm_substrate_qt_kit.theme
Themeclass — theme = Theme.apply(app) — or apply_theme(app), the module-level door.apply_themefunction — Module-level door to Theme.apply (the name every app's launch calls).build_palettefunction — Project the vars onto QPalette so NATIVE widgets follow the theme (QSScurrentfunction — The live Theme (None before apply_theme).current_themefunction — The live resolved vars; Classical's first mode before any apply.document_cssfunction — Default stylesheet for rich-text documents: headings from the typefont_familyfunction — The face a type slot names; an EMPTY mono slot means the platform'sfont_rolefunction — Declare a widget's type slot ("mono" / "body") on the ONE fontmake_fontfunction — The system's font for a slot: "body" / "mono" / "ui" / "heading",on_changefunction — Subscribeslot(theme)to every mode / system change — the ONE wire,render_qssfunction — Headless: tokens + mode -> the final stylesheet. The system's templatesstate_colorfunction — A state role (danger / warn / ok / info / meta / note / dim / accent)style_documentfunction — Land the design system on a PARSED document: headings in the headingstyle_text_panefunction — Reading-quality setup for a text pane (QTextEdit / QTextBrowser /
cjm_substrate_qt_kit.tools.build
mainfunction
cjm_substrate_qt_kit.tools.icons_pull
local_clonefunctionmainfunctionpullfunction
cjm_substrate_qt_kit.widgets
Cardclass — The card class — bordered, unfilled by default. Card(kicker=, title=,Segmentedclass — The segmented control — exclusive checkable buttons sharing hairlines.buttonfunctionelevatefunction — A drop shadow at the system's strength (shadow + shadow_strength vars).hrfunctionkickerfunctionrepolishfunction — Call after changing a dynamic property so QSS re-matches.tagfunctiontextfunction
Dependencies
Depends on: PySide6, cjm-design-system, cjm-harness-transcripts
Used by: cjm-graph-workbench-qt, cjm-session-scratchpad-qt, cjm-transcript-correction-qt, cjm-transcript-decomp-qt, cjm-transcription-qt, cjm-workflow-hub-qt
Metadata
Release files for cjm-substrate-qt-kit 0.0.14
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cjm_substrate_qt_kit-0.0.14.tar.gz | 167.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cjm_substrate_qt_kit-0.0.14-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 329.9 kB
Release files / cjm_substrate_qt_kit-0.0.14.tar.gz
| Download URL | cjm_substrate_qt_kit-0.0.14.tar.gz |
|---|---|
| Size | 167.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cd417ce8f9a2ed598a21e6420a523b6c3552d1571e5a5b8dca91a429ecd159d6
|
|
BLAKE2b-256 checksum How to use checksums |
076e425babb237b358d3105c808b828099e2683ead99a1b9f39382107399ad6e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|
Release files / cjm_substrate_qt_kit-0.0.14-py3-none-any.whl
| Download URL | cjm_substrate_qt_kit-0.0.14-py3-none-any.whl |
|---|---|
| Size | 162.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
473774a629d0f6de0f43b3486e785c1f23c86f7ce8844e9566234ed05af24801
|
|
BLAKE2b-256 checksum How to use checksums |
8a4701b21284b59732f6765afe0c3f599f5d475271d69840702d6ffbef9823fd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|