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 creating a Laravel migration — table prefixes, column naming, multi-tenant awareness, php artisan make:migration. Other stacks: use stack-native migration tooling.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Use this skill when the user asks to create a database migration, add a column, create a table, or modify the schema.
./agents/ and AGENTS.md for table prefixes, column naming, multi-tenant setup.php artisan make:migration create_xyz_table (or add_column, etc.).decimal for money.php artisan migrate), then rollback (php artisan migrate:rollback) to confirm reversibility.decimal for money — never float.down(), or a roll-forward plan in the file
(see § The recovery contract below). Silence is the violation.Some projects use multiple database connections. Check config/database.php for connections.
| Check | How |
|---|---|
| Available connections | config/database.php → 'connections' array |
| Migration directories | database/migrations/ (default), check for additional directories |
| Custom migrate commands | php artisan list migrate — look for project-specific commands |
Always determine which database the table belongs to before creating a migration.
php artisan make:migration create_example_table
return new class extends Migration {
public function up(): void
{
Schema::connection('api_database')->create('example_table', function (Blueprint $table): void {
$table->id();
$table->unsignedBigInteger('customer_id');
$table->string('name');
$table->boolean('is_active')->default(true);
$table->timestamps();
$table->softDeletes();
$table->foreign('customer_id')
->references('id')
->on('customers')
// Choose the referential action; never inherit it from a
// template. See "Referential action is a decision" below.
->onDelete('cascade'); // cascade: rows here are expendable
// WITHOUT their customer
$table->index('is_active');
});
}
public function down(): void
{
Schema::connection('api_database')->dropIfExists('example_table');
}
};
php artisan make:migration:customer AddWeatherColumn --table=cl_lv_weather
Customer database tables use the cl_ prefix (e.g. cl_user, cl_lv_weather).
return new class extends Migration {
public function up(): void
{
Schema::connection('my_connection')->table('example', function (Blueprint $table): void {
$table->unsignedInteger('new_column')->after('existing_column');
});
}
public function down(): void
{
Schema::connection('my_connection')->table('example', function (Blueprint $table): void {
$table->dropColumn('new_column');
});
}
};
# Default connection
php artisan migrate # development
php artisan migrate --env=testing # testing
# Multi-tenant / custom — check AGENTS.md or module docs for project-specific commands
# Example: php artisan migrate:tenants, php artisan migrate --database=tenant
core/migrations/).{entity}_id (e.g. customer_id, user_id)is_ prefix (e.g. is_active, is_default)upload_date, deleted_at)unsignedBigInteger for foreign keys referencing id() columns->after('column') to place new columns logicallyEvery migration declares one of these, and silence is the violation:
down() that restores the prior state; orThe second branch is not a lighter obligation. A migration taking it records, in its own file comments, all three of:
Vague intent or missing detail is the violation. The plan lives in the migration file and lands in the same diff, because a plan documented "later" somewhere else is a plan nobody can review at the moment it matters.
The template above labels its onDelete('cascade') as one branch, not a
default. Copying it unchanged is how a delete of one customer silently removes
records that had independent value.
| The child row, without its parent, is | Action | What happens |
|---|---|---|
| expendable — it only means something as part of the parent | cascade | deleted with the parent |
| self-valued — it is a record in its own right (an invoice, an audit row, a payment) | restrict (or no action) | the parent delete FAILS until the child is dealt with |
| survivable — it outlives the parent with the link removed | set null | the column is nulled; requires a nullable column |
Two consequences worth stating because they are the ones missed:
restrict is the safe default for anything a finance, audit, or legal reader
would expect to still exist. A failed delete is a conversation; a cascaded
delete is a recovery.set null needs the foreign-key column to be nullable, and it needs the
application to handle the orphan state. Choosing it without both is choosing a
constraint error later.Soft deletes do not interact with this: onDelete fires on a real DELETE,
so a soft-deleting parent never triggers it. If the model soft-deletes, the
referential action describes what happens on a force-delete or a purge, and that
is the case to decide against.
->after('column') for column ordering — MariaDB respects it, and it matters for readability.down() that restores the prior
state, or the three-part roll-forward plan in the migration file. Neither is
optional; choosing between them is.float for money — use decimal.Before finalizing a migration, run the adversarial-review skill.
Focus on the "Database migrations" attack questions: Can this destroy data? Is rollback possible?
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
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.
日本語の概要は準備中です。原文の説明を表示しています。