Changelog

Version history

294 total updates.

0.8.45 2026-09-12

- Footer version fix: Footer was showing v0.8.43 while the latest changelog entry was v0.8.44. Corrected to v0.8.44 to match. - Changed: `app/views/layout.php`, `CHANGELOG.md`

0.8.44 2026-09-12

- Footer version fix: Footer was showing v0.8.41 while the latest changelog entry was v0.8.43. Corrected to v0.8.43 to match. - Moderation pass: 1 clear AI listing approved (AI For Developers — curated AI coding tools directory); 3 non-AI rejected (VSCO — photo/video editing app, Replai — browser games platform, ZoomInfo — B2B sales intelligence).

0.8.43 2026-09-12

- moderation_sweep.py: scan both pending and promoted-pending statuses: The discovery spider pipeline writes `promotion_status='promoted-pending'` but the moderation scan was only querying `promotion_status='pending'`, missing all spider-intake candidates. Now scans both statuses with `IN (%s, %s)`. Also changed the default `--status` flag from `pending` to `promoted-pending` so the script defaults to the spider-intake queue rather than the legacy manual-submission queue. 15 clear AI listings approved this pass (Gopher, Vicuna-13B, Algolia, Veo, Adext AI, udio.com, aiva.ai, Kling, Muzic, Magenta.js, songaifarm, Gemini, Everlyn.AI, HiveMind, LLM SEO Trends). - Changed: `cron/moderation_sweep.py`, `CHANGELOG.md`

0.8.42 2026-09-11

- promote_staged_candidates.py: pipeline status consistency fix: The discovery spider and promote scripts set `promotion_status='promoted-pending'` but `promote_staged_candidates.py` Stage 3 was only looking for `'pending'`, leaving high-confidence items stranded in `promoted-pending` indefinitely. Fixed Stages 1 and 2 to write `'promoted-pending'` (matching spider output) and Stage 3 to read from both `'promoted-pending'` and `'pending'` for backward compatibility. Also manually promoted 5 stranded high-confidence items (KIN Family Calendar conf=98, HyperFrames conf=95, Relyable conf=93, AI KAT conf=90, Migma conf=90) directly to approved listings. - Changed: `cron/promote_staged_candidates.py`, `CHANGELOG.md`

0.8.41 2026-09-11

- 404 page now shows the attempted URL: The not-found page now displays the path that was requested (e.g. `/nonexistent`), making it easier for users to detect and report broken links or typos rather than assuming the directory is missing content. - Changed: `index.php`, `app/views/not-found.php`, `CHANGELOG.md`

0.8.40 2026-09-10

- promote_staged_candidates.py: Stage 2 for taxonomy-assigned low-confidence items: 115 staged discoveries were stuck with valid taxonomy but confidence scores below the 60-point promote threshold (mostly 17–36). Added Stage 2 (threshold 20): items with valid taxonomy and confidence ≥20 now flow to `pending` for human moderation review, unblocking the backlog. 5 new AI listings approved (Ideogram, Phind, modyfi, Lensa, Refinder AI); 9 non-AI or off-topic entries rejected; 95 pending remain for human review. - Changed: `cron/promote_staged_candidates.py`, `CHANGELOG.md`

0.8.39 2026-09-10

- Footer version bump: Footer still showed `v0.8.32` after 5 version bumps since Sep 4 (v0.8.33–v0.8.38). Updated to `v0.8.38` to match the latest changelog entry. - Changed: `app/views/layout.php`, `CHANGELOG.md`

0.8.38 2026-09-10

- moderation_sweep.py column name fix + backfill_taxonomy.py utility: Fixed the discovered_listings UPDATE query in `moderation_sweep.py` — it was writing to `moderator_notes` but the column is `discovery_notes`. Also added `cron/backfill_taxonomy.py`, a safe one-shot utility that assigns `taxonomy_category_slug`/`taxonomy_subcategory_slug` to pending discovered_listings entries that lack taxonomy, using source and name-based rules. 4 AI listings approved this pass (audiocraft/Meta, DevSwat, DALL·E 3, Awesome AI Models); 1 duplicate rejected. - Changed: `cron/moderation_sweep.py`, `cron/backfill_taxonomy.py`, `CHANGELOG.md`

0.8.37 2026-09-10

- moderation_sweep.py: scan discovered_listings not listings: The pending moderation queue lives in `discovered_listings` (`promotion_status=pending`), not the public `listings` table. The script was querying the wrong table with wrong column names since the Python migration, causing all moderation scans to return empty. Added `--source discovered|public` flag, rewrote the discovered_listings SELECT query with correct column names (`candidate_url`, `confidence_score`, `taxonomy_category_slug`, `taxonomy_subcategory_slug`), and fixed the approve subcommand to INSERT into the listings table with resolved taxonomy. Also fixed the premium_review hint (was flagging 'premium' as default column value; now only flags when pricing is explicitly noted as paid/deprioritized). Moderation queue of 43 pending items is now actionable. 3 clear AI listings approved: NxCode, T3 Code, Syzygy. - Changed: `cron/moderation_sweep.py`, `CHANGELOG.md`

0.8.36 2026-09-07

- promote_staged_candidates.py full pipeline: Extended the script to handle the complete discovery pipeline: (1) staged→pending for confidence ≥60, (2) pending with valid taxonomy→approved listings for confidence ≥90, with duplicate detection and taxonomy resolution. Previously the script could only promote staged→pending; the taxonomy-aware pending→listings step required manual SQL. Script now uses `cursorclass=DictCursor` throughout for consistent dict access. - Changed: `cron/promote_staged_candidates.py`, `CHANGELOG.md`

0.8.35 2026-09-07

- promote_staged_candidates.py syntax fix: Same `password=*` Python syntax error that was fixed in `promote_staged.py` (v0.8.34). Replaced `password=*` with `password=DB_PASS`. Script is now executable. - Changed: `cron/promote_staged_candidates.py`, `CHANGELOG.md`

0.8.34 2026-09-06

- promote_staged.py syntax fix: `cron/promote_staged.py` had `password=*` — a Python syntax error. The variable `DB_PASS` was already defined above it. Replaced with `password=DB_PASS` so the script is now executable and can promote staged spider discoveries to pending. - Changed: `cron/promote_staged.py`, `CHANGELOG.md`

0.8.33 2026-09-04

- robots.txt: stop blocking security.txt: Both `/.well-known/security.txt` and `/security.txt` were listed in Disallow, which hides the site's vulnerability disclosure policy from security researchers — the opposite of what security.txt is for. Removed both entries so crawlers can index the policy file normally. - Changed: `static/robots.txt`, `CHANGELOG.md`

0.8.32 2026-09-03

- Tags page ItemList structured data: `/tags` now emits `ItemList` JSON-LD giving search engines a flat, position-aware list of all tag pages. The homepage, directory listing pages, and version history page already had this structured data; `/tags` was the remaining taxonomy page without it. - Changed: `index.php`, `CHANGELOG.md`

0.8.31 2026-09-03

- .gitignore cleanup: Added `check_pending.py`, `check_staged.py`, and `test_db.py` to `.gitignore` so local diagnostic/debug scripts don't pollute the working tree or get accidentally committed. - Changed: `.gitignore`, `CHANGELOG.md`

0.8.30 2026-09-02

- Python moderation helper: Added `cron/moderation_sweep.py` — a Python CLI alternative to the PHP helper that scans pending listings, fetches live pages, and recommends approve/hold/reject based on AI signal patterns. Unblocks moderation from environments without PHP CLI. - Keyword-tag backfill utility: Added `cron/backfill_keyword_tags.py` — a one-shot utility to extract keyword tags from listing name+description for approved listings that currently lack them. Safe to re-run (ON DUPLICATE KEY UPDATE).

0.8.29 2026-08-31

- Submit page post-submission expectation: Added a brief note above the criteria panel explaining that submissions are reviewed promptly and that ambiguous ones may be held for human review before a decision. This sets expectations for submitters and reduces questions about submission status. - Changed: `app/views/submit.php`, `static/css/style.css`, `CHANGELOG.md`

0.8.28 2026-08-31

- Homepage ItemList structured data: The homepage now emits `ItemList` JSON-LD for the weekly highlights and newest listings sections, giving search engines named, position-aware lists of featured AI-friendly resources. Previously only the directory listing pages had this structured data (v0.8.21); the homepage — the site's most-visited page — was the gap. - Changed: `index.php`, `CHANGELOG.md`

0.8.27 2026-08-31

- About page mission copy: Added "What this directory is", "How it works", "Submission guidelines", and "About the curator" sections to `/about` so visitors understand what the site is, how to use it, what qualifies, and how to reach the curator. Previously `/about` showed only the tagline and stats with no explanatory content. - Changed: `app/views/about.php`, `CHANGELOG.md`

0.8.26 2026-08-30

- Sitemap consistency — removed /submit: `/submit` was in the XML sitemap but also marked `noIndex` in the page controller and disallowed in robots.txt. Search engines were being told to crawl a page that the site itself said not to index. Removed `/submit` from the sitemap static page list so sitemap and robots.txt/noIndex intent are aligned. - Changed: `index.php`, `CHANGELOG.md`