Migration Log
Every export, push, and PR creation writes a row to /app/migration-log. Row names follow the format MIG-0001.
Readable by System Manager, Hydra Admin, and Hydra User. Only System Manager can delete rows. Manual edits through the form are rejected — the app updates rows itself as a push progresses.
Action
| Value | Triggered when |
|---|---|
| Export | Customisation files written to the target app's working tree (the Export Only path, or as a sub-step of Push) |
| Push | A branch pushed to the remote |
| PR Created | A pull request opened on GitHub |
Status
| Value | Means |
|---|---|
| Success | Operation completed |
| Failed | Operation aborted. See error_message for the PAT-scrubbed cause |
| In Progress | Currently running, or abandoned (sweeper marks rows older than 30 min as Failed) |
Fields on each row
Fields are conditionally shown based on the row's action — empty fields don't render on the form.
| Field | Shows for | What it carries |
|---|---|---|
action / status | All | List-view filters |
user / timestamp | All | Who triggered it, when |
target_app | All | The app whose repo was touched |
summary | All | One-line human-readable result (shown in list view) |
branch | Push, PR Created | Git branch name |
commit_hash | Push (success only) | Short commit SHA |
tag_name (Tag) | Push | Tag name if Release Tag was set in the dialog |
related_log | PR Created | Cross-link back to the Push row that triggered the PR |
pr_url (PR URL) | PR Created | Direct GitHub PR link |
items_count | Export, Push | Item count for quick scope |
doctypes | Export, Push | JSON list of doctypes involved |
details | Export, Push | Per-doctype new/updated breakdown |
error_message | Failed only | PAT-scrubbed error text |
files_changed | Export, Push | JSON list of file paths touched |
items (child table) | Export, Push | Per-item rows — see below |
Items child table
Each Migration Log Item row:
| Column | Label | Value |
|---|---|---|
item_doctype | DocType | The source DocType of the customisation (e.g. Custom Field, Property Setter) |
item_name | Item Name | The customisation's name (e.g. Customer-vat_id) |
item_action | Action | New / Updated / Failed / Skipped |
target_doctype | Target DocType | The parent DocType the customisation applies to (e.g. Customer) |
file_path | — | The custom/<dt>.json or fixtures/<dt>.json it was written to |
error_detail | — | Per-item error if item_action=Failed |
Reading partial outcomes
When a Push commits 47 of 50 selected items, the per-item child table tells you exactly which 3 fell through and why. Each row's Action shows what happened, and error_detail carries the message for Failed rows.
Stuck-job recovery
A Push sitting at In Progress for more than 30 minutes gets auto-marked Failed by the hourly sweeper. To recover: re-select your items in the migrator and push again.