docs: describe the six capabilities shipped since the differential was re-scored - #180
Merged
Conversation
…s re-scored Six features landed in #168-#178 that neither CLAUDE.md nor any rule mentions. For a tool whose scenarios are generated, a capability the rules do not describe may as well not exist — issue #165 was exactly this failure one level down, where the distribution channel dropped 17 rules. Two new rules: - `templates-and-iteration.md` — `components` / `for-each` / `use`, the largest new vocabulary, aimed at the failure mode the audit called dominant. - `motion-path.md` — the effect, its SVG path syntax, and why coordinates are deltas from the layout position. Two extended: - `geometry-safety.md` gains `text-autofit` as a fourth viewport control, next to `white-space`, `auto_scroll` and `overflow` — with the floor and the fact that a violation is still reported when shrinking is not enough. - `timeline-sequencing.md` gains what `style.transition` actually smooths: the four interpolated properties, and the three reasons a property snaps instead, since `validate` now names them. CLAUDE.md picks up the same, plus `--frames` / `concat`, `--hardware-acceleration`, and the `--fix` refusals. Writing the docs found a real trap, which is why the examples were run rather than only written. A `for-each` item that omits a field, forwarded through a `use`'s `props`, passes the literal `$name` instead of falling back to the component's `default` — a `params` default applies when `props` omits the key, not when it forwards an unresolved binding. Nothing is silent about it (an unresolved-variable warning, then the consumer rejects the value) but it is the natural way to write "optional field", so it now has its own section. The example that exposed it is corrected and validates. The two new rules ship without touching `skills.rs`: `skills install` goes from 49 files to 51, and the exhaustiveness test stays green. That is PR #168's build script doing what it was written for.
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.
Six features landed in #168–#178 that neither
CLAUDE.mdnor any rule mentions. For a tool whose scenarios are generated, a capability the rules do not describe may as well not exist — issue #165 was this exact failure one level down, where the distribution channel silently dropped 17 rules.What is now documented
Two new rules
templates-and-iteration.md—components/for-each/use. The largest new vocabulary, aimed at the failure mode the original audit called dominant: a generator duplicating a repeated structure by hand.motion-path.md— the effect, its SVG path syntax (the same oneshape: {"type":"path"}already uses), and why the coordinates are deltas from the layout position rather than absolute.Two extended
geometry-safety.mdgainstext-autofitas a fourth viewport control alongsidewhite-space,auto_scrollandoverflow— including the floor, and the fact that a violation is still reported when shrinking is not enough. It also says plainly that onlytextandgradient_textimplement it, so declaring it on acaptionis inert.timeline-sequencing.mdgains whatstyle.transitionactually smooths: the four interpolated properties, and the three distinct reasons a property snaps instead — layout, discrete, unsupported-paint — sincevalidatenow names them. With the practical consequence: animatetransform, notwidth.CLAUDE.mdpicks up the same, plus--frames/rustmotion concat,--hardware-acceleration, and the--fixrefusal rules.Running the examples found a real trap
The docs' own examples were executed, not just written. One failed:
A
for-eachitem that omits a field, forwarded through ause'sprops, passes the literal$namethrough instead of falling back to the component'sdefault. Aparamsdefault applies whenpropsomits the key — not when it forwards an unresolved binding.Nothing is silent about it: an unresolved-variable warning fires, then the consumer rejects the value. But it is the natural way to write "optional field with a default", so it now has its own section in the rule, with the working form. The example is corrected and validates.
This is the argument for running documentation rather than reviewing it.
The distribution pipe works
The two new rules ship without touching
skills.rs:49 rules on disk, 49 embedded, exhaustiveness test green. That is PR #168's build script doing exactly what it was written for — the fix for #165 proving itself on the first real addition since.
Verification
cargo test --workspace: 30 targets, 0 failurescargo fmt --all --check: cleancomponents+for-each+use+motion_path— validates under--strict-animStill undocumented
The spring's
duration/rest_threshold(#168) andrustmotion info's Media assets section (#178) are mentioned nowhere yet. Both are CLI-facing rather than scenario vocabulary, so they matter less to a generator, but they are gaps.