Skip to content

Audit and revert EsTeR's problematic UFOpaedia edits #2

@ayrtondenner

Description

@ayrtondenner

Context

A StrategyCore forum post (magic9mushroom, April 2025) identifies that a UFOpaedia editor called EsTeR "unilaterally revamped everything over community objections" in the Apocalypse section — doing some good work but "ruining a large number of articles." The goal is to systematically review all of EsTeR's edits across the entire wiki, decide what to revert, and execute the reverts using the Deldonut1 account.

"One notable goal is to unfuck the Apocalypse section. An enthusiastic editor called EsTeR decided to unilaterally revamp everything over community objections, and while he did some good work he ruined a large number of articles. It's a mammoth task to figure out what to do with the mess."
— magic9mushroom, StrategyCore

Key Reference Links

Parent ticket: #3 — Organize and index UFOpaedia wiki dump data

Data Sources Available (from #3)

We already have a local wiki dump that partially covers this audit — but it may not have all of EsTeR's edits or full revision history. Both local data and browser-based gathering are needed to complement each other.

Source File Relevance
2020 XML dump ufopaediaorg-20200218-history.xml (33 MB) Pre-EsTeR baseline — 14,400 pages with wikitext as of Feb 2020. Gives us the "before" state for comparison.
EsTeR edits ester_edits.json 50 EsTeR edits tracked via Wayback Machine — may not be complete.
Wayback snapshots wayback/*.json (14 files) 14 key pages with 1-40 snapshots each (2020-2026). Partial coverage only.
Page titles ufopaediaorg-20200218-titles.txt Full list of 14,400 page titles for cross-referencing.
Indexed data indexed/ (once #3 is complete) Structured per-page JSON with categories, links, contributor info.

All files are in scratch/wiki-dump/ufopaedia-dump/ (gitignored).


Phase 1: Gather Data

Use both local data and browser-based gathering to build a complete picture. The local dump gives us a head start; browser steps fill the gaps.

1A: Local Data (from wiki dump, #3)

  • Parse ester_edits.json — extract the 50 already-tracked EsTeR edits (page titles, timestamps, content snapshots from Wayback)
  • Cross-reference with 2020 XML dump — for each page EsTeR edited, extract the Feb 2020 wikitext as the pre-EsTeR baseline
  • Cross-reference with Wayback snapshots — for the 14 key pages that have Wayback data, compare pre-EsTeR vs post-EsTeR rendered HTML
  • Use indexed data from Organize and index UFOpaedia wiki dump data #3 (once available) — pull apocalypse-pages.json to identify all Apocalypse-related pages and check which ones EsTeR touched

1B: Browser-Based Gathering (to fill gaps)

The local data may be incomplete — ester_edits.json has only 50 edits, the XML dump has only 1 revision per page, and Wayback covers only 14 pages. Browser-based gathering ensures we capture everything.

  • Save EsTeR's full Contributions list

    1. Open in browser: https://www.ufopaedia.org/index.php?title=Special:Contributions/EsTeR&limit=500
    2. Save the page as HTML (File > Save As > "Complete webpage") into scratch/ester-audit/contributions/
    3. If there are pagination links ("older 500"), follow each page and save them all
    4. This gives us: every page EsTeR edited, timestamps, edit summaries, revision IDs
    5. Compare against ester_edits.json to find any edits not already tracked
  • Export Affected Pages with Full History via Special:Export

    1. Open in browser: https://www.ufopaedia.org/index.php/Special:Export
    2. Paste all page titles from the contributions list (one per line)
    3. Check "Include all revisions, not just the current one"
    4. Click Export — downloads an XML file
    5. Save to scratch/ester-audit/pages-export.xml
    6. Note: MediaWiki caps at ~100 revisions per request. If it times out, batch pages in groups of 10-20
  • (Fallback) Save Individual Page Histories — If Special:Export is too slow, visit https://www.ufopaedia.org/index.php?title=PAGE_NAME&action=history for each affected page and save as HTML


Phase 2: Analyze with Python Script

  • Build analysis script (scratch/ester-audit/analyze_ester_edits.py) that:

    1. Loads ester_edits.json (50 tracked edits) as a starting point for the EsTeR edit list
    2. Parses saved Special:Contributions HTML pages to find any additional edits not in ester_edits.json
    3. Merges both sources into a complete EsTeR edit list
    4. Parses the 2020 XML dump to extract pre-EsTeR wikitext for each affected page
    5. Parses Special:Export XML (from browser) to get full revision history with all contributors
    6. Loads Wayback snapshot data for the 14 key pages to compare content over time
    7. For each page, computes a diff between pre-EsTeR (2020 dump or pre-EsTeR revision from export) and post-EsTeR versions
    8. Generates review-tracker.json with fields per page:
      • page, ester_edit_count, first_edit, last_edit, total_size_change
      • edit_summaries, pre_ester_revision_id, post_ester_revision_id
      • diff_url, subsequent_edits_by_others, review_status, decision, notes
      • data_sources (which sources contributed data: dump, wayback, export, contributions)
    9. Flags priority pages (largest content removal, no subsequent edits by others, most EsTeR edits)
    10. Detects already-reverted edits (other editors restored size or have "revert"/"undo" summaries)
    11. Produces a summary report.md with statistics and the review queue
  • Libraries needed:

    • xml.etree.ElementTree (stdlib) for XML parsing — reuse patterns from index_wiki_dump.py (Organize and index UFOpaedia wiki dump data #3)
    • beautifulsoup4 (pip install beautifulsoup4) for HTML parsing (contributions pages)
    • difflib (stdlib) for computing text diffs between revisions
    • json, pathlib, re (stdlib)
    • No external API calls — everything works on local files

Phase 3: Review & Act

  • Review each edit (sorted by priority):
    • Open the diff URL in browser to see what EsTeR changed
    • Compare against the 2020 XML dump baseline and original game knowledge (wiki/original-game/)
    • Mark in tracker: "decision": "revert" / "keep" / "partial" / "already-fixed"
    • Add notes explaining reasoning

Decision Framework

Situation Action
EsTeR removed accurate, useful content Revert to pre-EsTeR version
EsTeR added incorrect/misleading info Revert or Edit to fix
EsTeR improved formatting but changed factual content Partial — keep formatting, restore facts
EsTeR's version is fine or improves on the original Keep
Another editor already reverted/fixed Already-fixed — no action needed
EsTeR's edit was the last edit and page is now worse High priority revert
  • Execute reverts (via Deldonut1 account):
    • Use MediaWiki undo: https://www.ufopaedia.org/index.php?title=PAGE&action=edit&undoafter=PRE_ESTER_REVID&undo=LAST_ESTER_REVID
    • Review the preview, add edit summary: "Reverting EsTeR's changes per community discussion (see StrategyCore thread)"
    • For partial reverts, manually edit to cherry-pick good changes
    • The script generates exact undo URLs for each page marked for revert

File Structure

scratch/ester-audit/
  analyze_ester_edits.py  # Analysis script
  review-tracker.json     # Generated tracking file
  report.md               # Human-readable summary report
  contributions/          # Saved Special:Contributions HTML pages
  pages-export.xml        # Special:Export XML (from browser)
  histories/              # Individual page history HTMLs (fallback)

scratch/wiki-dump/ufopaedia-dump/   # (from #3, already exists)
  ufopaediaorg-20200218-history.xml # Pre-EsTeR baseline (Feb 2020)
  ester_edits.json                  # 50 tracked EsTeR edits (partial)
  wayback/                          # Wayback snapshots for 14 key pages
  indexed/                          # Structured index (once #3 is complete)

Verification

  • Run the analysis script and verify it correctly parses all data sources (ester_edits.json, XML dump, contributions HTML, export XML)
  • Compare the merged edit list against Special:Contributions to confirm no edits were missed
  • Spot-check 3-5 diff URLs from the tracker to confirm they show the right edits
  • Verify the 2020 dump baseline matches expected pre-EsTeR content for known pages
  • Verify priority sorting puts the most impactful changes first
  • For any reverts, preview the result in MediaWiki before saving

Dependencies

Metadata

Metadata

Assignees

Labels

ufopaediaUFOpaedia wiki-related tasks

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions