Rebrand to MetaScrub + upstream attribution #95

Merged
forgejo_admin merged 2 commits from feat/rebrand-metascrub into master 2026-05-14 06:39:20 +00:00

Follow-up to #93 (Phase G). The "ExifCleaner" name no longer reflects what the project does — v5 strips PDF Info dicts, Office docProps, MP4 atoms, and JPEG/PNG markers, not just EXIF. The "wraps ExifTool" framing died in Phase D; Phase G drove the last nail. This PR renames the user-facing surface to MetaScrub and adds prominent attribution to the szTheory/exifcleaner upstream.

What changed

Brand surfaces renamed:

  • package.jsonname, productName, description (dropped the no-longer-controlled exifcleaner.com author URL)
  • src/web/index.html — page title
  • public/manifest.webmanifest — PWA name / short_name / description
  • .resources/strings.json — unsupported-RAW copy + zip filename template
  • src/infrastructure/web/batch_output.ts — zip filename
  • All user-facing docs (README.md, CLAUDE.md, CHANGELOG.md, docs/architecture.md, docs/PRIVACY_GAPS.md, docs/android-apk.md, docs/animation-principles.md, docs/deploying.md)

Attribution:

  • README lead now carries a "Forked from szTheory/exifcleaner" banner under the title.
  • New ## Credits section at the bottom of the README walks through the lineage v3.6 → v4 (modernization) → v5 Phase A–G (WASM strategies, web-only, Electron retirement) → MetaScrub.
  • CLAUDE.md and docs/architecture.md history note also link to upstream.

localStorage migration (no data loss):

  • New key: metascrub-settings-v1
  • One-time shim reads exifcleaner-settings-v1 on first launch and copies it forward, then clears the legacy key. Existing PWA users keep their toggles. Covered by 4 new tests in tests/renderer/infrastructure/web_api.test.ts.

Stale-URL cleanup bundled in:

  • Replaced all https://github.com/obuvuyoviz26-lab/exifcleaner-web/issues/N links across docs with bare #N refs (Forgejo auto-links these locally; the old GitHub URLs were dead since the May-12 migration).
  • Dropped the in-app HEIC follow-up link — it was hard-coding http://localhost:3000/forgejo_admin/exifcleaner-web/issues/48, which is a private dev URL useless to end users.
  • Cleaned a stale https://exifcleaner.app/ comment in vite.config.web.ts.

Forensic-scanner update:

  • tools/forensic/{png,office}.ts stray-marker regexes now also catch /metascrub/i. The exifcleaner pattern is kept alongside so any pre-rebrand fingerprint regression also fails. See the §"Forensic verification" rationale in format-strategy-workflow.md.

Deliberately NOT renamed

  • Internal identifiers: ExifError type, formatExifError, src/domain/exif/, CSS --ec-* tokens. Not user-facing brand surfaces; renaming would be pervasive cosmetic churn.
  • CHANGELOG.md historical entries: v4.0.0 and earlier entries describe events that happened when the project was named ExifCleaner. Treating them as historical record.
  • docs/superpowers/specs/* and docs/superpowers/plans/*: same rationale — historical snapshots of design / planning work.
  • Cloudflare Pages project name (exifcleaner-web in .github/workflows/deploy-web.yml + the corresponding lines in docs/deploying.md): tied to a live Cloudflare resource. Renaming would orphan the existing deploy URL. Inline comment in deploying.md notes the legacy name + that renaming is a CF-dashboard operation.

Verification

  • yarn lint
  • yarn typecheck
  • yarn test ✓ (318 tests, +4 for the migration shim, all passing)
  • yarn check:deps
  • yarn build:web
  • yarn build:web:standalone

Test plan

  • CI green on the PR
  • After deploy, existing PWA installs see "MetaScrub" name on next launch; settings persist across the rename (migration shim runs on first read)
  • Fresh PWA install shows MetaScrub end-to-end (title, manifest name, zip filenames)
  • Drop an unsupported file → "We don't support {ext}" message no longer points anywhere clickable for HEIC (was leaking localhost URL)

Rollback

Single PR, squash-merge. git revert <merge-sha> restores the ExifCleaner brand. localStorage migration is one-way (legacy key is removed after copy), so a revert would leave new users without their settings on the next visit; existing users who never opened the app between PR merge and revert would be unaffected. Low-impact in practice.

Follow-up to #93 (Phase G). The "ExifCleaner" name no longer reflects what the project does — v5 strips PDF Info dicts, Office docProps, MP4 atoms, and JPEG/PNG markers, not just EXIF. The "wraps ExifTool" framing died in Phase D; Phase G drove the last nail. This PR renames the user-facing surface to **MetaScrub** and adds prominent attribution to the [szTheory/exifcleaner](https://github.com/szTheory/exifcleaner) upstream. ## What changed **Brand surfaces renamed:** - `package.json` — `name`, `productName`, `description` (dropped the no-longer-controlled `exifcleaner.com` author URL) - `src/web/index.html` — page title - `public/manifest.webmanifest` — PWA name / short_name / description - `.resources/strings.json` — unsupported-RAW copy + zip filename template - `src/infrastructure/web/batch_output.ts` — zip filename - All user-facing docs (`README.md`, `CLAUDE.md`, `CHANGELOG.md`, `docs/architecture.md`, `docs/PRIVACY_GAPS.md`, `docs/android-apk.md`, `docs/animation-principles.md`, `docs/deploying.md`) **Attribution:** - README lead now carries a "Forked from [szTheory/exifcleaner](https://github.com/szTheory/exifcleaner)" banner under the title. - New `## Credits` section at the bottom of the README walks through the lineage v3.6 → v4 (modernization) → v5 Phase A–G (WASM strategies, web-only, Electron retirement) → MetaScrub. - `CLAUDE.md` and `docs/architecture.md` history note also link to upstream. **localStorage migration (no data loss):** - New key: `metascrub-settings-v1` - One-time shim reads `exifcleaner-settings-v1` on first launch and copies it forward, then clears the legacy key. Existing PWA users keep their toggles. Covered by 4 new tests in `tests/renderer/infrastructure/web_api.test.ts`. **Stale-URL cleanup bundled in:** - Replaced all `https://github.com/obuvuyoviz26-lab/exifcleaner-web/issues/N` links across docs with bare `#N` refs (Forgejo auto-links these locally; the old GitHub URLs were dead since the May-12 migration). - Dropped the in-app HEIC follow-up link — it was hard-coding `http://localhost:3000/forgejo_admin/exifcleaner-web/issues/48`, which is a private dev URL useless to end users. - Cleaned a stale `https://exifcleaner.app/` comment in `vite.config.web.ts`. **Forensic-scanner update:** - `tools/forensic/{png,office}.ts` stray-marker regexes now also catch `/metascrub/i`. The `exifcleaner` pattern is kept alongside so any pre-rebrand fingerprint regression also fails. See the §"Forensic verification" rationale in `format-strategy-workflow.md`. ## Deliberately NOT renamed - **Internal identifiers**: `ExifError` type, `formatExifError`, `src/domain/exif/`, CSS `--ec-*` tokens. Not user-facing brand surfaces; renaming would be pervasive cosmetic churn. - **CHANGELOG.md historical entries**: v4.0.0 and earlier entries describe events that happened when the project was named ExifCleaner. Treating them as historical record. - **`docs/superpowers/specs/*` and `docs/superpowers/plans/*`**: same rationale — historical snapshots of design / planning work. - **Cloudflare Pages project name** (`exifcleaner-web` in `.github/workflows/deploy-web.yml` + the corresponding lines in `docs/deploying.md`): tied to a live Cloudflare resource. Renaming would orphan the existing deploy URL. Inline comment in deploying.md notes the legacy name + that renaming is a CF-dashboard operation. ## Verification - `yarn lint` ✓ - `yarn typecheck` ✓ - `yarn test` ✓ (318 tests, +4 for the migration shim, all passing) - `yarn check:deps` ✓ - `yarn build:web` ✓ - `yarn build:web:standalone` ✓ ## Test plan - [ ] CI green on the PR - [ ] After deploy, existing PWA installs see "MetaScrub" name on next launch; settings persist across the rename (migration shim runs on first read) - [ ] Fresh PWA install shows MetaScrub end-to-end (title, manifest name, zip filenames) - [ ] Drop an unsupported file → "We don't support {ext}" message no longer points anywhere clickable for HEIC (was leaking localhost URL) ## Rollback Single PR, squash-merge. `git revert <merge-sha>` restores the ExifCleaner brand. localStorage migration is one-way (legacy key is removed after copy), so a revert would leave new users without their settings on the next visit; existing users who never opened the app between PR merge and revert would be unaffected. Low-impact in practice.
forgejo_admin added 1 commit 2026-05-14 05:50:53 +00:00
feat: rebrand to MetaScrub + upstream attribution
Some checks failed
CI / Lint, Typecheck & Unit Tests (pull_request) Successful in 1m15s
CI / E2E (Standalone single-file) (pull_request) Successful in 8m20s
CI / E2E (Web) (pull_request) Failing after 14m27s
656bfc381f
Renames the project from ExifCleaner to MetaScrub to reflect that
coverage has grown well beyond EXIF (PDF Info dicts, Office docProps,
MP4 atoms, JPEG/PNG markers). Adds prominent upstream attribution to
szTheory/exifcleaner in README + CLAUDE.md + architecture.md.

User-facing surfaces renamed:
- package.json (name, productName, description)
- src/web/index.html title
- public/manifest.webmanifest name/short_name/description
- .resources/strings.json (unsupported-RAW copy + zip filename template)
- src/infrastructure/web/batch_output.ts zip filename
- CLAUDE.md, README.md, CHANGELOG.md, docs/architecture.md
- docs/PRIVACY_GAPS.md, docs/android-apk.md, docs/animation-principles.md
- docs/deploying.md (Docker image name, Caddy/nginx placeholders,
  tunnel name — Cloudflare Pages project name kept as exifcleaner-web
  to avoid orphaning the live deploy)

localStorage migration:
- New key: metascrub-settings-v1
- One-time migration shim reads the legacy exifcleaner-settings-v1 key
  on first launch and copies it forward. Test coverage added in
  tests/renderer/infrastructure/web_api.test.ts.

Cleanup bundled in:
- Replace dead obuvuyoviz26-lab/exifcleaner-web/issues/* URLs with
  bare #N refs (Forgejo auto-links these to the local repo).
- Drop the in-app HEIC link to a localhost Forgejo URL — it was leaking
  a private dev URL to end users on the deployed PWA.
- Drop "exifcleaner.com" author URL (project no longer controls it).
- Drop "exifcleaner.app" stale comment in vite.config.web.ts.
- Forensic stray-marker scanners in tools/forensic/{png,office}.ts now
  also match /metascrub/i so a future regression that stamped the new
  brand name into output bytes would fail the recovery battery.

Internal identifiers (ExifError type, formatExifError, src/domain/exif/,
CSS --ec-* tokens) are intentionally kept — they're not user-facing
brand surfaces and renaming them would be cosmetic churn.

Refs #80 (Phase G; this is the post-Phase-G rebrand).
forgejo_admin added 1 commit 2026-05-14 06:14:33 +00:00
fix(rebrand): update e2e zip-filename assertions to MetaScrub
All checks were successful
CI / Lint, Typecheck & Unit Tests (pull_request) Successful in 1m38s
CI / E2E (Standalone single-file) (pull_request) Successful in 5m44s
CI / E2E (Web) (pull_request) Successful in 7m53s
61da5c9f4d
The e2e-standalone CI job failed on PR #95 because two assertions in
tests/e2e/web/file-processing.spec.ts still expected zip downloads
matching `exifcleaner-*-YYYY-MM-DD.zip`. The rebrand commit changed the
zip filename template in src/infrastructure/web/batch_output.ts and
.resources/strings.json but missed the e2e mirror.

Also updates tests/e2e/README.md preamble.

Caught when CI Run #48 e2e-standalone failed at 14m28s post-PR-open;
local `yarn test` (vitest, unit only) had passed. The 318-test unit
suite covers batch_output's zip filename via the batch_output unit
test which was updated alongside the brand rename — the e2e was the
gap.
forgejo_admin merged commit 6779e59efd into master 2026-05-14 06:39:20 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: forgejo_admin/exifcleaner-web#95
No description provided.