Record the completed migration (channel map, mmetl/mmctl steps, caveats) and teach prepare-export to apply mattermost_channel renames plus user_emails for matching existing MM accounts.
5.2 KiB
5.2 KiB
slack-sieve — handoff
Repo: https://git.levkin.ca/ilia/slack-sieve (public)
Clone: git clone git@git.levkin.ca:ilia/slack-sieve.git
Vikunja: todo.levkin.ca → Homelab → slack-sieve (SLK)
Last updated: 2026-07-10
Status: Levkin Slack → Mattermost done (2026-07-10)
Filtered archive is live on https://slack.levkin.ca (team levkin, VM 10.0.10.237).
- 18 channels, ~299 posts + attachments (from ~765 cherry-picked Slack messages)
- Users: Slack
jedi_jew→ MMilia,ira_feeds→ira(both added to imported channels) - Boy/girl name lists verified in Zoey (
kids-zoey)
Channel map (Slack → Mattermost)
| Slack | MM name | Display name |
|---|---|---|
122harmony |
prop-122harmony |
122 Harmony |
153niagara |
prop-153niagara |
153 Niagara |
284richmond |
prop-284richmond |
284 Richmond |
45ritson |
prop-45ritson |
45 Ritson |
6keefer |
prop-6keefer |
6 Keefer |
york |
prop-york |
York |
airbnb |
prop-airbnb |
Airbnb |
realestate |
prop-realestate |
Real estate |
zoey |
kids-zoey |
Zoey |
zane |
kids-zane |
Zane |
izik |
kids-izik |
Izik |
moishe |
kids-moishe |
Moishe |
parenting |
kids-parenting |
Parenting |
after-school-activities |
kids-after-school |
After school |
banking |
family-banking |
Banking |
purchase |
family-purchase |
Purchase |
medical |
family-medical |
Medical |
levkin |
family-levkin |
Levkin |
Skipped for import: noise channels (random, jam, meetings, …), 29wilson, 520steeles, empty picks.
Import caveats
- Thread replies whose parent was not cherry-picked were dropped by mmetl (
couldn't find rootPost). - First
mmctljob failed updatingiliaroles (“Cannot demote last System Admin”); fixed by omitting existing users from the JSONL and re-running. Channels from the first attempt were reused. - Local artifacts (gitignored):
prepared-export/,prepared-export.zip,.tools/mmetl,/tmp/mm-import/on the Mac;/tmp/mattermost-bulk-import.zipon the VM.
Share with Irina
Slack archive is on Mattermost: https://slack.levkin.ca
Team levkin — channels like Zoey, Zane, 45 Ritson, Banking.
Login ira. Filtered archive (files/facts, not all chat). Name lists in Zoey.
What this is
Local triage UI for migrating Slack workspace exports → Mattermost.
Official Slack export (JSON)
→ make hydrate # __uploads/ via xoxe URLs in export
→ make preset-skips # optional noise-channel skips
→ make review # manifest.json (gitignored)
→ make prepare-export # prepared-export/ (filtered Slack shape)
→ mmetl transform slack
→ mmctl import --bypass-upload (on MM host)
Data on disk (Mac)
| Path | Role |
|---|---|
~/Downloads/Levkin Slack export Sep 29 2016 - May 27 2026 |
Raw official export (~27MB JSON only) |
~/Downloads/Levkin Slack export enriched |
Review + prepare source — JSON + __uploads/ |
~/Documents/code/slack-sieve/manifest.json |
Triage decisions (local only, not in git) |
Hydrate: 1109 / 1122 attachments; 13 old files HTTP 401 (expired export token).
Commands
cd ~/Documents/code/slack-sieve
export SLACK_EXPORT_PATH="$HOME/Downloads/Levkin Slack export enriched"
make review # http://127.0.0.1:8765
make hydrate
make preset-skips
make cherry-pick # bulk data/files picks (optional)
make prepare-export # filtered export for mmetl
make test
Re-run Mattermost import (if needed)
- Set
mattermost_channel/user_emailsinmanifest.json, thenmake prepare-export. - Zip
prepared-export/→ run mmetl v0.4+
mmetl transform slack --team levkin --file prepared-export.zip -o mattermost_import.jsonl --bot-owner ilia --default-email-domain levkin.local - Map Slack usernames → existing MM users in the JSONL; do not re-import users that would change System Admin roles.
- Package
data/(attachments) +mattermost_import.jsonl→ zip; copy to VM;
mmctl --local import process --bypass-upload /tmp/mattermost-bulk-import.zip
Open tasks
| P | Task | Owner | Status |
|---|---|---|---|
| — | Levkin triage + Mattermost import | @you / @agent | ✅ done 2026-07-10 |
| P3 | Re-hydrate 13 files that returned HTTP 401 | @you | optional |
| P3 | Optionally re-import missing thread parents | @you | optional |
Mattermost / homelab
- SSO: authentik-apps.md#mattermost
- Import docs: https://docs.mattermost.com/administration-guide/onboard/migrate-from-slack.html
Repo layout
slack-sieve/
server.py / slack_export.py / static/
scripts/ hydrate, preset-skips, auto-cherry-pick, prepare-export, build-test-fixture
tests/ pytest + Playwright
presets/ levkin-skips.json
docs/HANDOFF.md
manifest.json # gitignored
Security
- Do not commit
manifest.json, Slack export folders, or import zips. - Rotate any Slack tokens/cookies pasted in chat during setup.