Repository navigation
fix: finish Prime feedback follow-ups (Korean wrap, heading margins, asset/theme/variant evidence) - #121
Draft
devfive-relay-c70423[bot] wants to merge 7 commits into
Conversation
…set heading margins Korean text keeps wordBreak keep-all and overflowWrap break-word and now also emits textWrap pretty so keep-all no longer leaves large trailing gaps. textWrap is a shorthand that resets text-wrap-mode to wrap, so it is never added to whiteSpace pre/nowrap text. Semantic h1-h6 conversion resets user-agent block margins with my=0px unless a margin exists. Shipped delivery guidance now states the Korean wrapping policy (a diff caused only by Figma's mid-word Korean break is a documented policy difference; never overwrite the native reference), the validation-error input width contract, CI stage reporting and the axe-core 4.14 label-content-name-mismatch lesson. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ceholder a workable recovery
Extra image fills were named {stem}-{index} while a different asset with
the same base name was deduplicated to {stem}-2, so fill 2 of one asset and
a second asset both became stem-2.png. Extra fills are now
{stem}--fill-{index} (0-based, as in {nodeId}:fills:{index}); stems never
contain a double hyphen, so they cannot collide with any asset stem.
The refusal for one code placeholder resolving to two pictures always
recommended assetNamesPerNode:true, which cannot help when the nodes share
one imageHash (naming deliberately follows the shared image). The error now
lists the conflicting assets/nodes/paths, recommends the per-node flag only
when the hashes differ, and otherwise points to separate exports or
sourceMap nodeId/assetId binding.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A missing-only devupJson holds only tokens absent from the project's devup.json, yet nothing on the response said so and themeCompleteness still read used-tokens. Every devupJson response now carries devupJsonScope (complete-theme, used-tokens or additions-only); missing-only adds devupJsonMerge with the target file, a deep-merge/add-missing-keys strategy and an explicit instruction. A missing-only devupJson outputPath named devup.json is refused before any Figma call, since saving the fragment there would replace the project theme. Co-Authored-By: Claude Opus 5.5 <[email protected]>
A COMPONENT_SET or master export whose every variant is hidden generates display=none code that renders nothing and carries none of the page's overrides. componentSetVariants now reports per-variant visibility and allVariantsHidden, and such exports add a DEVUP_HIDDEN_MASTER_EXPORT warning listing the hidden variants and any visible instances in the snapshot, telling the agent to export the visible page INSTANCE instead. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…utput path Asset job rows only explained pending files. Each projected output path now carries fileFacts (exists, bytes, sha256 read from disk) and outputPathRedirected when the canonical file lives elsewhere than the requested path (shared identical bytes, derived grayscale reuse). A not-written row states why: missing after a blocked/rolled-back write, different bytes kept by the collision guard, quarantine for naming review, a failed projection transaction, no acquisition, or a duplicate delivered at another asset's path, with requestedPathFacts for the requested path. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Only textWrap="pretty" lines and their property-evidence entries are added; the seven pinned plugin snapshots change by fifteen textWrap lines and their LF-normalized checksums are synchronized with a README entry. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…d follow-up The harness compiles generated code with the installed Devup UI and checks computed keep-all, text-wrap-style pretty, nowrap for intrinsic-width text, word-boundary line ends and a 0px h2 margin without a reset stylesheet. The Prime feedback report maps 002/006/007/008/011/014/016/032 and the axe-core 4.14 lesson to this follow-up and names what stays out of scope. Co-Authored-By: Claude Opus 5.5 <[email protected]>
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.
Follow-up to #119. Implements the remaining MCP-scope Prime feedback items (002, 006, 007, 008, 011, 014, 016, 032) plus today's axe-core 4.14 lesson. The audit is in
reports/prime-feedback-2026-11.md→ "Follow-up (2026-11-10)".Changes per item
016 Korean wrapping (user decision: keep word boundaries, avoid large trailing gaps)
wordBreak="keep-all"+overflowWrap="break-word"and now also emitstextWrap="pretty".whiteSpacepre/nowrapgets notextWrap: CSStext-wrapis a shorthand that resetstext-wrap-modetowrap, so it would turn soft wrapping back on. An explicit local or themetextWrapis kept.textWrapevidence citescharacters/textAutoResize/maxLines/widthinstead of a full copy ofstyledTextSegments. This keeps the real wquw-118 inline response under the 1 MiB limit.delivery-quality.mdreverses fix: preserve Prime layout contracts and require Figma-backed completion #119's "Do not apply keep-all solely because text is Korean". A diff caused only by Figma's mid-word Korean break is now a documented policy difference, and the native Figma reference is never overwritten to make it pass. Thekorean-word-boundaryvalidate rule's next action now matches this.002 Heading margins: semantic
h1–h6emitsmy="0px"unless the node already hasm/my/mt/mb. It comes with a verified semantic-stage property derivation.006 Asset placeholder collisions
{stem}-{index}, so fill 2 ofheroand a secondheroasset (deduped tohero-2) were bothhero-2.png. They are now{stem}--fill-{index}, with the 0-based index from{nodeId}:fills:{index}. Stems are kebab-case with collapsed hyphens, so--can't appear in any other asset's stem.assetNamesPerNode:trueonly when the image hashes differ. Shared-hash naming is deliberate and unchanged (that flag can't split those names), so in that case the error points to separate exports or binding each element's src through sourceMap nodeId/assetId.x-1.pngtox--fill-1.png. Existing collision guards and the shared-hash naming test are unchanged.007 missing-only theme: every
devupJsonresponse now carriesdevupJsonScope(complete-theme/used-tokens/additions-only). Missing-only also addsdevupJsonMerge(target, deep-merge strategy, instruction). A missing-onlydevupJsonoutputPath nameddevup.jsonis refused before any Figma call, because writing the fragment there would replace the theme.008 Hidden masters:
componentSetVariantsreports per-variantvisibleandallVariantsHidden. When every variant of a COMPONENT_SET or master export is hidden, the response adds aDEVUP_HIDDEN_MASTER_EXPORTwarning. It lists the hidden variant ids and any visible instances in the snapshot, and says to export the visible page INSTANCE instead.011 Asset per-outputPath state
fileFacts(exists/bytes/sha256 read from disk) andoutputPathRedirected.not-writtenrow has afileStateReason: blocked or rolled-back write, different bytes kept by the collision guard, quarantine, failed transaction, not acquired, or duplicate. These rows also carryrequestedPathFacts.014 / 032 / axe-core 4.14 (guidance only,
delivery-quality.md; manifest bytes/sha updated)label-content-name-mismatchis now in wcag21a. Drop redundant aria-labels, make labels contain the visible text verbatim, use sr-only text for hints, and never disable the rule.Test evidence
cargo fmt --all -- --check: pass.cargo clippy --locked --workspace --all-targets --all-features -- -D warnings: pass.cargo insta test --workspace --all-features --check: 2260 passed / 1 failed / 2 ignored locally on Windows. The failure isr3_cancelled_client_recovers_retained_asset_job, which uses virtual time and is load-dependent. It also failed in the full run before any asset_jobs change in this branch, and it passed 4/4 when its own test binary ran alone. It was left unchanged.textWrap="pretty"lines and their property evidence. Seven pinned plugin goldens add exactly 15textWrap="pretty"lines (applied withDEVUP_FIXTURE_UPDATE); their checksums are synced and the change is recorded in the fixtures README.node --test crates/devup-mcp-figma/tests/explore_script_behavior.mjs plugin/tests/withdraw.test.mjs harness/runtime-audit/test/checks.test.mjs: 83 tests, 82 pass, 0 fail.harness/runtime-audit,npm test): 96 tests, 95 pass, 1 skipped (CI-only gate), 0 fail.word-break: keep-all,text-wrap-style: pretty,text-wrap-mode: nowrapfor intrinsic-widthpretext, and every line break on a word boundary.h2has 0px top and bottom margins.Out of scope (unchanged)
Note: pushing to
devfive-relay-c70423/prime-feedback-followupswas declined by the pre-receive hook. The branch was pushed under the repository's usualdevfive/<id>/…prefix instead.🤖 Generated with Claude Code
Submitted via Devfive hub. Employee: ; device:
3099154426bffbeef8b62999b80bb038