Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when a JavaScript/TypeScript package is consumed by another package — exports map, peer vs. direct dependencies, files allow-list, and whether it should be built at all.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Pack placement.
engineering-base. The step asked for it to be suggested by thereactandtypescriptpacks, and the skill schema carries nosuggested_bykey — so the intent is recorded here rather than expressed in frontmatter that would fail validation. A React or TypeScript consumer receives this skill throughengineering-base, which both of those packs require.
The JavaScript twin of composer-packages. A component is
a file; a library is a package with a public surface, and that surface is declared in
package.json rather than inferred. Most of the failures below are silent at author time
and loud at the consumer's — which is why the surface is read, not assumed.
`react` AND `react-dom` ARE peerDependencies. NEVER dependencies.
`types` IS THE FIRST KEY OF EVERY CONDITIONS OBJECT.
DECIDE buildable-VS-source-consumed BEFORE WRITING THE EXPORTS MAP.
NEVER HAND-BUMP A VERSION.
A package in the repository is imported by another package, or is about to be published:
an exports map is being written or changed, a hook fails at runtime with "invalid hook
call", an install fails on a workspace: range, a release needs cutting, or the
buildable-vs-source question has not been answered yet.
files
list, and whether a build step exists at all — deciding it after writing the map means
rewriting the map.
src/ or the
build directory), never a mix.package.json — exports, dependencies, peerDependencies,
files, private, publishConfig.error-severity findings.react in
dependencies gives the consumer a second copy of React.
react and react-dom appear under peerDependencies only.types first, then import / require.
types-not-first.check_package_surface <library-root> [<library-root> …]
scripts/check_package_surface.ts beside this skill. Deterministic, JSON on stdout, no
network and no subprocess. It reports:
| Code | Severity | Why |
|---|---|---|
peer-as-dependency | error | two copies of React in one tree break hooks at runtime, with a message that names neither package |
export-target-missing | error | the manifest promises a file the package does not ship |
no-exports-map | warn | main/module without exports — the entry point resolves by bundler convention, not by declaration |
types-not-first | warn | conditions match in declaration order, so a later types is never seen and the package silently ships untyped |
workspace-range-publishable | warn | a workspace: range does not resolve outside the workspace; published, the consumer's install fails |
It classifies from the declared export targets, never from a directory name. A package
directory called ui-lib-vite is not evidence about Vite, and one called buildable is not
evidence that anything builds. A mixed declaration is reported as undeclared rather
than resolved to a guess — declaring both is the ambiguity worth surfacing.
What it does not do: it never compiles and never runs a bundler, so it cannot tell you the declared layout is producible. A checker that grew a parser would report compile errors as packaging errors, and the two have different fixes.
| source-consumed | buildable | |
|---|---|---|
| exports point at | src/ | the build directory |
| build step | none | one, and it must run before publish |
files | not needed (nothing published) | the build directory, as an allow-list |
private | true on a workspace-only package | absent; publishConfig.access set instead |
| cost | consumer compiles it | a build to maintain, and output that can go stale |
Default to source-consumed inside a workspace. A build step exists to serve publication; adding one for a package nobody publishes is a maintenance cost with no consumer.
Read the repository, then take exactly one branch — Class A, per
standards-from-config: the config is the answer.
.changeset/ present → changesets. Add a changeset describing the change and let the
release job bump and publish. Never edit version by hand.nx release) → that command. It owns
version, tag, and changelog together; splitting them by hand desynchronises them.A breaking change carries the ! marker and the footer — see
conventional-commits-writing. The marker is
what a release tool reads to decide the major bump, so omitting it publishes a breaking
change as a patch.
error finding with its fix, then the warnings.{ "import": …, "types": … } type-checks fine at author
time and ships untyped to the consumer.src/. Only a real build proves that.files is an allow-list, not a deny-list. Adding a directory to the package means
adding it here, and forgetting is invisible until a consumer imports a missing path.workspace: range is not a version. It resolves in the workspace and nowhere else.react or react-dom in dependencies.types after import or require.version field by hand, in any of the three release branches.scripts/check_package_surface.ts is read-only and offline by construction, and the
constraint is worth stating because a packaging tool is a tempting place to lose it:
package.json and tests path existence. It never edits a manifest,
so it can never "fix" a version field, which is the one thing § Release forbids.Widening any of these turns a metadata reader into something that runs a third party's code. If a future check needs a build, it belongs in a separate integration test with its own declared cost — never here.
composer-packages — the PHP twin; same surface discipline, different manifest.standards-from-config — the Class-A rule the § Release branch follows.conventional-commits-writing — the ! marker a release tool reads.ui-component-architect — the component inside the library; this skill is the package around it.まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.
日本語の概要は準備中です。原文の説明を表示しています。
Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review.
日本語の概要は準備中です。原文の説明を表示しています。
Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.
日本語の概要は準備中です。原文の説明を表示しています。
Use for an adversarial red-team / blue-team / auditor review of an AI agent's CONFIG + behaviour (rules, skills, MCP, hooks, permissions) — attack-chain → defensive-gap list, not a code audit.
日本語の概要は準備中です。原文の説明を表示しています。