migration-ready-schema
Data-model rules that make a schema importable from day one, so the migration-import-engineer is never blocked on missing columns.
Skill by avelikiy
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/avelikiy-migration-ready-schema
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: data, writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/migration-ready-schema
Tools it pre-approves 4
From allowed-tools in SKILL.md: the agent may use these without asking you each time.
Read,Write,Grep,Glob
What's inside
- Skill name
migration-ready-schema- Description
- Data-model rules that make a schema importable from day one, so the migration-import-engineer is never blocked on missing columns. Every SMB Product-Builder product must let a customer bring their data from an incumbent (ServiceTitan/Toast/Mindbody/Shopify) — that requires provenance (source_ref) and rollback (import_batch_id) on importable entities, and modelling real-world actors as entities rather than inline fields. Applied by architect when writing the data model in ARCH-{slug}.md, and checked by migration-import-engineer. One cheap rule set prevents the migration↔architecture seam gap from recurring across all 40 products.
- License
- MIT
- Allowed tools
- Read,, Write,, Grep,, Glob
- Instructions
- 66 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Migration-ready schema — importable from day one
Every SMB product's wedge is **low switching cost** — the customer brings their data from
the incumbent. If the schema can't receive that data idempotently and reversibly, the
`migration-import-engineer` blocks and the wedge is a slogan. These rules are cheap at
design time and impossible to retrofit cleanly. **Apply them to the data model in ARCH,
before any import is designed.**
## The three rules (the ones that actually block imports)
### 1. Importable entities carry `source_ref` (provenance)
Any entity that can be populated from an incumbent export or a third-party sync gets a
nullable, **unique** `source_ref` column:
```
source_ref text UNIQUE NULL -- e.g. "servicetitan:pricebook:8842"
```
- It is the **dedup key** for idempotent re-import (re-running an export never duplicates).
- Namespaced `{source}:{type}:{id}` so two incumbents can't collide.
- Nullable because natively-created rows have no source.
### 2. Importable entities carry `import_batch_id` (rollback)
```
import_batch_id uuid NULL -- tags every row written by one import run
```
Rollback = delete where `import_batch_id = ?`. Without it there is no undo, and an import
with no undo is one a user will never trust enough to run.
### 3. Model real-world actors as entities, not inline fields
A customer, contact, vendor, member, or tenant is an **entity with its own table**, even if
v1 only stores a name + phone. Reason: imports populate these **before** the dependent
records (quotes, orders, bookings) exist — an inline `customer_name` field on `Quote` has
**nowhere to land** an imported customer. Inline-actor is the single most common migration
blocker.
```
-- WRONG (blocks import): Quote(... customer_contact text)
-- RIGHT: CustomerContact(id, ..., source_ref, import_batch_id)
Quote(... customer_contact_id → CustomerContact.id)
```
## Supporting rules (cheap, prevent silent data loss)
- **Money in integer minor units** (`*_cents`), never float — incumbent exports carry exact
amounts; floats corrupt them.
- **Timestamps carry the source timezone** (store UTC + offset, or tz-aware) — exports use
local times; ambiguous `MM/DD` and naive datetimes lose data.
- **Infra tables for integration bookkeeping exist in the model**: `outbound_message`
(idempotent send guard), `processed_webhook_events` (event dedup). The
integrations-engineer relies on them; enumerate them so they aren't a surprise.
## Checklist (architect runs this before finalizing the data model)
```
For each entity in the data model:
- [ ] Can it be imported from an incumbent or third-party? If yes → has source_ref + import_batch_id
- [ ] Is it a real-world actor (customer/contact/vendor/member)? If yes → it is its own entity, not an inline field
- [ ] Money fields integer minor units? Timestamps tz-aware?
- [ ] Listed the infra tables (outbound_message, processed_webhook_events) the integrations layer needs?
```
A data model that passes this checklist hands `migration-import-engineer` a destination it
can import into idempotently and reversibly — no blocked seam.From avelikiy/great_cto, MIT.
More from avelikiy/great_cto
- 0.776score
outcome-roadmap
avelikiy
Transform an output-focused roadmap (feature list) into an outcome-focused one.
SkillAFreshness: A★ 105Claude Code +9 - 0.776score
skeptical-triage
avelikiy
Reusable 3-round self-challenge + arbiter pattern for filtering false positives from findings/verdicts.
SkillAFreshness: A★ 105Claude Code +9 - 0.776score
deploy-landed
avelikiy
Prove a deploy landed — the served revision is the commit you meant, its env is present, and the product does its job — instead of trusting the deploy…
SkillAFreshness: A★ 105Claude Code +9 - 0.776score
opportunity-solution-tree
avelikiy
Build an Opportunity Solution Tree (OST) to structure product discovery — map a desired outcome to customer opportunities, possible solutions, and experiments.
SkillAFreshness: A★ 105Claude Code - 0.776score
signing-preflight
avelikiy
Before the first commit of a session, check that commit signing will work — the key is loaded and unlocked — and ask the operator to unlock it once, up front…
SkillAFreshness: A★ 105Claude Code +9 - 0.776score
brainstorming
avelikiy
Structured idea generation + multi-LLM debate for the product-owner stage.
SkillAFreshness: A★ 105Claude Code - 0.776score
aesthetic-instrument
avelikiy
great_cto's own committed aesthetic — the instrument panel.
SkillAFreshness: A★ 105Claude Code +9 - 0.776score
committed-aesthetic
avelikiy
How to write — and how to use — a skill that IS one aesthetic rather than a catalogue of them.
SkillAFreshness: A★ 105Claude Code +9 - 0.776score
lifecycle-messaging
avelikiy
Email/SMS lifecycle and deliverability framework for SMB Product-Builder products that send transactional or lifecycle messages (booking reminders, CRM…
SkillAFreshness: A★ 105Claude Code - 0.776score
observability-baseline
avelikiy
Scaffold-time observability so a shipped product is not blind in prod from day one — error capture (Sentry), request-id structured logging, and /healthz +…
SkillAFreshness: A★ 105Claude Code +9 - 0.776score
quant-validation
avelikiy
The methods a financial-ML result has to survive before it is evidence — purged cross-validation with an embargo, triple-barrier labelling, sample uniqueness…
SkillAFreshness: A★ 105Claude Code +9 - 0.776score
vertical-onboarding
avelikiy
Onboarding-and-switching playbook for SMB Product-Builder products.
SkillAFreshness: A★ 105Claude Code +9
Signals
- Stars
- 105
- Forks
- 13
- Open issues
- 5
- Last commit (this folder)
- Jul 6, 2026 (3 months ago)
- Last release
- Oct 23, 2026 (5 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/avelikiy/great_cto
- Website
- greatcto.systems
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from avelikiy
- 0.776score
deploy-landed
avelikiy
Prove a deploy landed — the served revision is the commit you meant, its env is present, and the product does its job — instead of trusting the deploy…
SkillAFreshness: A★ 105Claude Code +9 - 0.776score
lifecycle-messaging
avelikiy
Email/SMS lifecycle and deliverability framework for SMB Product-Builder products that send transactional or lifecycle messages (booking reminders, CRM…
SkillAFreshness: A★ 105Claude Code - 0.776score
aesthetic-instrument
avelikiy
great_cto's own committed aesthetic — the instrument panel.
SkillAFreshness: A★ 105Claude Code +9 - 0.776score
brainstorming
avelikiy
Structured idea generation + multi-LLM debate for the product-owner stage.
SkillAFreshness: A★ 105Claude Code - 0.776score
committed-aesthetic
avelikiy
How to write — and how to use — a skill that IS one aesthetic rather than a catalogue of them.
SkillAFreshness: A★ 105Claude Code +9 - 0.776score
observability-baseline
avelikiy
Scaffold-time observability so a shipped product is not blind in prod from day one — error capture (Sentry), request-id structured logging, and /healthz +…
SkillAFreshness: A★ 105Claude Code +9
Cite this page
migration-ready-schema skill. Agent Mart. https://agentmart.dev/skills/avelikiy-migration-ready-schema (last updated 2026-10-24)