Add triage tests, prepare-export, and UI fixes for Levkin migration.
CI / skip-ci-check (push) Successful in 4s
CI / secret-scan (push) Failing after 2s
CI / python-ci (push) Successful in 25s

Cherry-pick heuristics, manifest merge, global file search, scrollbar styling, and pytest/Playwright coverage unblock review and filtered export for mmetl.
This commit is contained in:
2026-06-03 15:42:48 -04:00
parent 88b7082f4f
commit 4b034d19f6
48 changed files with 6904 additions and 126 deletions
+21 -8
View File
@@ -2,7 +2,8 @@
**Repo:** https://git.levkin.ca/ilia/slack-sieve (public)
**Clone:** `git clone git@git.levkin.ca:ilia/slack-sieve.git`
**Last updated:** 2026-05-29
**Vikunja:** [todo.levkin.ca → Homelab → slack-sieve](https://todo.levkin.ca) (`SLK`)
**Last updated:** 2026-06-03
---
@@ -17,7 +18,7 @@ Official Slack export (JSON)
→ make hydrate # __uploads/ via xoxe URLs in export
→ make preset-skips # optional noise-channel skips
→ make review # manifest.json (gitignored)
→ prepare-export # TODO — filtered Slack-shaped folder/zip
→ make prepare-export # prepared-export/ (filtered Slack shape)
→ mmetl transform slack
→ mmctl import
```
@@ -46,6 +47,9 @@ make review # http://127.0.0.1:8765
make hydrate # re-download attachments if needed
make preset-skips # apply presets/levkin-skips.json (safe to re-run; keeps your channel decisions)
make cherry-pick # bulk data/files picks on priority channels (optional)
make prepare-export # after review — filtered export for mmetl
make test # pytest + Playwright
```
---
@@ -119,16 +123,21 @@ Copy and edit for another workspace.
---
## TODO (next implementer)
## Open tasks (source of truth)
1. **`scripts/prepare-export.py`** — read `manifest.json`, emit filtered Slack export dir/zip (`__uploads/` + selected JSON days, thread parents included).
2. **Pilot import** — one small channel through `mmetl` → `mmctl` on Mattermost VM; verify threads, files, users.
3. **User mapping** — optional `fetch-emails` or Slack ID → Mattermost username map for `mmetl`.
4. **Makefile** `make prepare-export` + doc section in README.
Tracked in **Vikunja → Homelab → slack-sieve**. Update here when scope changes.
| P | Task | Owner | Status |
|---|------|-------|--------|
| **P1** | **Channel review in UI** — `make review`, finish 14 undecided + 3 partial ([order](#suggested-review-order)); save manifest | @you | ⏳ **next** |
| **P1** | Pilot import: one channel via `make prepare-export` → `mmetl` → `mmctl` on MM VM `10.0.10.237` | @agent | ⏳ blocked on review |
| **P2** | User mapping: Slack ID → Mattermost username for `mmetl` | @agent | backlog |
| **P3** | Re-hydrate 13 files that returned HTTP 401 (expired export token) | @you | optional |
| — | `scripts/prepare-export.py` + `make prepare-export` | @agent | ✅ done |
### Mattermost / homelab
- SSO: Authentik — see ansible `docs/guides/mattermost-authentik-gitlab-oauth.md`
- SSO: [authentik-apps.md#mattermost](https://git.levkin.ca/ilia/ansible/src/branch/master/docs/guides/authentik-apps.md#mattermost) (ansible)
- Import docs: https://docs.mattermost.com/administration-guide/onboard/migrate-from-slack.html
---
@@ -143,6 +152,10 @@ slack-sieve/
scripts/
hydrate-export.sh
preset-skips.py
auto-cherry-pick.py
prepare-export.py
build-test-fixture.py
tests/ # pytest + Playwright (mini-export fixture)
presets/
levkin-skips.json
manifest.json # gitignored — your work in progress