diff --git a/.release/0.203.0.migrate b/.release/0.203.0.migrate
new file mode 100644
index 0000000000000000000000000000000000000000..92b494a211024a46a3230ffcae7401d96fa64e09
--- /dev/null
+++ b/.release/0.203.0.migrate
@@ -0,0 +1,855 @@
+# This file describe operations needed for migration between versions,
+# both for UPGRADE and DOWNGRADE.
+#
+# Documentation about syntax of this file:
+# https://metacpan.org/pod/App::migrate#SYNTAX
+#
+# You shouldn't modify anything in this file BEFORE LAST "VERSION" LINE!
+# If you will do this you'll likely BREAK DOWNGRADE for some version.
+# Exceptions from this rule are:
+# - git rebase
+# - add/remove comments, empty lines or do other visual/formatting changes
+# - add new DEFINEs
+# - modification of downgrade/after_downgrade operations needed to FIX
+#   BROKEN DOWNGRADE
+#
+# You shouldn't manually add "VERSION" lines - run narada-release instead.
+# Exceptions from this rule are some advanced use cases like:
+# - squashing several patches into one
+# - merging different release branches like 1.x and 2.x
+
+# INSTALL
+# - usually it will be automatically added by ./release, and you shouldn't
+#   add it manually
+# - this operation must be the last one, right before VERSION - to make
+#   sure patch&tgz will be applied exactly between before_upgrade and
+#   upgrade operations, and will be reversed exactly between downgrade and
+#   after_downgrade operations
+DEFINE2 INSTALL
+before_upgrade
+  if test -f .release/${MIGRATE_NEXT_VERSION}.patch; then
+    GIT_DIR=.git git apply .release/${MIGRATE_NEXT_VERSION}.patch
+  fi
+  if test -f .release/${MIGRATE_PREV_VERSION}.tgz; then
+    files='m{\A[.]/\n}&&next;s/\n/\0/;s/(\\.)/"\"$1\""/gee;m{/\0}||print'
+     dirs='m{\A[.]/\n}&&next;s/\n/\0/;s/(\\.)/"\"$1\""/gee;m{/\0}&&print'
+    names=$(tar tzf .release/${MIGRATE_PREV_VERSION}.tgz)
+    echo "$names" |       perl -ne "$files" | xargs -0 -r rm -f
+    echo "$names" | tac | perl -ne "$dirs"  | xargs -0 -r rmdir --ignore-fail-on-non-empty
+  fi
+  if test -f .release/${MIGRATE_NEXT_VERSION}.tgz; then
+    tar xzvpf .release/${MIGRATE_NEXT_VERSION}.tgz
+  fi
+  narada-bg-killall
+after_downgrade
+  if test -f .release/${MIGRATE_PREV_VERSION}.patch; then
+    GIT_DIR=.git git apply -R .release/${MIGRATE_PREV_VERSION}.patch
+  fi
+  if test -f .release/${MIGRATE_PREV_VERSION}.tgz; then
+    files='m{\A[.]/\n}&&next;s/\n/\0/;s/(\\.)/"\"$1\""/gee;m{/\0}||print'
+     dirs='m{\A[.]/\n}&&next;s/\n/\0/;s/(\\.)/"\"$1\""/gee;m{/\0}&&print'
+    names=$(tar tzf .release/${MIGRATE_PREV_VERSION}.tgz)
+    echo "$names" |       perl -ne "$files" | xargs -0 -r rm -f
+    echo "$names" | tac | perl -ne "$dirs"  | xargs -0 -r rmdir --ignore-fail-on-non-empty
+  fi
+  if test -f .release/${MIGRATE_NEXT_VERSION}.tgz; then
+    tar xzvpf .release/${MIGRATE_NEXT_VERSION}.tgz
+  fi
+  narada-bg-killall
+
+DEFINE2 only_before_upgrade
+upgrade
+downgrade true
+
+DEFINE2 only_upgrade
+upgrade
+downgrade true
+
+DEFINE2 only_downgrade
+upgrade true
+downgrade
+
+DEFINE2 only_after_downgrade
+upgrade true
+after_downgrade
+
+# mysql path/to/alter.sql
+# mysql
+#   sql commands here ...
+DEFINE mysql
+upgrade
+  test -f "$1" -a -r "$1"
+  narada-mysql < "$1"
+
+# rollback_mysql path/to/alter.sql
+# rollback_mysql
+#   sql commands here ...
+DEFINE rollback_mysql
+downgrade
+  test -f "$1" -a -r "$1"
+  narada-mysql < "$1"
+
+# mkdir some/dir ...
+# - parameters can't contain /../ or begin with /
+DEFINE2 mkdir
+upgrade
+  perl -e 'exit grep {m{\A/|(\A|/)[.][.](/|\z)}} @ARGV' "$@"
+  mkdir "$@"
+downgrade
+  perl -e 'exit grep {m{\A/|(\A|/)[.][.](/|\z)}} @ARGV' "$@"
+  rm -rf "$@"
+
+# rmdir some/dir ...
+# - parameters can't contain /../ or begin with /
+DEFINE2 rmdir
+upgrade
+  perl -e 'exit grep {m{\A/|(\A|/)[.][.](/|\z)}} @ARGV' "$@"
+  rm -rf "$@"
+after_downgrade
+  perl -e 'exit grep {m{\A/|(\A|/)[.][.](/|\z)}} @ARGV' "$@"
+  narada-restore .backup/full-"$MIGRATE_NEXT_VERSION".tar "$@"
+
+# rm some/file ...
+# - parameters can't contain /../ or begin with /
+DEFINE2 rm
+upgrade
+  perl -e 'exit grep {m{\A/|(\A|/)[.][.](/|\z)}} @ARGV' "$@"
+  rm -f "$@"
+after_downgrade
+  perl -e 'exit grep {m{\A/|(\A|/)[.][.](/|\z)}} @ARGV' "$@"
+  narada-restore .backup/full-"$MIGRATE_NEXT_VERSION".tar "$@"
+
+# add_config some/config "value"
+# add_config some/config -
+#   value
+# - config must not exists
+DEFINE2 add_config
+upgrade
+  test ! -e config/"$1"
+  mkdir -p $(dirname config/"$1")
+  { test $# = 3 && cat "$3" || echo -n "$2"; } > config/"$1"
+  echo "$1" | grep -v -q '^crontab/' || narada-setup-cron
+  echo "$1" | grep -v -q '^qmail/'   || narada-setup-qmail
+downgrade
+  rm -f config/"$1"
+  rmdir -p $(dirname config/"$1") 2>/dev/null || :
+  echo "$1" | grep -v -q '^crontab/' || narada-setup-cron
+  echo "$1" | grep -v -q '^qmail/'   || narada-setup-qmail
+
+# set_config some/config "new value"
+# set_config some/config -
+#   new value
+# - config may exists
+# - on downgrade previous value restored only if current is "new value"
+DEFINE2 set_config
+upgrade
+  mkdir -p $(dirname config/"$1")
+  { test $# = 3 && cat "$3" || echo -n "$2"; } > config/"$1"
+  echo "$1" | grep -v -q '^crontab/' || narada-setup-cron
+  echo "$1" | grep -v -q '^qmail/'   || narada-setup-qmail
+after_downgrade
+  test $# = 3 && value=$(cat "$3") || value="$2"
+  if test "$(cat config/"$1")" = "$value"; then
+    narada-restore .backup/full-"$MIGRATE_NEXT_VERSION".tar config/"$1"
+    echo "$1" | grep -v -q '^crontab/' || narada-setup-cron
+    echo "$1" | grep -v -q '^qmail/'   || narada-setup-qmail
+  fi
+
+# mod_config some/config "pcre regex" "new value"
+# mod_config some/config "pcre regex" -
+#   new value
+# - config must exists
+# - value changed only if current value match "pcre regex"
+# - on downgrade previous value restored only if current is "new value"
+DEFINE2 mod_config
+upgrade
+  test -e config/"$1"
+  if grep -q -P -- "$2" config/"$1"; then
+    { test $# = 4 && cat "$4" || echo -n "$3"; } > config/"$1"
+    echo "$1" | grep -v -q '^crontab/' || narada-setup-cron
+    echo "$1" | grep -v -q '^qmail/'   || narada-setup-qmail
+  fi
+after_downgrade
+  test $# = 4 && value=$(cat "$4") || value="$3"
+  if test "$(cat config/"$1")" = "$value"; then
+    narada-restore .backup/full-"$MIGRATE_NEXT_VERSION".tar config/"$1"
+    echo "$1" | grep -v -q '^crontab/' || narada-setup-cron
+    echo "$1" | grep -v -q '^qmail/'   || narada-setup-qmail
+  fi
+
+# del_config some/config
+DEFINE2 del_config
+upgrade
+  rm -f config/"$1"
+  rmdir -p $(dirname config/"$1") 2>/dev/null || :
+  echo "$1" | grep -v -q '^crontab/' || narada-setup-cron
+  echo "$1" | grep -v -q '^qmail/'   || narada-setup-qmail
+after_downgrade
+  narada-restore .backup/full-"$MIGRATE_NEXT_VERSION".tar config/"$1"
+  echo "$1" | grep -v -q '^crontab/' || narada-setup-cron
+  echo "$1" | grep -v -q '^qmail/'   || narada-setup-qmail
+
+# exclude_from_backup "value"
+DEFINE2 exclude_from_backup
+upgrade
+  test -e config/backup/exclude
+  if ! grep -q -F -x -- "$1" config/backup/exclude; then
+    echo "$1" >> config/backup/exclude
+  fi
+after_downgrade
+  test -e config/backup/exclude
+  grep -v -F -x -- "$1" config/backup/exclude >tmp/config_backup_exclude.$$
+  mv tmp/config_backup_exclude.$$ config/backup/exclude
+
+# kill process_name ...
+# - make sure processes started before upgrade/downgrade but blocked on
+#   start because of lock won't continue to run after upgrade/downgrade
+DEFINE2 kill
+upgrade
+  killall -9 "$@" || :
+after_downgrade
+  killall -9 "$@" || :
+
+# Initial version. MUST be 0.0.0 for new empty projects.
+VERSION 0.0.0
+
+# REQUIRED Narada files & directories:
+only_upgrade
+    mkdir -p .backup
+mkdir config
+mkdir tmp
+mkdir var
+mkdir var/log
+mkdir var/use
+
+add_config backup/exclude -
+  ./.backup/*
+  ./.lock*
+  ./tmp/*
+  ./.release/*
+add_config backup/pass
+only_upgrade
+  chmod 0600 config/backup/pass
+add_config crontab/backup -
+  1 3 * * *   ( narada-backup && echo Reminder: encrypt .backup/full.tar with config/backup/pass and upload it somewhere >&2) >/dev/null
+  1 2 * * 1   rm .backup/full.tar >/dev/null 2>&1
+
+add_config log/level    DEBUG
+add_config log/type     syslog
+add_config log/output   var/log.sock
+
+# OPTIONAL Narada files & directories:
+mkdir config/qmail
+mkdir var/mysql
+mkdir var/qmail
+
+### narada-plugin-runit
+
+# restart service_to_restart
+DEFINE2 restart
+upgrade
+  sv t ./service/"$1" || :
+after_downgrade
+  sv t ./service/"$1" || :
+
+add_config service/type runit
+add_config crontab/service -
+  */1  * * * *    narada-start-services &
+
+exclude_from_backup ./service/*/supervise
+exclude_from_backup ./service/*/log/supervise
+
+### narada-plugin-socklog
+
+restart log
+
+### narada-plugin-go-service
+
+add_config listen           127.0.0.1:0
+add_config basepath
+add_config real_ip_header
+
+INSTALL
+VERSION 0.1.0
+
+add_config httptimeout      10s
+
+add_config rsa_public_key
+
+add_config lock_timeout          1s
+
+upgrade
+  mkdir -p config/http
+  mv config/listen         config/http/listen
+  mv config/basepath       config/http/basepath
+  mv config/real_ip_header config/http/real_ip_header
+  mv config/httptimeout    config/http/timeout
+
+downgrade
+  mv config/http/listen         config/listen
+  mv config/http/basepath       config/basepath
+  mv config/http/real_ip_header config/real_ip_header
+  mv config/http/timeout        config/httptimeout
+  rm -r config/http
+
+upgrade   mv service/main service/redminems
+downgrade mv service/redminems service/main
+
+add_config router                http://localhost
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.70.0
+
+restart redminems
+
+INSTALL
+VERSION 0.71.0
+
+restart redminems
+
+INSTALL
+VERSION 0.72.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.76.0
+
+restart redminems
+
+INSTALL
+VERSION 0.77.0
+
+restart redminems
+
+INSTALL
+VERSION 0.78.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.81.0
+
+restart redminems
+
+INSTALL
+VERSION 0.82.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.87.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.94.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.101.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.104.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.108.0
+
+add_config sentry_dsn
+add_config service_name
+restart redminems
+
+INSTALL
+VERSION 0.109.0
+
+restart redminems
+
+INSTALL
+VERSION 0.110.0
+
+restart redminems
+
+INSTALL
+VERSION 0.111.0
+
+restart redminems
+
+INSTALL
+VERSION 0.112.0
+
+restart redminems
+
+INSTALL
+VERSION 0.113.0
+
+restart redminems
+
+INSTALL
+VERSION 0.114.0
+
+restart redminems
+
+INSTALL
+VERSION 0.115.0
+
+restart redminems
+
+INSTALL
+VERSION 0.116.0
+
+restart redminems
+
+INSTALL
+VERSION 0.117.0
+
+restart redminems
+
+INSTALL
+VERSION 0.118.0
+
+restart redminems
+
+INSTALL
+VERSION 0.119.0
+
+restart redminems
+
+INSTALL
+VERSION 0.120.0
+
+restart redminems
+
+INSTALL
+VERSION 0.121.0
+
+restart redminems
+
+INSTALL
+VERSION 0.122.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.133.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.139.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.150.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.153.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.154.0
+
+restart redminems
+
+INSTALL
+VERSION 0.155.0
+
+restart redminems
+
+INSTALL
+VERSION 0.156.0
+
+restart redminems
+
+INSTALL
+VERSION 0.157.0
+
+restart redminems
+
+INSTALL
+VERSION 0.158.0
+
+restart redminems
+
+INSTALL
+VERSION 0.159.0
+
+restart redminems
+
+INSTALL
+VERSION 0.160.0
+
+restart redminems
+
+INSTALL
+VERSION 0.161.0
+
+restart redminems
+
+INSTALL
+VERSION 0.162.0
+
+restart redminems
+
+INSTALL
+VERSION 0.163.0
+
+restart redminems
+
+INSTALL
+VERSION 0.164.0
+
+restart redminems
+
+INSTALL
+VERSION 0.165.0
+
+restart redminems
+
+INSTALL
+VERSION 0.166.0
+
+restart redminems
+
+INSTALL
+VERSION 0.167.0
+
+restart redminems
+
+INSTALL
+VERSION 0.168.0
+
+restart redminems
+
+INSTALL
+VERSION 0.169.0
+
+restart redminems
+
+INSTALL
+VERSION 0.170.0
+
+restart redminems
+
+INSTALL
+VERSION 0.171.0
+
+restart redminems
+
+INSTALL
+VERSION 0.172.0
+
+restart redminems
+
+INSTALL
+VERSION 0.173.0
+
+restart redminems
+
+INSTALL
+VERSION 0.174.0
+
+restart redminems
+
+INSTALL
+VERSION 0.175.0
+
+restart redminems
+
+INSTALL
+VERSION 0.176.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.178.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.180.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.187.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.195.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+
+restart redminems
+
+INSTALL
+VERSION 0.198.0
+
+
+restart redminems
+
+INSTALL
+VERSION 0.199.0
+
+
+restart redminems
+
+INSTALL
+VERSION 0.200.0
+
+
+restart redminems
+
+INSTALL
+VERSION 0.201.0
+
+
+restart redminems
+
+INSTALL
+VERSION 0.202.0
+
+
+restart redminems
+
+INSTALL
+VERSION 0.203.0
+
diff --git a/.release/0.204.0.migrate b/.release/0.204.0.migrate
new file mode 100644
index 0000000000000000000000000000000000000000..5ab06ba9a126ef90d375f124d905e5ef5151e878
--- /dev/null
+++ b/.release/0.204.0.migrate
@@ -0,0 +1,846 @@
+# This file describe operations needed for migration between versions,
+# both for UPGRADE and DOWNGRADE.
+#
+# Documentation about syntax of this file:
+# https://metacpan.org/pod/App::migrate#SYNTAX
+#
+# You shouldn't modify anything in this file BEFORE LAST "VERSION" LINE!
+# If you will do this you'll likely BREAK DOWNGRADE for some version.
+# Exceptions from this rule are:
+# - git rebase
+# - add/remove comments, empty lines or do other visual/formatting changes
+# - add new DEFINEs
+# - modification of downgrade/after_downgrade operations needed to FIX
+#   BROKEN DOWNGRADE
+#
+# You shouldn't manually add "VERSION" lines - run narada-release instead.
+# Exceptions from this rule are some advanced use cases like:
+# - squashing several patches into one
+# - merging different release branches like 1.x and 2.x
+
+# INSTALL
+# - usually it will be automatically added by ./release, and you shouldn't
+#   add it manually
+# - this operation must be the last one, right before VERSION - to make
+#   sure patch&tgz will be applied exactly between before_upgrade and
+#   upgrade operations, and will be reversed exactly between downgrade and
+#   after_downgrade operations
+DEFINE2 INSTALL
+before_upgrade
+  if test -f .release/${MIGRATE_NEXT_VERSION}.patch; then
+    GIT_DIR=.git git apply .release/${MIGRATE_NEXT_VERSION}.patch
+  fi
+  if test -f .release/${MIGRATE_PREV_VERSION}.tgz; then
+    files='m{\A[.]/\n}&&next;s/\n/\0/;s/(\\.)/"\"$1\""/gee;m{/\0}||print'
+     dirs='m{\A[.]/\n}&&next;s/\n/\0/;s/(\\.)/"\"$1\""/gee;m{/\0}&&print'
+    names=$(tar tzf .release/${MIGRATE_PREV_VERSION}.tgz)
+    echo "$names" |       perl -ne "$files" | xargs -0 -r rm -f
+    echo "$names" | tac | perl -ne "$dirs"  | xargs -0 -r rmdir --ignore-fail-on-non-empty
+  fi
+  if test -f .release/${MIGRATE_NEXT_VERSION}.tgz; then
+    tar xzvpf .release/${MIGRATE_NEXT_VERSION}.tgz
+  fi
+  narada-bg-killall
+after_downgrade
+  if test -f .release/${MIGRATE_PREV_VERSION}.patch; then
+    GIT_DIR=.git git apply -R .release/${MIGRATE_PREV_VERSION}.patch
+  fi
+  if test -f .release/${MIGRATE_PREV_VERSION}.tgz; then
+    files='m{\A[.]/\n}&&next;s/\n/\0/;s/(\\.)/"\"$1\""/gee;m{/\0}||print'
+     dirs='m{\A[.]/\n}&&next;s/\n/\0/;s/(\\.)/"\"$1\""/gee;m{/\0}&&print'
+    names=$(tar tzf .release/${MIGRATE_PREV_VERSION}.tgz)
+    echo "$names" |       perl -ne "$files" | xargs -0 -r rm -f
+    echo "$names" | tac | perl -ne "$dirs"  | xargs -0 -r rmdir --ignore-fail-on-non-empty
+  fi
+  if test -f .release/${MIGRATE_NEXT_VERSION}.tgz; then
+    tar xzvpf .release/${MIGRATE_NEXT_VERSION}.tgz
+  fi
+  narada-bg-killall
+
+DEFINE2 only_before_upgrade
+upgrade
+downgrade true
+
+DEFINE2 only_upgrade
+upgrade
+downgrade true
+
+DEFINE2 only_downgrade
+upgrade true
+downgrade
+
+DEFINE2 only_after_downgrade
+upgrade true
+after_downgrade
+
+# mysql path/to/alter.sql
+# mysql
+#   sql commands here ...
+DEFINE mysql
+upgrade
+  test -f "$1" -a -r "$1"
+  narada-mysql < "$1"
+
+# rollback_mysql path/to/alter.sql
+# rollback_mysql
+#   sql commands here ...
+DEFINE rollback_mysql
+downgrade
+  test -f "$1" -a -r "$1"
+  narada-mysql < "$1"
+
+# mkdir some/dir ...
+# - parameters can't contain /../ or begin with /
+DEFINE2 mkdir
+upgrade
+  perl -e 'exit grep {m{\A/|(\A|/)[.][.](/|\z)}} @ARGV' "$@"
+  mkdir "$@"
+downgrade
+  perl -e 'exit grep {m{\A/|(\A|/)[.][.](/|\z)}} @ARGV' "$@"
+  rm -rf "$@"
+
+# rmdir some/dir ...
+# - parameters can't contain /../ or begin with /
+DEFINE2 rmdir
+upgrade
+  perl -e 'exit grep {m{\A/|(\A|/)[.][.](/|\z)}} @ARGV' "$@"
+  rm -rf "$@"
+after_downgrade
+  perl -e 'exit grep {m{\A/|(\A|/)[.][.](/|\z)}} @ARGV' "$@"
+  narada-restore .backup/full-"$MIGRATE_NEXT_VERSION".tar "$@"
+
+# rm some/file ...
+# - parameters can't contain /../ or begin with /
+DEFINE2 rm
+upgrade
+  perl -e 'exit grep {m{\A/|(\A|/)[.][.](/|\z)}} @ARGV' "$@"
+  rm -f "$@"
+after_downgrade
+  perl -e 'exit grep {m{\A/|(\A|/)[.][.](/|\z)}} @ARGV' "$@"
+  narada-restore .backup/full-"$MIGRATE_NEXT_VERSION".tar "$@"
+
+# add_config some/config "value"
+# add_config some/config -
+#   value
+# - config must not exists
+DEFINE2 add_config
+upgrade
+  test ! -e config/"$1"
+  mkdir -p $(dirname config/"$1")
+  { test $# = 3 && cat "$3" || echo -n "$2"; } > config/"$1"
+  echo "$1" | grep -v -q '^crontab/' || narada-setup-cron
+  echo "$1" | grep -v -q '^qmail/'   || narada-setup-qmail
+downgrade
+  rm -f config/"$1"
+  rmdir -p $(dirname config/"$1") 2>/dev/null || :
+  echo "$1" | grep -v -q '^crontab/' || narada-setup-cron
+  echo "$1" | grep -v -q '^qmail/'   || narada-setup-qmail
+
+# set_config some/config "new value"
+# set_config some/config -
+#   new value
+# - config may exists
+# - on downgrade previous value restored only if current is "new value"
+DEFINE2 set_config
+upgrade
+  mkdir -p $(dirname config/"$1")
+  { test $# = 3 && cat "$3" || echo -n "$2"; } > config/"$1"
+  echo "$1" | grep -v -q '^crontab/' || narada-setup-cron
+  echo "$1" | grep -v -q '^qmail/'   || narada-setup-qmail
+after_downgrade
+  test $# = 3 && value=$(cat "$3") || value="$2"
+  if test "$(cat config/"$1")" = "$value"; then
+    narada-restore .backup/full-"$MIGRATE_NEXT_VERSION".tar config/"$1"
+    echo "$1" | grep -v -q '^crontab/' || narada-setup-cron
+    echo "$1" | grep -v -q '^qmail/'   || narada-setup-qmail
+  fi
+
+# mod_config some/config "pcre regex" "new value"
+# mod_config some/config "pcre regex" -
+#   new value
+# - config must exists
+# - value changed only if current value match "pcre regex"
+# - on downgrade previous value restored only if current is "new value"
+DEFINE2 mod_config
+upgrade
+  test -e config/"$1"
+  if grep -q -P -- "$2" config/"$1"; then
+    { test $# = 4 && cat "$4" || echo -n "$3"; } > config/"$1"
+    echo "$1" | grep -v -q '^crontab/' || narada-setup-cron
+    echo "$1" | grep -v -q '^qmail/'   || narada-setup-qmail
+  fi
+after_downgrade
+  test $# = 4 && value=$(cat "$4") || value="$3"
+  if test "$(cat config/"$1")" = "$value"; then
+    narada-restore .backup/full-"$MIGRATE_NEXT_VERSION".tar config/"$1"
+    echo "$1" | grep -v -q '^crontab/' || narada-setup-cron
+    echo "$1" | grep -v -q '^qmail/'   || narada-setup-qmail
+  fi
+
+# del_config some/config
+DEFINE2 del_config
+upgrade
+  rm -f config/"$1"
+  rmdir -p $(dirname config/"$1") 2>/dev/null || :
+  echo "$1" | grep -v -q '^crontab/' || narada-setup-cron
+  echo "$1" | grep -v -q '^qmail/'   || narada-setup-qmail
+after_downgrade
+  narada-restore .backup/full-"$MIGRATE_NEXT_VERSION".tar config/"$1"
+  echo "$1" | grep -v -q '^crontab/' || narada-setup-cron
+  echo "$1" | grep -v -q '^qmail/'   || narada-setup-qmail
+
+# exclude_from_backup "value"
+DEFINE2 exclude_from_backup
+upgrade
+  test -e config/backup/exclude
+  if ! grep -q -F -x -- "$1" config/backup/exclude; then
+    echo "$1" >> config/backup/exclude
+  fi
+after_downgrade
+  test -e config/backup/exclude
+  grep -v -F -x -- "$1" config/backup/exclude >tmp/config_backup_exclude.$$
+  mv tmp/config_backup_exclude.$$ config/backup/exclude
+
+# kill process_name ...
+# - make sure processes started before upgrade/downgrade but blocked on
+#   start because of lock won't continue to run after upgrade/downgrade
+DEFINE2 kill
+upgrade
+  killall -9 "$@" || :
+after_downgrade
+  killall -9 "$@" || :
+
+# Initial version. MUST be 0.0.0 for new empty projects.
+VERSION 0.0.0
+
+# REQUIRED Narada files & directories:
+only_upgrade
+    mkdir -p .backup
+mkdir config
+mkdir tmp
+mkdir var
+mkdir var/log
+mkdir var/use
+
+add_config backup/exclude -
+  ./.backup/*
+  ./.lock*
+  ./tmp/*
+  ./.release/*
+add_config backup/pass
+only_upgrade
+  chmod 0600 config/backup/pass
+add_config crontab/backup -
+  1 3 * * *   ( narada-backup && echo Reminder: encrypt .backup/full.tar with config/backup/pass and upload it somewhere >&2) >/dev/null
+  1 2 * * 1   rm .backup/full.tar >/dev/null 2>&1
+
+add_config log/level    DEBUG
+add_config log/type     syslog
+add_config log/output   var/log.sock
+
+# OPTIONAL Narada files & directories:
+mkdir config/qmail
+mkdir var/mysql
+mkdir var/qmail
+
+### narada-plugin-runit
+
+# restart service_to_restart
+DEFINE2 restart
+upgrade
+  sv t ./service/"$1" || :
+after_downgrade
+  sv t ./service/"$1" || :
+
+add_config service/type runit
+add_config crontab/service -
+  */1  * * * *    narada-start-services &
+
+exclude_from_backup ./service/*/supervise
+exclude_from_backup ./service/*/log/supervise
+
+### narada-plugin-socklog
+
+restart log
+
+### narada-plugin-go-service
+
+add_config listen           127.0.0.1:0
+add_config basepath
+add_config real_ip_header
+
+INSTALL
+VERSION 0.1.0
+
+add_config httptimeout      10s
+
+add_config rsa_public_key
+
+add_config lock_timeout          1s
+
+upgrade
+  mkdir -p config/http
+  mv config/listen         config/http/listen
+  mv config/basepath       config/http/basepath
+  mv config/real_ip_header config/http/real_ip_header
+  mv config/httptimeout    config/http/timeout
+
+downgrade
+  mv config/http/listen         config/listen
+  mv config/http/basepath       config/basepath
+  mv config/http/real_ip_header config/real_ip_header
+  mv config/http/timeout        config/httptimeout
+  rm -r config/http
+
+upgrade   mv service/main service/redminems
+downgrade mv service/redminems service/main
+
+add_config router                http://localhost
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.70.0
+
+restart redminems
+
+INSTALL
+VERSION 0.71.0
+
+restart redminems
+
+INSTALL
+VERSION 0.72.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.76.0
+
+restart redminems
+
+INSTALL
+VERSION 0.77.0
+
+restart redminems
+
+INSTALL
+VERSION 0.78.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.81.0
+
+restart redminems
+
+INSTALL
+VERSION 0.82.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.87.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.94.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.101.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.104.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.108.0
+
+add_config sentry_dsn
+add_config service_name
+restart redminems
+
+INSTALL
+VERSION 0.109.0
+
+restart redminems
+
+INSTALL
+VERSION 0.110.0
+
+restart redminems
+
+INSTALL
+VERSION 0.111.0
+
+restart redminems
+
+INSTALL
+VERSION 0.112.0
+
+restart redminems
+
+INSTALL
+VERSION 0.113.0
+
+restart redminems
+
+INSTALL
+VERSION 0.114.0
+
+restart redminems
+
+INSTALL
+VERSION 0.115.0
+
+restart redminems
+
+INSTALL
+VERSION 0.116.0
+
+restart redminems
+
+INSTALL
+VERSION 0.117.0
+
+restart redminems
+
+INSTALL
+VERSION 0.118.0
+
+restart redminems
+
+INSTALL
+VERSION 0.119.0
+
+restart redminems
+
+INSTALL
+VERSION 0.120.0
+
+restart redminems
+
+INSTALL
+VERSION 0.121.0
+
+restart redminems
+
+INSTALL
+VERSION 0.122.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.133.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.139.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.150.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.153.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.154.0
+
+restart redminems
+
+INSTALL
+VERSION 0.155.0
+
+restart redminems
+
+INSTALL
+VERSION 0.156.0
+
+restart redminems
+
+INSTALL
+VERSION 0.157.0
+
+restart redminems
+
+INSTALL
+VERSION 0.158.0
+
+restart redminems
+
+INSTALL
+VERSION 0.159.0
+
+restart redminems
+
+INSTALL
+VERSION 0.160.0
+
+restart redminems
+
+INSTALL
+VERSION 0.161.0
+
+restart redminems
+
+INSTALL
+VERSION 0.162.0
+
+restart redminems
+
+INSTALL
+VERSION 0.163.0
+
+restart redminems
+
+INSTALL
+VERSION 0.164.0
+
+restart redminems
+
+INSTALL
+VERSION 0.165.0
+
+restart redminems
+
+INSTALL
+VERSION 0.166.0
+
+restart redminems
+
+INSTALL
+VERSION 0.167.0
+
+restart redminems
+
+INSTALL
+VERSION 0.168.0
+
+restart redminems
+
+INSTALL
+VERSION 0.169.0
+
+restart redminems
+
+INSTALL
+VERSION 0.170.0
+
+restart redminems
+
+INSTALL
+VERSION 0.171.0
+
+restart redminems
+
+INSTALL
+VERSION 0.172.0
+
+restart redminems
+
+INSTALL
+VERSION 0.173.0
+
+restart redminems
+
+INSTALL
+VERSION 0.174.0
+
+restart redminems
+
+INSTALL
+VERSION 0.175.0
+
+restart redminems
+
+INSTALL
+VERSION 0.176.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.178.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.180.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.187.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.195.0
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+restart redminems
+
+INSTALL
+VERSION 0.202.0
+
+restart redminems
+
+restart redminems
+
+
+restart redminems
+
+INSTALL
+VERSION 0.204.0
+
diff --git a/cleanup b/cleanup
index 5e3206f4af5bd8628161b2ec7b98b43e85204310..82dd858e504bff2060e5255f78caafade5b4171c 100755
--- a/cleanup
+++ b/cleanup
@@ -27,9 +27,6 @@ main () {
 
         remove_versions $versions_to_delete || die "Failed to cleanup versions"
 
-        # git tag --delete $real_last_version
-        # git push origin :refs/tags/$real_last_version
-
         echo Re-releasing $real_last_version
 
         export DO_NOT_RELEASE_BIN=1
diff --git a/migrate b/migrate
index 9fa1f7b61ea8e4461f85c91f4bf4f1598945d4f8..664001c7f41e46e796c479af1ddabeed6313e190 100644
--- a/migrate
+++ b/migrate
@@ -849,11 +849,16 @@ restart redminems
 
 restart redminems
 
+INSTALL
+VERSION 0.202.0
+
+restart redminems
+
 restart redminems
 
 
 restart redminems
 
 INSTALL
-VERSION 0.202.0
+VERSION 0.204.0
 
diff --git a/remove_version b/remove_version
index 9f8e11c3d95cdc69bd3c087b147b465eae6f37bc..f89404a06e3a7de776ff9fbccc1c70182f24dc61 100755
--- a/remove_version
+++ b/remove_version
@@ -8,18 +8,9 @@ main() {
         check_version $1 || die 'Invalid version'
         workdir_is_clean  || die 'Please commit all changes first, then try again'
         remove_version_from_migrate $1
-        # remove_version_from_artifacts $1
         git commit migrate -m "Remove VERSION $1 [ci-skip]"
 }
 
-# remove_version_from_artifacts() {
-        # local addr='artifacts@artifacts.tgms.qarea.org'
-        # local base="artifacts/$(basename $(pwd))/$1"
-        # ssh "$addr" "rm -f $base.tgz" || die "Failed to remove tgz file"
-        # test -z "$REMOVE_ALL_VERSION" || ssh "$addr" "rm -f $base.migrate" || die "Failed to remove migrate file"
-        # test -z "$REMOVE_ALL_VERSION" || ssh "$addr" "rm -f $base.patch" || die "Failed to remove patch file"
-# }
-
 remove_version_from_migrate() {
         awk -v \
         search_version="VERSION $1" \