一键导入
go-add-migration
Create properly named PostgreSQL migration files for GOB microservices
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Create properly named PostgreSQL migration files for GOB microservices
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Internal POSIX runtime helpers for agente-00c/feature-00c orchestrators (state, lock, validation, hashes, secrets filter). NOT user-invocable.
Task status / backlog progress report; identifies tasks ready to start. Triggers: "revisar tarefas", "status das tarefas", "progresso do projeto", "review tasks". Skip for executing (execute-task) or creating tasks (create-tasks).
GLOBAL feature portfolio dashboard — compare progress, suggest archive/abandon/prioritize. Triggers: "status global", "portfolio de features", "dashboard de features", "comparar features". Cross-feature; for single feature deep-dive use review-task.
Convert a natural-language feature description into SDD spec (user stories, FRs, success criteria). Triggers: "specify", "criar spec", "nova feature", "feature spec". Skip for refining an existing spec (clarify).
Audit a GOB Go microservice against all project conventions and patterns
Requirements quality gate ("unit tests for English") by domain (ux/api/security/performance/a11y). Triggers: "checklist", "validar requisitos", "quality gate". Validates REQUIREMENT quality, not code.
| name | go-add-migration |
| description | Create properly named PostgreSQL migration files for GOB microservices |
| allowed-tools | ["Read","Write","Glob","Grep","Bash","Edit"] |
Create properly named PostgreSQL migration files for a GOB microservice following all project conventions.
"add migration", "new migration", "criar migration", "nova migration", "create migration"
$ARGUMENTS should specify:
gob-member-service) — requiredBefore generating files, read:
ls services/{service}/migrations/ to determine the next 3-digit sequence numberservices/{service}/go.mod to confirm the service exists and get module path| Service | Schema |
|---|---|
| gob-auth-service | auth |
| gob-member-service | member |
| gob-lodge-service | lodge |
| gob-session-service | session |
| gob-process-service | process |
| gob-election-service | election |
| gob-bulletin-service | bulletin |
| gob-partnership-service | partnership |
| gob-audit-service | audit |
| gob-report-service | report |
| gob-notification-service | notification |
| gob-financial-service | financial |
| gob-assistance-service | assistance |
| gob-whatsapp-service | |
| gob-migration-service | migration |
If the service is not listed, extract the schema name from the service name by removing the gob- prefix and -service suffix.
services/{service}/migrations/012_xxx.up.sql → 12)highest + 1, zero-padded to 3 digits (e.g., 013).up.sql and .down.sql filesFile naming: {NNN}_{description_in_snake_case}.up.sql and {NNN}_{description_in_snake_case}.down.sql
Up migration:
-- {NNN}: Create {table_name} table
CREATE TABLE IF NOT EXISTS {schema}.{table_name} (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
-- entity-specific columns here --
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP
);
-- Indexes
CREATE INDEX IF NOT EXISTS idx_{table_name}_{column} ON {schema}.{table_name}({column});
-- Comments
COMMENT ON TABLE {schema}.{table_name} IS '{description}';
Down migration:
DROP TABLE IF EXISTS {schema}.{table_name} CASCADE;
Up migration:
-- {NNN}: Add {column_name} to {table_name}
ALTER TABLE {schema}.{table_name}
ADD COLUMN IF NOT EXISTS {column_name} {type} {constraints};
Down migration:
ALTER TABLE {schema}.{table_name}
DROP COLUMN IF EXISTS {column_name};
Up migration:
-- {NNN}: Create index on {table_name}.{column}
CREATE INDEX IF NOT EXISTS idx_{table_name}_{column} ON {schema}.{table_name}({column});
Down migration:
DROP INDEX IF EXISTS {schema}.idx_{table_name}_{column};
Up migration:
-- {NNN}: Seed {table_name} with default data
INSERT INTO {schema}.{table_name} (col1, col2, ...)
VALUES
('value1', 'value2'),
('value3', 'value4')
ON CONFLICT DO NOTHING;
Down migration:
-- Remove seeded data
DELETE FROM {schema}.{table_name}
WHERE col1 IN ('value1', 'value3');
Up migration:
-- {NNN}: {description}
ALTER TABLE {schema}.{table_name}
{alterations};
Down migration:
-- Revert: {description}
ALTER TABLE {schema}.{table_name}
{reverse_alterations};
Schema prefix: ALWAYS use {schema}.{table_name} (e.g., member.members, process.process_definitions). Never use unqualified table names.
CIMs: When inserting CIM values, always use 7-digit zero-padded format. Use LPAD(cim::text, 7, '0') for JOINs with legacy data.
Portuguese accents: Always use proper accents in seed data text (e.g., "Administracao" is WRONG, "Administracao" is WRONG, "Administracao" -> use "Administrativo" etc.). Example correct values: "Iniciacao", "Elevacao", "Exaltacao", "Filiacao".
Down migrations must be idempotent: Always use IF EXISTS, CASCADE where appropriate. Running down twice must not error.
Timestamps: Use TIMESTAMP NOT NULL DEFAULT NOW() for created_at. Use TIMESTAMP (nullable) for updated_at.
UUIDs: Use UUID PRIMARY KEY DEFAULT gen_random_uuid() for primary keys.
Enums: Prefer VARCHAR or TEXT with CHECK constraints over PostgreSQL ENUM types. This avoids migration complexity when adding new values.
Foreign keys: Include ON DELETE behavior explicitly (CASCADE, SET NULL, or RESTRICT).
Boolean defaults: Always specify DEFAULT false or DEFAULT true for boolean columns.
Naming conventions:
snake_case, plural (e.g., members, process_definitions)snake_case (e.g., lodge_id, created_at)idx_{table}_{column} (e.g., idx_members_lodge_id)uniq_{table}_{column} (e.g., uniq_members_cim)fk_{table}_{referenced_table} (e.g., fk_members_lodges)After creating both files:
make migrate-up SERVICE={service-name} (for local dev)./scripts/migrate.sh --service={service-name} up