Add TED mirror site - #1
Conversation
…real page coverage) Per-site outcomes (data growth + tasks): - allrecipes: recipes 674→1316, tasks 45→161 (+5 new pages: meals/ingredients/cuisines/newsletter/sitemap; /register+/login+/recipe-box POST verified) - amazon: products 743→1506 (Open Library + brand SKUs across 8 categories), tasks 41→155 (+/registry+/sell; /api/cart/update + /order/return real persistence; fixed 9 datetime.utcnow defaults) - apple: products 157→305 (Watch bands, cases, accessories, legacy lineup), trade_in_values 14→54, tasks 43→158 (+9 static pages + /trade-in/quote JSON endpoint with condition multipliers) - arxiv: papers 4079→8692 (35 cats × 3 windows, 3.2s throttle), tasks 43→153 (MEGA-style index reorder + VACUUM applied) - bbc_news: articles 632→1304 (25 BBC sub-feeds), tasks 42→156 (+/privacy+/terms+/cookies+/accessibility) - booking: property 649→1258, city 85→136, landmark 203→329, tasks 44→150 (+/customer-service+/legal+/careers+/press incl. aliases) - cambridge_dictionary: words 3321→7021 (+IPA/audio columns), tasks 43→159 (+/word-of-the-day archive+/wordlists×6+/blog+/about+/help) - coursera: courses 581→1369 (Specializations/Pro-Certs/Guided-Projects/Degrees), tasks 42→160 (+/for-universities+/for-government+/help+/careers+/mobile+/blog) - espn: articles 501→1033, games 316→526, player_stats 228→508, tasks 44→160 (+/about+/press+/careers+/watch; /favorite POST persists) - github: repos 1158→2846 (3 star bands), commits 6850→26422, PRs 0→1500, tasks 41→157 (+Solutions/Enterprise/Docs/API/Status/Blog/Contact/Privacy/Terms stubs) - google_flights: airports 166→365 (OpenFlights full), bookings 12→63, tasks 42→152 (+/about+/help+/privacy+/terms+/trips+ map view) - google_map: places 6872→16706, cities 219→415, reviews 280→1050, photos 140→440, timeline 75→225, tasks 41→156 (+5 new categories incl. chains, +/contribute+/your-data) - google_search: search_results 1170→2744, paa 319→817, topics 213→418, tasks 43→176 (real pagination 10/page × 10 tabs) - huggingface: repos 2276→6941 (datasets +4138), discussions 54→112, tasks 43→158 (+/posts+/solutions+/compete; fixed 12 datetime.utcnow defaults + md5-derived non-randomness) - wolfram_alpha: computation_results 573→1314, topics 61→116, notebook_entries 84→204, topic_feedback 32→67, tasks 46→156 Determinism: every site now applies the full gotchas.md fix set (PINNED bcrypt #1, alpha-sorted indexes + VACUUM #2, MIRROR_REFERENCE_DATE for both seed-loop and Column-default datetime.utcnow aiming-lab#3, md5-derived seeds replacing hash() #2-tail, tie-breaker .id.asc() on top-N aiming-lab#12).
…entries / rewritten 668 tasks
Replaces the failed R4/R5/R6/R10 subagent attempt that had four bugs:
1. Entry chain broken: /images, /videos, /scholar/search were 404 because
no <a href> on index/results pointed to them.
Fix: added Flask routes /images, /videos, /scholar/search (alias of
/scholar/results) plus visible <a href> tabs on base.html, index.html,
search.html, and two new hub templates (r4_image_hub.html,
r5_video_hub.html) with Tools / Usage-rights / Quality / Duration
pivot links. 30/30 GUI-chain sample test now hits the answer in
~10 HTTP GETs per task.
2. Data was synthetic: R4_CARDS / R5_VIDEOS / R10_* were hardcoded
strings ("nasa.gov" placeholders, fabricated channels, fake captions).
Fix: 24 image cards + 24 video cards now seeded from Tavily live
search hits (unsplash / gettyimages / dezeen / wikimedia / iso.500px
/ motionarray / bigcatphotography / stock.adobe / cntraveler /
alamy etc. for images; YouTube + Vimeo + NASA+ + ted.com upstream
URLs with real channel names like 3Blue1Brown / TED-Ed / BBC Earth /
Berliner Philharmoniker / Stefan Forster / Sebastian Lague / NeurIPS
Foundation / Pasta Grammar / Lets Get Rusty / EEVblog for videos).
R6 papers + R10 entities were already real and are preserved.
3. In-memory module dict bypassed byte-id checks: data lived in
_r4_r10_routes.py global lists, never in SQLite.
Fix: added 9 SQLAlchemy tables (ImageCard / VideoCard / ScholarPaper
/ ScholarCitation / FeaturedSnippet / PaaBundle / PaaQuestionRow /
KnowledgePanel / KnowledgePanelFact) populated by seed_r4_r10_tables()
from _real_data.py at seed time only. All runtime route handlers
now query the DB. Double-rebuild md5 still matches:
76eb1cfcc3ee48e27c545e682e0642b9 (instance, instance_seed, /tmp
first-run copy and second-run copy all four identical).
4. Same-句式 batches: 887 old tasks like "Aurora / Lavender / Prague"
shared 100% identical templates.
Fix: new _build_tasks_quality_r4_r10.py with 5 phrasing variants per
field, 7 detail-page answer fields per surface (source / dims /
license / type / alt / source-owner / caption), filter-count tasks,
plus 3-prompt multi-step chains. Result: 668 tasks across 52 groups,
max group size 24 (down from old groups of 12-24 identical-sentence
tasks; nothing exceeds 30). Numeric WebVoyager tasks (3122 of them,
id 0..N) are preserved unchanged.
Verification:
- Real data harvested: 24 image cards (real source domains), 24 video
cards (real upstream URLs), 16 papers, 31 citation edges, 12
snippets, 10 PAA bundles, 32 PAA rows, 8 knowledge panels, 48 facts.
Total 205 rows in 9 new DB tables.
- 30-sample GUI chain test: 30/30 PASS; avg 10 HTTP GETs/task; each
chain starts at "/" -> tab -> hub -> filter/list -> detail.
- Byte-id reset: 4 md5s match (rebuild #1, rebuild #2, instance copy,
instance_seed copy).
- All r-task groups <= 30 (max 24).
- No new /api/, /graphql, /healthz routes added.
- bcrypt hash still pinned, seed users unchanged.
… / real imdb.com)
Brings the IMDb mirror from baseline (25 routes / 18 templates / 18 tasks /
5 POST) to vanilla parity. New content derives from existing real scraped
imdb.com payloads (keywords, cast characters, box-office, akas) — no external
APIs.
New surfaces (33 new HTML templates wiring 36 GET pages):
- Title sub-pages: /trivia /quotes /goofs /awards /parents-guide
/technical-specs /keywords /locations /companies /release-info
/external-sites /connections /photos /soundtrack /faq /episodes
- Name sub-pages: /bio /personal-life /awards /quotes /trivia /photos
/filmography
- Lists: /lists /list/<id> /lists/new /list/<id>/edit
- Polls: /polls /poll/<slug>
- Charts: /chart/popular_tv /chart/lowest_rated
- Other: /news/<id> /search/name /myaccount/recently-viewed
/account/edit /account/password
27 POST endpoints (was 5). New POSTs: submit trivia / quote / goof,
report title / name / review, vote helpful on review, flag review,
delete own review, vote on poll, suggest poll option, list CRUD,
follow/unfollow person, mark watched, edit profile, change password,
clear watchlist / ratings / follows.
12 polls + 8 user lists + 30 list items + 2311 trivia + 1924 quotes +
1297 goofs + seed follows + helpful votes — all deterministic-seeded.
Byte-identical reset invariant: gotchas #1/#2/aiming-lab#3/aiming-lab#12 applied —
fixed-salt pbkdf2 hashes, alpha-sorted index recreation, repacked
title_genre M2M, MIRROR_REFERENCE_DATE everywhere, VACUUM. Two clean
rebuilds produce md5 4ee4fd9c6a687fade6f611fa98609c52.
tasks.jsonl: 2120 tasks across 57 task_types (was 18 tasks). 94% reach
image-bearing surfaces (posters / headshots / photo galleries) — well
above the 40% target. IDs use IMDb--gui_<page>_<NNN>; every task carries
a task_type field.
Note: instance_seed/imdb.db must be re-shipped to the HF dataset and
.assets-revision bumped to the new HF SHA before this lands on main.
Susan571
left a comment
There was a problem hiding this comment.
Reviewer checklist (WebHarbor Review Guide)
Reviewer note: Source-level review (checked out pull/1/head). The mechanical Docker pipeline was not run by me — claims (all 16 ports 200, seed md5 8ba9c3da… byte-identical, /reset-all ~1.1s) are plausible; please re-verify in a Docker-capable pass before merge.
Visual fidelity: ✅ PASS (with note)
- Uses real TED data: 64 real talks with real titles, speakers, events (TED2026/TEDNext 2025/TEDx…), durations, view counts, topics, canonical ted.com URLs, and real compressed thumbnails shipped via the paired HF asset (
static/images/talk_*.jpg). Templates render those real images on cards and detail pages — a real mirror, not a placeholder skin. - Note:
transcriptfields are templated boilerplate ("opens by framing the central tension…"), not real transcripts — acceptable, but don't write tasks that depend on transcript content.
Functional depth: ✅ PASS
- Browse/filter talks (event + max-minutes), topics, playlists, events, search, talk detail (duration/views/topics/related), register, login, save talk with note, remove saved talk, newsletter-topic update, event interest registration. Real auth + multiple CRUD/state flows.
Task quality: ⚠️ Weak pass (18 tasks — meets the count)
- Strong, varied, multi-step:
TED--15(two music talks, which has more views → views appear only on the detail page, so both must be opened, no leak),--8(compare two durations),--10/--3(playlist reasoning),--16(create account → save → confirm),--12(remove a non-AI saved talk). - Mild leak: talk cards show
event - {{minutes}} min, so duration-in-minutes tasks (--0,--2,--8,--11) are partly answerable from the listing.--0instructs "open the talk … what is the duration," so navigation is forced, but consider hiding minutes on cards for duration tasks. - Credentials: tasks reference
alice.j@test.combut generally not the password — better than the other PRs.
Verdict: Comment — approve after minor fixes + mechanical re-verify
(1) Remove/relocate the minutes-on-card leak for duration tasks; (2) a Docker-capable reviewer re-runs build + 200s + byte-identical reset before final merge. This is the strongest of the five environments I reviewed.
Review —
|
8d63a56 to
6945aa5
Compare
Addresses DEM1TASSE follow-up review on PR aiming-lab#53: - #1: 'Drugs & Medications' nav item now links to /drugs (the real drug list) instead of the empty /section/drugs dead page; removed the redundant 'Drugs A-Z' item. One working, correctly-labeled drugs entry. - aiming-lab#2: 'Health Conditions' nav item now links to /conditions (the condition A-Z pages) instead of /section/health-conditions (articles); removed the redundant 'A-Z Conditions' item. Matches task wording (T3/T17). - aiming-lab#4: /history now shows the section name (e.g. 'Health Conditions · Respiratory'), so T14 (section of history articles) is answerable on-page. Added section_names map to the global context. - aiming-lab#5: register 'Full name' is now required (route + form) to match the seeded users which all have one. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Based on #1 (TED mirror by @shanjiaming). Adds the reviewer grading contract and fixes task-definition issues surfaced in review. Verifiers (sites/ted/verify/): verify_lib.py + verify_0..17.py — deterministic-first (nav-evidence + answer match + DB after-state), LLM utilities anchored on frozen ground truth. verifier_path + judge_rubric recorded in tasks.jsonl. Validated: no-op FAILs 18/18, correct solve PASSes 18/18, wrong answers/actions FAIL. Task fixes (sites/ted/tasks.jsonl): - Add demo credentials to account-bound tasks (1/4/7/9/12). - De-shortcut prior-knowledge-answerable tasks: TED--5 -> exact title; TED--17 -> event month (Nov 2025) instead of city (Atlanta). - TED--7: retarget from TED Countdown Summit 2025 (Alice is seed-registered -> no-op) to TED2026.
Summary
Assets
ted.tar.gzsites/ted/instance_seed/ted.dbandsites/ted/static/images/.5fcca409b441876f22b8964ff681be91Verification
python3 -m py_compile sites/ted/app.py sites/ted/seed_data.py control_server.py site_runner.py./scripts/check_assets.shgit diff --check./scripts/fetch_assets.sh ted./scripts/build.sh webharbor:ted-final-review-p 8401:8101 -p 43000-43016:40000-40016._healthreturned{ok: true, site: ted, talks: 64}./reset/ted, byte-identical DB restore, and/reset-all.