gplx/CLAUDE.md

4.9 KiB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Project overview

GPLX is a local-first MediaWiki 1.43 installation on Windows, purpose-built for an accessibility-focused content workflow. The Node/npm layer wraps PowerShell scripts for setup and tooling; the actual MediaWiki application lives in ./mediawiki/.

Commands

Task Command
Clone MediaWiki core npm run mw:init
Install PHP (Composer) deps npm run mw:deps
First-time setup (both above) npm run mw:setup
Start dev server (PHP built-in, port 8080) npm run dev
Run Pa11y accessibility checks npm run a11y:pa11y
Run Lighthouse accessibility checks npm run a11y:lighthouse
Run all accessibility checks npm run a11y:all

Prerequisites: Node.js 20+, PHP 8.1+ (XAMPP or WampServer, or PHP in PATH).

After first setup, open http://127.0.0.1:8080/mw-config/index.php to finish the MediaWiki installer.

Architecture

gplx/
├── mediawiki/          # MediaWiki 1.43 core (cloned from Gerrit, branch REL1_43)
│   ├── LocalSettings.php   # All site config and custom hooks live here
│   ├── extensions/         # 35 bundled extensions + SemanticMediaWiki 6.0.1 via Composer
│   └── skins/              # Cavendish (default), Vector, MonoBook, Timeless, MinervaNeue
├── scripts/            # PowerShell scripts (dev.ps1, mw-init.ps1, mw-deps.ps1)
│   └── templates/      # Wiki page source files (.wiki) — pushed via maintenance/run.php edit
├── tests/accessibility/    # Pa11y (pa11y.config.json) + Lighthouse (lighthouserc.json) configs
├── docs/               # Project docs (ACCESSIBILITY_WORKFLOW.md, INSTALLATION_WINDOWS.md)
└── package.json        # npm entry point — all commands delegate to scripts/

Key architectural decisions

LocalSettings.php is the customization layer. All MediaWiki configuration, hook registrations, and inline CSS lives in mediawiki/LocalSettings.php. There is no separate plugin or theme source tree — customizations are PHP hooks injected at startup.

Approval workflow via ApprovedRevs. Pages require explicit admin/reviewer approval before public visibility. A BeforePageDisplay hook enforces this: unapproved pages are hidden from non-creators and from the public; creators see a pending-review notice. Roles: sysop, bureaucrat, reviewer (the last is assignable by bureaucrats).

Anonymous editing is disabled. $wgGroupPermissions["*"]["edit"] = false — only registered users can edit.

Default skin is Cavendish. Loaded with wfLoadSkin('Cavendish').

PHP built-in server for local dev. dev.ps1 uses php -S 127.0.0.1:8080 -t ./mediawiki. It probes XAMPP/WampServer paths if php is not in PATH.

composer.phar lives at the project root, not inside mediawiki/. The mw-deps.ps1 script downloads it on first run if absent.

Semantic MediaWiki (SMW) 6.0.1 is installed. Enabled via enableSemantics('127.0.0.1:8080') in LocalSettings.php. SMW adds 39 database tables (smw_*) and enables structured property annotations and {{#ask:}} queries across all wiki pages.

Template:RegDocument annotates SMW properties. Every page using {{RegDocument}} writes nine structured properties (Scope, Status, Area of validity, etc.) via {{#set:}}. These power the automatic queries on Document_Index and the category pages.

Wiki page sources live in scripts/templates/. All template and infrastructure page content is maintained as .wiki files and pushed via php mediawiki/maintenance/run.php edit. To update a wiki page, edit the .wiki file and re-run the push command:

Get-Content scripts/templates/<file>.wiki -Raw | D:\xampp\php\php.exe mediawiki/maintenance/run.php edit --user "Gxplex admin" --summary "..." "<Page title>"

Navigation is two-layered. The sidebar (MediaWiki:Sidebar) links to Document_Index and Special:Ask. Category pages (e.g. Category:Medical Devices) embed {{#ask:}} queries showing all pages in that category with their metadata.

SMW maintenance commands

Task Command
Initial SMW DB setup php mediawiki/extensions/SemanticMediaWiki/maintenance/setupStore.php --nochecks
Rebuild SMW data index php mediawiki/extensions/SemanticMediaWiki/maintenance/rebuildData.php
Rebuild property statistics php mediawiki/extensions/SemanticMediaWiki/maintenance/rebuildPropertyStatistics.php

Run rebuildData.php after bulk-importing pages via the maintenance script, or after updating a template that contains {{#set:}}.

Accessibility baseline

  • Required: WCAG 2.1 AA
  • Stretch target: WCAG 2.1 AAA where practical
  • Checks must pass after any template, style, or interaction change: npm run a11y:all
  • Pa11y targets http://127.0.0.1:8080/ and /index.php/Main_Page (WCAG2AA profile)
  • Lighthouse asserts minimum accessibility score of 0.9 (warns, does not fail hard)