feat(migrate): harvest migration-learnings from #10#12
Merged
Conversation
Harvest the verified, generalizable findings from migration-learnings issue #10 into the mittwald-migrate skill. - database-engines.md: new "Default: mirror the source engine" principle — an autonomous migration reproduces the source faithfully; a MariaDB source goes to a `mariadb` container, never managed MySQL unless the operator explicitly opts into the engine swap (MariaDB != MySQL). Add "App <-> container DB networking" (apps and stack containers share the project network, so managed/runtime app + container DB is a first-class shape). Guard the "managed is the right call" list with the MySQL-source assumption. - migrate-mysql.md, provision-target.md §7, discover-source.md §7b: apply the mirror-source default at the decision and action sites; add a MariaDB row to the inventory example. - discover-source.md: recognize Deployer/Capistrano release-symlink layouts (current/ -> releases/, shared/); migrate the active state via `tar -h`. - ssh-modes.md: local SSH ControlMaster/multiplexing breaks mStudio connections; disable with -o ControlMaster=no -o ControlPath=none. - pitfalls.md #16: service-name reachability extends across the app<->stack boundary. - mittwald-surfaces.md: fix `mw project get` (positional arg, not -p); update the deprecated `mw project backup*` forms to `mw backup*`; add the ingress path-update endpoint (PATCH /v2/ingresses/{id}/paths, API-only). Two findings are tracked upstream as mittwald/cli gaps rather than skill workarounds (runtime-version flag on `mw app create`; ingress path-update command). One claim (auto-provisioned managed MySQL) was dropped — the API/CLI create no database. Closes #10. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
gandie
approved these changes
Jun 30, 2026
gandie
left a comment
Member
There was a problem hiding this comment.
lgtm, nice learnings!
One thought for meditation: Documenting sensible defaults and explaining mstudio behavior via pitfalls is a very good idea, but i am wondering how it will scale in the future. The error space of agent work is infinite and we can't document infinity ( yet ). Besides such regular learning harvests, maybe we need another ritual for consolidation to keep skills and playbooks tight? Just a thought to chew on i wanted to throw into the ring.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
Harvests the verified findings from migration-learnings issue #10 into the
mittwald-migrateskill. Every claimed trap was checked against the livemwCLI (1.18.0) and the mittwald developer docs before being included; unverified or already-covered claims were dropped or redirected (see "Triage" below).Changes
Headline — mirror the source engine by default (
database-engines.md)An autonomous migration should reproduce the source faithfully. New principle: a MariaDB source →
mariadbcontainer (matching major), never managed MySQL unless the operator explicitly opts into the engine swap. MariaDB ≠ MySQL (auth plugins, collations, system tables, JSON, sequences, virtual columns can break only in prod). Applied consistently at the decision and action sites:discover-source.md§7b (DB-engines self-check) + inventory example gets a MariaDB rowmigrate-mysql.md§0 recapprovision-target.md§7 (Managed MySQL guard)App ↔ container DB networking (
database-engines.md,pitfalls.md#16)Documents that apps and container stacks share the project network — a managed/runtime app can reach a container DB by service name (
DB_HOST=<service-name>). Source: mittwald containers docs. This makes "managed/runtime app + container MariaDB" a first-class shape and directly supports the mirror-source default above.Deployer/Capistrano source layouts (
discover-source.md)Recognize release-rotation layouts (
current/ -> releases/<ts>/,shared/); migrate the active state only, dereferencing symlinks withtar -h, instead of copying the wholereleases/history or shipping broken links.SSH ControlMaster trap (
ssh-modes.md)Local SSH connection-sharing (
ControlMaster auto) makes mStudio connections fail with a misleadingcould not connect to project. Fix:-o ControlMaster=no -o ControlPath=none. (Independently hit by two people.)CLI doc fixes (
mittwald-surfaces.md)mw project gettakes the project as a positional arg — the documented-pform is wrong (verified againstmw project get --help).mw project backup*/mw project backupschedule*are deprecated →mw backup*/mw backup schedule*(the CLI prints the deprecation).PATCH /v2/ingresses/{ingressId}/paths(resource-scoped, API-only — no CLI command yet).Triage of #10 (for reviewers)
mw project get -p,mw project backup*mw app createTesting
Repo CI gates, locally:
markdownlint-cli2 "**/*.md"→ 0 errorslychee --offline(Docker, as CI) → 0 errorsCloses #10.
🤖 Generated with Claude Code