mirror of
https://github.com/Tyrrrz/DiscordChatExporter.git
synced 2026-06-10 00:02:37 -06:00
Bootstrap channel-map entries from existing archive filenames, reject merges that would shrink large JSON exports, accept exported DISCORD_TOKEN when scrape.env is missing, and disable the duplicate OpenKotOR target folder. Co-authored-by: Cursor <cursoragent@cursor.com>
2.3 KiB
2.3 KiB
title: fix: Ensure Documents archive paths append safely with auth
type: fix
status: completed
date: 2026-05-28
origin: User request — extract to ~/Documents/** per server, append not overwrite, proper CLI auth
fix: Ensure Documents archive paths append safely with auth
Summary
Recurring scrapes must update the user's existing large JSON archives under ~/Documents/<server>/ in place using DiscordChatExporter incremental export (--after) and merge-by-id, never replacing a file with a fresh full export when an archive already exists. Auth must work without fragile manual setup.
Problem Frame
| Gap | Impact |
|---|---|
scrape.env required even when DISCORD_TOKEN is already exported |
Preflight/scrape fail before auth is attempted |
Channel map not bootstrapped from existing * [id].json files |
Risk of creating parallel files instead of updating in place |
Merge replaces destination via direct mv without monotonic guard |
Large archives could shrink on bad merge |
OpenKotOR_discord_msgs target points at missing folder |
Target resolves zero channels while openkotor_discord_msgs holds data |
Requirements
| ID | Requirement | Files |
|---|---|---|
| U1 | Make host runner accept exported DISCORD_TOKEN / DISCORD_TOKEN_FILE when scrape.env is absent |
scripts/run-discord-scrape-host.sh, smoke test |
| U2 | Bootstrap output_dir/.dce-meta/channel-map.json from existing * [channel_id].json archives before scrape/preflight |
scripts/run-discord-scrape.sh, smoke test |
| U3 | Safe merge: verify merged message count ≥ existing; replace via temp file in target directory | scripts/run-discord-scrape.sh, smoke test |
| U4 | Align config with on-disk folders (disable missing OpenKotOR target) | config/scrape-targets.json |
| U5 | Document auth + in-place append contract | .docs/Recurring-Scrape-Setup.md |
Test Scenarios
- Host runner succeeds with only
DISCORD_TOKENin environment (no scrape.env) - Bootstrap writes channel-map entries for seeded archives without overwriting map entries
- Merge rejects shrinkage (fixture with fewer messages after merge)
- Existing smoke suite still passes
Success Criteria
./scripts/tests/run-discord-scrape-smoke.shand host smoke pass- Preflight can run once user exports token (even without scrape.env file)