Repository navigation
Releases
Protoyard v1.9.4
Texuli 0.17.4. Every Texuli dependency is pinned exactly at 0.17.4.
Changed
- Render baselines are Texuli's finding keys.
check ds --render --write-baselinewrites{ findings: [{ code, path, route, viewport, mode, scope, component? }] }(Texuli'sDsFindingKey, with the prototype slug as
scopeand each message for people), and--baselinecompares with
Texuli'scompareDsReport, so the same selector on the same route of two
prototypes stays apart. - The
protoyard/ds-render-baselineversion 1 format is retired: files of
1.8–1.9.3 are still read, their fingerprints converted, and the run says to
write the baseline again (TEXULI). - Self-hosted design-system fonts.
ds useandnew --dswrite
fontFilesintosrc/design-system.tsfor each font file the document
names (typography.families.<role>.files[].src) that exists inside the
design-system folder, so a Vite build emits it and a locked prototype needs
no@font-faceof its own. Missing files are reported (data.fonts.missing).
Protoyard v1.9.3
Texuli 0.17.3. Every Texuli dependency is pinned exactly at 0.17.3.
Changed
ds new --briefsends the brief to Texuli'simportBrandas written.
Texuli 0.17.3 reads fonts with case (font is Inter), motion,Headings use Xandmonospace Xinside longer clauses, so Protoyard's prose reader and
thebrief.readingfield are gone; unread words areunmappedlosses. A
brief that Texuli would truncate (more than 16,000 characters or 256
clauses with the brand flags) is refused instead, so the flags are never
dropped.check ds --rendertakesrender-disabled-valuefrom Texuli's mapping:
the allow manifest passes each entry, a root is checked against its own
entry (the color axis included), and the CLI keeps one finding per
component and value. The message changes, so write a 1.9.2 baseline again
if it lists that code.- Protoyard keeps its render baseline format (
protoyard/ds-render-baseline
version 1): Texuli's finding key now has route, viewport and mode but no
prototype (TEXULI).
Protoyard v1.9.2
Texuli 0.17.2. Every Texuli dependency is pinned exactly at 0.17.2.
Changed
- Render lock parity.
check ds --rendermaps locked pages through
Texuli'smapLockedRenderPage, which now forwards composed maps, on
Protoyard's isolated-world page. Part parents come from catalog relations,
so the runtime lock matches the static one:alert-dialog,icon-button
andform-fieldare no longer accepted as parts ofalert,iconor
form(tested, with the strict-nesting and tamper tests kept). ds difftakes library changes from Texuli'schangesModel, which
compares every approval field (approvedAtincluded); the--jsonshape is
unchanged, and an approval written with its keys in another order no longer
counts as a change.ds new --briefsends clauses with a color to Texuli's reader first and
keeps Protoyard's reader only where Texuli would glue a joining word into a
font family (font is Inter); generated documents are the same or better.- Protoyard still keeps
render-disabled-value, its render baseline format
and part of the brief reader where Texuli's are narrower
(TEXULI).
Protoyard v1.9.1
Texuli 0.17.1. Every Texuli dependency is pinned exactly at 0.17.1.
Changed
- Render check on Texuli's strict lock. Texuli 0.17.1 accepts a nested
catalog root only as a declared part or composed id of its allowed parent,
so Protoyard's own stricter rule is gone; tests still refuse adata-grid
inside an allowedcard(unit, Texuli's host and Chromium). A nested-root
finding is now Texuli'snot-allowed, one per root with Texuli's selector:
rewrite a render baseline written by 1.9.0
(render mode). - Parts and composed ids map through Texuli's
partParentMap; the host loads
from the@texuli/tools/ds-check/host.iife.jsexport. Protoyard still names
the host's component attribute (data-tx-component) itself, and keeps its
ownrender-disabled-value, library diff and brief clause reader where
Texuli's are narrower (TEXULI). - The app single-file export cap follows Texuli's growth: 4,168,915 B
(PERFORMANCE).
Protoyard v1.9.0
Texuli 0.17.0. Every Texuli dependency is pinned exactly at 0.17.0. See
TEXULI.
Changed
- Render check on Texuli's host.
check ds --renderloads Texuli's
prebuilt host script (host.iife.js) into the isolated world 1.8.1
introduced, instead of bundling a host with Vite at run time. It pins the
attribute the host reads todata-tx-component, so a page cannot steer the
color check, and keeps Protoyard's stricter nesting rule: a catalog root
inside an allowed root is not allowed by that alone (Texuli 0.17.0 accepts
it; Texuli 0.17.1 restores the strict rule). ds diffand the kit use Texuli'schangesModelandkitApprovalfor
allow and approval changes; library changes stay Protoyard's, which also
compares approver and hash. A newly locked document listslockedand one
addedentry per allowed component.ds importleaves duplicate library sources to Texuli's own refusal.ds new --briefreads every clause with a color itself (Texuli keeps
only the color); the brand seed survives a generator repair, so the old
known limit is gone.- social-feed names each feed article by its author (
aria-labelledby)
and runs edge to edge on the plain viewport.@protoyard/ui's
VirtualListViewtakesbind:refand rest attributes; the contract test
has no exceptions again. - Every Button size meets the 24 px target minimum (Texuli). The page
single-file export cap follows Texuli's growth: 2,594,552 B
(PERFORMANCE).
Protoyard v1.8.1
Security review fixes for PLAN_013's design-system commands
(SECURITY). No critical or high findings; these close the
four medium and the low ones.
Fixed
- Bundle code is code.
ds importexecutes nothing, but the component
sources it writes run when a prototype or the kit builds. It now lists each
components/*.sveltewith its size under a "review this code before
ds kit,devorbuild" note (data.components), checks every
releases/*.jsonagainst its document and the bundle's Texuli history, and
refuses a library source referenced twice and an oversized total inside its
loop. - Guarded outputs.
ds new --out(and MCPds_create.out),
ds export --bundle --out,check ds --write-baselineand
ds extensions --outwrite.jsonfiles only indesign-systems/,
artifacts/ortmp/, never protected names (package.json,
protoyard.json,tsconfig*,.git/,.github/,node_modules/), and
--forcereplaces only a file of the same kind. ds kitrefuses a symlinked kit folder or any symlinked folder on the
way to a file it writes.- Render check.
check ds --renderruns Texuli's host and checks in a
Chromium isolated world the prototype's code cannot patch (axe still runs in
the page), blocks WebSockets and service workers to other origins, and
reuses a build only when its recorded inputs hash still matches and its
builtAtis not in the future. - JSON parse errors on workspace files report a position only, never file
content; hidden files (.env) are refused as generator inputs. - The kit README escapes the design-system name; kit stories refuse script
and data URLs in props. new --dsruns the design system's allow rules at the template gate and
after creation (ascheck dsandvalidatedo), so a template that uses a
component the allow section leaves out is refused. It never binds an
existing prototype: an existing slug is a conflict (useds use <slug> <id> --lock) unless it is a retry with the same binding.ds approve --releasebuilds and checks the release record before it
approves the document, so a failed release leaves the document a draft.ds import --dry-runmakes the same refusals as the real run (flat
<id>.json, symlinked targets).- Kit story variant names must be unique.
Changed
docs/SECURITY.mdlistscheck ds --render,ds kit,ds useand
ds new --from-theme-fileamong the commands that run prototype code, and
DESIGN_SYSTEMS.mdrecommends CODEOWNERS onprototypes/*/protoyard.json.
Protoyard v1.8.0
The design-system lifecycle on Texuli 0.16.1. Every Texuli dependency is
pinned exactly at 0.16.1. See DESIGN_SYSTEMS.
Added
- Create from your brand.
ds new <id> --from-tokens <file>(W3C DTCG or
Tokens Studio),--from-css <file>,--from-logo <file.svg>and
--brief <text|file|->run Texuli'sgenerateDesignSystem. The result is
always a draft; the command prints the loss report (what could not be kept)
and the AA repair report. Inputs are untrusted: workspace paths only, no
symlinks, size limits, an approval inside an input is dropped. Raster logos
are refused (use--brand). The MCP toolds_createtakes the same sources. - Kit.
ds kit <id>writes or refreshesprototypes/<id>-kit, the whole
design system on Texuli'sDesignSystemKit(approval with hash check,
foundations, voice, library, changes since the previous release, control
matrix). Reruns write identical bytes;--checkfails when it is stale. - Releases.
ds approve <id> --release <semver> [--changelog <text>]and
ds release <id>recordreleases/<version>.json(the approved document,
content hash, approver, date, component hashes, changelog).ds versions
lists them;ds diff <id> [<from>] [<to>]reports token, contrast, allow,
library and approval changes. - Bundles.
ds export <id> --bundlepacks a design-system folder into one
file (Texuli's bundle plus every folder file with its sha256);ds import <file> [--id] [--draft] [--force] [--dry-run]checks the whole bundle as
untrusted input before it writes. An imported approval is a record from
another workspace, not a proof. - Full validator.
ds validateadds Texuli'scheckDesignSystemFull
(static, CSS policy, allow and catalog extensions) asfull;--strict
fails on its errors. - Render check.
check ds <slug> --renderbuilds each locked prototype
and checks it in Chromium on every route, light and dark, phone and desktop,
with Texuli'srunLockedRenderChecksplus rendered axis values and
hand-drawn charts;--report,--baselineand--write-baselinefor
existing prototypes. The build CI template (build v4) runs it for locked
prototypes. new --dry-run. Runs every check, including the--dsdesign system
and the template gate, and writes nothing.ds extensions [--out <dir>]. Writes Protoyard's catalog extensions as
Texuli extension files, sotexuli ds check <document> --locked --extensions <file>accepts the sameprotoyard:allow keys asds validate.- Unchecked imports.
check dslists the workspace packages (workspace:
dependencies the catalog does not govern) and local modules it did not read,
with Texuli'slistUncheckedImports.
Changed
check dstreats text flow alike in CSS and utilities:text-align,
text-align-last,text-overflowandtext-wrappass in a stylesheet.- Every npm package ships its
CHANGELOG.md;check:packagesrequires it. - A compound part (
<DropdownMenu.Item>,<MultiSelect.Item>) takes its
own catalog id, else its namespace root's, as Texuli's locked check does
since 0.16.1; before, it was unmapped and refused whateverallowsaid. @protoyard/uihonesty tags andStatusChipno longer forward the HTML
colorattribute to Texuli'sBadge, which now has acoloraxis.- All 31 templates are lock-clean. social-feed windows its feed with
Texuli'sVirtualListViewin feed mode (role="feed", one<article>per
post with its position, Page Up / Page Down between posts, controls inside a
post keep their keys), so it no longer sizes spacers with inline styles.
@protoyard/uire-exportsVirtualListView(catalog id
data-virtual-list). It does not takebind:refor rest attributes yet;
the contract test pins that gap.
Protoyard v1.7.0
Locked design systems on Texuli 0.15.0. Every Texuli dependency is pinned
exactly at 0.15.0. See DESIGN_SYSTEMS.
Added
- Design systems as folders.
design-systems/<id>/holds the Texuli
document (with itsallowsection and approval), the design system's own
components with a sha256 per file (components.json), component requests
and kit stories.ds migratemoves a flat file into a folder; JSON Schemas
describe every file. - Approval.
ds approve <id> --by <name> [--release <semver>]records the
approver, date, version and Texuli content hash in the document. It is a
record, not a proof: the reviewed commit (with CODEOWNERS on
design-systems/) is the guarantee. - Locked prototypes.
ds use <slug> <id> --lockpins a prototype to an
approved design system at its exact version (designSystem: { id, version, locked }inprotoyard.json);--upgrademoves the pin.new <slug> --ds <id> [--template <name>]andgenerate --dsstart locked prototypes. The
library imports as@ds/<id>/<Component>. check ds. Refuses raw controls, visual CSS,:globaloverrides of
Texuli classes, visual utility classes (layout utilities on the token scale
stay allowed), inline styles, styled local components, other UI libraries,
local motion, components outside theallowsection and disabled variant,
size or tone values.--reportcounts violations in existing prototypes.
validateruns it for locked prototypes and checks the binding.- Catalog mapper. Every tag maps to a Texuli catalog id through Texuli's
catalog imports, or to one of 57protoyard:<name>catalog extensions for
@protoyard/ui's own components, merged with Texuli'smergeCatalogs. - Locked runtime. A locked prototype loads only its design system's theme;
other themes, custom themes and style presets are refused, and DevTools
shows the lock. - Components on request.
ds component request,approve-request(a
human) andnewadd a design-system component only after approval; the
scaffold passescheck ds. The skill, MCP tools (ds_list,
ds_component_request,ds_component_new,new_from_design_system) and
generatedAGENTS.mdtell agents to stop and ask when no component fits. - Lock-clean templates. 30 of 31 templates render only through
design-system components (TexuliHeading,Text,Box,Card,Notice
and the catalog). social-feed still reports two spacer styles until Texuli
shipsVirtualList(0.16.0).
Changed
@protoyard/themes: soft tone foregrounds keep their hue when they meet AA
on the soft background.@protoyard/uiAvatarforwards Texuli'sinitialsandstatus.@protoyard/ai-uilink previews and other clickableCards name Texuli
0.15.0's stretched link (linkLabel).- Bundle caps follow Texuli 0.15.0's CSS: views board 17,906 B and calendar
18,210 B over the shell; doc initial CSS 7,898 B
(PERFORMANCE).
Protoyard v1.6.0
Texuli 0.14.4. Every Texuli dependency is pinned exactly at 0.14.4.
Added
@protoyard/uiAvatarforwards Texuli's newtoneandshape. Re-exported
components gain the rest of Texuli 0.14.3 directly:labelContenton
Checkbox, Radio and Switch, Fieldcounter, NumberFielddisplay="output",
iconSize, BottomNavemphasis, MobileHeadereyebrow/leading/onClose,
SplitViewlistWidth/breakpoint/context, Stattone, Composer
layout="row",texuli/list-itemand opt-in Spanish catalogs.@protoyard/views-uiTimelineViewholds its opening day as rows load and
zoom changes (Texuli 0.14.4) and exposesscrollToDate(date)through
bind:this.
Fixed
- The
component-scoped-classadoption rule splits selector lists only at
top-level commas, so:global(:is(.a, .b).tx-button)no longer counts.b
(Dailybot batch 9). EmojiPickerinside a TexuliFieldis named by the Field label plus its
visible value (Dailybot batch 9).protoyard showcasefinds@protoyard/playerwhere pnpm installs it with
@protoyard/cli, and stops before building anything when it is missing
(Dailybot batch 10).- The gallery reads the catalog blueprints of the installed
@protoyard/templatespackage in a consumer workspace instead of hiding
them as invalid entries (Corag).
Changed
- The page host's CSS caps rise with Texuli's CSS: initial 7,940 B (measured
7,562 B), all CSS 44,218 B (measured 43,139 B).
Protoyard v1.5.0
Texuli 0.14.2. Every Texuli dependency is pinned exactly at 0.14.2.
Added
Selectvariantandblock. The trigger takes Texuli'sghost
variant per instance (G-059), andfullWidth(orblock) now uses
Texuli'sblockon the root instead of Protoyard's wrapper (UG-20).ChipGrouprequired. In single mode the selected chip stays
selected when pressed again (Texuli'sdeselectable={false}, UG-54).TimelineViewinitialDateandformatTickpass through to Texuli
(G-056). WithoutinitialDatethe axis opens at the simulated today when
it falls inside the plan.
Changed
- Texuli 0.14.2 fixes reach every prototype: a dialog, alert dialog or sheet
mounted open shows its backdrop; a non-modal popover or select no longer
pulls focus back from another overlay; controlled toggles and toggle groups
render their prop (bind:pressedwithonPressedChangeno longer writes
the bound value by itself); side sheets, drawers andDetailPanelfill
their height and scroll inside. - The layout host's initial size is re-measured at 4,175 B gzip with Texuli
0.14.2; its cap moves from 4,080 B to 4,280 B (docs/PERFORMANCE.md).