Skip to content

Files

Latest commit

0f48d98 · May 9, 2026

History

History
78 lines (60 loc) · 5.69 KB

File metadata and controls

78 lines (60 loc) · 5.69 KB

Changelog

All notable changes to this project are documented here. The format is based loosely on Keep a Changelog and the project follows SemVer once it ships to the Chrome Web Store.

[Unreleased] — v1 rebuild in progress

Phase 2-4 implementation handbook (this commit)

Added

  • IMPLEMENTATION.md — step-by-step handbook for Phases 2-4. Locked decisions, code patterns, file paths, acceptance criteria, anti-patterns, and commit cadence. Designed so a less-capable model can execute the work without making bad architectural calls.

Decisions locked in this round

  • Phase 2 default image model: Organika/sdxl-detector at q8. Benchmark deferred to Phase 2.5.
  • Phase 2.5: new explicit phase for the local-image-model benchmark, run after Phase 2 ships and after the maintainer curates a 60-image test set.
  • Phase 3 default text model: Hello-SimpleAI/chatgpt-detector-roberta at q8. Default text confidence threshold raised to 0.70 (vs 0.55 for images) — biases toward "Uncertain" given known false-positive risk.
  • Phase 4 boost-failure behavior: fall back to local model with a visible toast "Boost failed (rate limited) — using local model". Toggleable in Options, default on.
  • Phase 4 rate limiting: client-side, 10 RPM per provider by default, configurable in Options.

Changed

  • ARCHITECTURE.md — added explicit default-models table, quantization choice (q8), backend strategy (device: 'auto'), and boost-failure / rate-limit behavior.
  • ROADMAP.md — Phase 2 cross-references the handbook; new Phase 2.5 section; Phase 3 + 4 reflect the locked defaults.
  • AGENTS.md — points cheaper agents at IMPLEMENTATION.md; added the new locked decisions; updated repo layout for the post-Phase-1 reality.

Docs + Website refresh (previous commit)

Added

  • New Netlify-ready static site under site/ with:
    • site/index.html (product marketing page),
    • site/docs/index.html (documentation hub),
    • site/docs/architecture.html (architecture overview),
    • custom SVG graphics under site/assets/.
  • New root netlify.toml configured to publish site/ with security headers.

Changed

  • Updated README.md with website and docs URLs plus current extension build command (npm run build).

Phase 0 — Cleanup & honest baseline (this commit)

Added

  • ARCHITECTURE.md — source of truth for v1 system design.
  • ROADMAP.md — phase-by-phase plan to Chrome Web Store launch.
  • AGENTS.md — persistent guidance for AI agents working on this repo.
  • This CHANGELOG.md.

Changed

  • Rewrote README.md to honestly describe project state; dropped the unsubstantiated "CLIP zero-shot via Vision Transformers" claim.
  • Rewrote CONTRIBUTING.md for the upcoming TypeScript/Vite stack.
  • Moved icons from repo root to assets/icons/.

Archived (moved to archive/, not deleted)

  • All v0.1 Python "detectors" (simple_ai_detector.py, huggingface_detector.py, google_ai_detector.py, ml_model_example.py, train_model.py, deploy_model.py, test_api.py, setup_api_key.sh, requirements*.txt, .python-version) — none of these were functional AI detectors; the wired-in one was a hash-of-bytes heuristic. See archive/legacy-python/README.md.
  • All v0.1 documentation (docs/, sphinx-docs/, DOCS.md, SETUP_GUIDE.md, netlify.toml) — described a CLIP system that did not exist in code. See archive/legacy-docs/README.md.
  • v0.1 extension files (manifest.json, background.js, content-script.js, content-style.css, popup.{html,js}, options.{html,js}) — kept as a reference for the v1 rewrite. See archive/legacy-extension-v0.1/README.md.

Phase 1 — Build system & extension shell (this commit)

Added

  • Vite 8 + CRXJS 2.4 + React 19 + TypeScript 6 + Tailwind 4 build system.
  • Typed manifest.config.ts — dropped host_permissions: <all_urls>, kept activeTab + scripting + storage + offscreen + contextMenus.
  • src/background/index.ts — service worker with typed message routing, offscreen lifecycle, context menu setup, keyboard shortcut handler.
  • src/offscreen/ — offscreen document stub (Phase 2 will add ONNX session).
  • src/content/index.ts + badges.ts — visible-image discovery, scroll/resize-aware badges, image-to-dataURL via canvas, text-selection toast, timeout handling.
  • src/popup/App.tsx — "Scan visible images" + "Scan selected text" buttons, mock-mode indicator, settings link.
  • src/options/App.tsx — provider radio selector (local / Gemini / OpenAI / HF), API key input, confidence threshold slider, save button.
  • src/shared/types.ts — discriminated-union message bus, ClassificationResult, ExtensionSettings.
  • src/shared/storage.ts — typed chrome.storage.sync wrapper.
  • src/shared/classify-mock.ts — deterministic mock classifier for development.
  • src/detectors/ — router stub + Phase 2/3 placeholder files.
  • tests/unit/classify-mock.test.ts — 5 unit tests, all passing.
  • .github/workflows/ci.yml — GitHub Actions: typecheck + lint + test + build on push/PR.
  • vitest.config.ts, eslint.config.js, tsconfig.json — toolchain configuration.

Result

Extension builds to dist/, loads in Chrome via developer mode, and shows "MOCK" badges on visible images when "Scan visible images" is clicked. All CI checks pass (0 errors, 0 warnings). Ready for Phase 2 (real local image inference).

[0.1.0] — 2025-08-26 (legacy, archived)

Original public release. Plain-JS MV3 extension + localhost Flask server claiming CLIP-based AI detection. The on-page UX was solid; the "ML" was a hash-based placeholder. Preserved verbatim under archive/legacy-extension-v0.1/ and archive/legacy-python/.