Hermes
c5a608d77a
chore: remove dead lowercase app/controllers/ (PSR-4 autoload uses App\\Controllers\\)
Deploy Feature Branch to Test / PHP Syntax Check (push) Successful in 58s
Lint / PHP Syntax Check (push) Successful in 1m0s
Deploy Feature Branch to Test / HTML Lint (htmlhint) (push) Successful in 1m41s
Deploy Feature Branch to Test / CSS Lint (stylelint) (push) Failing after 1m45s
Deploy Feature Branch to Test / Deploy to Test Environment (push) Has been skipped
Lint / HTML Lint (htmlhint) (push) Successful in 1m20s
Lint / PHP Syntax Check (pull_request) Successful in 35s
Lint / CSS Lint (stylelint) (push) Failing after 1m25s
PHPUnit / PHP Unit Tests (push) Failing after 42s
PHPUnit / PHP Unit Tests (pull_request) Failing after 54s
Lint / HTML Lint (htmlhint) (pull_request) Successful in 1m29s
Lint / CSS Lint (stylelint) (pull_request) Failing after 1m33s
2026-06-04 11:15:24 +00:00
Hermes
a1984b9413
test(i18n): integration render tests for 4 locales + Playwright E2E flow ( closes #77 )
2026-06-04 11:14:25 +00:00
Hermes
13a25aded2
feat(i18n): accessibility - per-field form errors, landmark aria-labels, tests ( closes #76 )
2026-06-04 11:04:06 +00:00
Hermes
0186de90ec
feat(i18n): responsive locale-switcher with SVG flags ( closes #75 )
2026-06-04 09:44:40 +00:00
Hermes
4b1c779846
feat(i18n): translation files DE/EN/UK/RU + layout integration ( closes #74 )
2026-06-04 09:31:34 +00:00
Hermes
ce21242308
feat(i18n): LocaleController switcher with open-redirect protection ( closes #73 )
...
- App\Controllers\LocaleController: GET /locale?set=xx&return=/path
- Sets 1-year cookie (HttpOnly=false for SSR, SameSite=Lax, Secure on HTTPS)
- 302 redirect to explicit return URL > Referer > /
- Pure buildResponse() helper for unit tests (no headers/exit)
- current() helper: resolves locale from $_GET/$_COOKIE/Accept-Language
- safeRedirect: rejects absolute URLs, protocol-relative (//evil.com),
backslash tricks (\\evil.com), javascript:/data: schemes
- 28 PHPUnit tests (LocaleControllerTest), all green
- Total project tests now: 92
2026-06-04 08:57:33 +00:00
Hermes
63c8c759d2
feat(i18n): core Locale resolver + I18n t()-helper with tests ( closes #72 )
...
- App\Core\Locale: query-param > cookie > Accept-Language > 'de' fallback
- BCP-47 region stripping (en-US -> en, uk-UA -> uk)
- q-value sorting with stable order
- og:locale mapping (de_DE, en_GB, uk_UA, ru_RU)
- hreflang alternates helper
- App\Core\I18n: t() with {placeholder} interpolation, lookup chain
current-locale -> de -> key, in-memory cache
- ADR-002: documents the architecture decision
- 46 PHPUnit tests (LocaleTest, I18nTest), all green
2026-06-04 08:53:58 +00:00
Hermes
f9295a2d07
docs(adr): add ADR-001 for PHPUnit integration ( #65 , #67 )
...
Lint / PHP Syntax Check (push) Successful in 56s
PHPUnit / PHP Unit Tests (push) Successful in 1m7s
Lint / HTML Lint (htmlhint) (push) Successful in 1m36s
Lint / CSS Lint (stylelint) (push) Successful in 1m40s
Nachtraegliche Architektur-Dokumentation der Test-Integration
(CI-Pipeline + Pre-Commit-Hook mit Shared-Script-Pattern).
- Begruendet 2-Layer-Strategie (lokal + CI)
- Dokumentiert Performance-Optimierungen (Conditional PHPUnit, Composer-Lazy-Install)
- Listet verworfene Alternativen mit Rationale
- Beschreibt Stale-Index-Edge-Case-Mitigation
2026-06-04 07:47:09 +00:00
Hermes
3f1f0f5788
fix(hooks): use array-based file iteration for safety check
...
Deploy Feature Branch to Test / PHP Syntax Check (push) Successful in 58s
Lint / PHP Syntax Check (push) Successful in 1m0s
Deploy Feature Branch to Test / HTML Lint (htmlhint) (push) Successful in 1m39s
Deploy Feature Branch to Test / CSS Lint (stylelint) (push) Successful in 1m42s
Deploy Feature Branch to Test / Deploy to Test Environment (push) Successful in 23s
Lint / HTML Lint (htmlhint) (push) Successful in 1m16s
Lint / CSS Lint (stylelint) (push) Successful in 1m21s
Lint / PHP Syntax Check (pull_request) Successful in 31s
Lint / CSS Lint (stylelint) (pull_request) Successful in 1m13s
Lint / HTML Lint (htmlhint) (pull_request) Successful in 1m4s
mapfile + array prevents word-splitting issues with filenames
containing spaces or other shell-special characters. Affects both
the affected-files listing and the stale-index safety check.
Without this fix, a filename like 'My Module.php' would be split
into 'My' and 'Module.php', causing the disk-existence check to
look for wrong paths.
2026-06-04 00:15:21 +00:00
Hermes
b0f769d186
feat(hooks): run PHPUnit in pre-commit hook ( #67 )
...
Deploy Feature Branch to Test / PHP Syntax Check (push) Successful in 34s
Lint / PHP Syntax Check (push) Successful in 57s
Deploy Feature Branch to Test / CSS Lint (stylelint) (push) Successful in 1m41s
Deploy Feature Branch to Test / HTML Lint (htmlhint) (push) Successful in 1m39s
Lint / CSS Lint (stylelint) (push) Successful in 1m39s
Lint / HTML Lint (htmlhint) (push) Successful in 1m8s
Deploy Feature Branch to Test / Deploy to Test Environment (push) Successful in 30s
Erweitert den Husky pre-commit-Hook um einen PHPUnit-Schritt.
Ausserdem wird scripts/safe-commit.sh aktualisiert, damit das
Safety-Net dieselbe Logik wie der Hook verwendet (kein doppelter Code).
Vorher: Hook rief nur 'npx lint-staged' auf.
Nachher: Hook ruft scripts/pre-commit-checks.sh auf, das
- lint-staged ausfuehrt (unveraendert)
- PHPUnit nur dann ausfuehrt, wenn PHP-relevante Dateien
gestaged sind (Performance-Optimierung: Issue #67 Anforderung)
- Bei Test-Fehler den Commit mit Exit-Code 1 abbricht
Closes #67
2026-06-03 23:42:31 +00:00
Hermes
85cf4f3b03
chore(hooks): add shared pre-commit-checks script
...
Extrahiert die Pre-Commit-Checks (lint-staged + PHPUnit) in ein
gemeinsames Script, das sowohl vom Husky-Hook (.husky/pre-commit)
als auch von scripts/safe-commit.sh aufgerufen wird.
Logik:
- lint-staged laeuft immer (HTML/CSS/JS/JSON/MD/PHP-Syntax)
- PHPUnit laeuft nur, wenn PHP-relevante Dateien gestaged sind
(*.php, phpunit.xml, composer.json, composer.lock)
- Safety-Check: alle gestaged PHP-Dateien muessen auf Disk existieren
- Bei Test-Fehler wird der Commit mit Exit-Code != 0 abgebrochen
- Composer-Deps werden nur bei Bedarf installiert (Cache-Hit)
2026-06-03 23:42:22 +00:00
Hermes
71adf37762
ci: add PHPUnit pipeline ( #65 )
...
Deploy Feature Branch to Test / PHP Syntax Check (push) Successful in 1m32s
Lint / PHP Syntax Check (push) Successful in 1m32s
Deploy Feature Branch to Test / HTML Lint (htmlhint) (push) Successful in 2m12s
Deploy Feature Branch to Test / CSS Lint (stylelint) (push) Successful in 2m17s
Lint / HTML Lint (htmlhint) (push) Successful in 1m16s
Lint / CSS Lint (stylelint) (push) Successful in 1m19s
PHPUnit / PHP Unit Tests (push) Successful in 42s
Deploy Feature Branch to Test / Deploy to Test Environment (push) Successful in 29s
Lint / PHP Syntax Check (pull_request) Successful in 59s
PHPUnit / PHP Unit Tests (pull_request) Successful in 1m7s
Lint / HTML Lint (htmlhint) (pull_request) Successful in 1m37s
Lint / CSS Lint (stylelint) (pull_request) Successful in 1m41s
Neue Gitea-CI-Pipeline analog zur bestehenden lint.yml:
- Trigger auf push und pull_request
- Installiert PHP + Composer + Extensions (xml, mbstring)
- Fuehrt 'composer install' und 'vendor/bin/phpunit' aus
- 18 Tests / 31 Assertions gruen
2026-06-03 23:36:04 +00:00