Skip to content

Add TED mirror site - #1

Merged
Raibows merged 5 commits into
aiming-lab:mainfrom
shanjiaming:feat/ted-webharbor
Sep 7, 2026
Merged

Raibows merged 5 commits into
aiming-lab:mainfrom
shanjiaming:feat/ted-webharbor

Conversation

@shanjiaming

@shanjiaming shanjiaming commented May 12, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Adds a TED mirror site with browse, search, topic, playlist, event, auth, account, and saved-talk workflows.
  • Seeds 64 real TED talks with real thumbnails, 7 playlists, 17 event contexts, and 4 benchmark users.
  • Registers TED as the 17th WebHarbor site on port 40016.
  • Addresses review feedback by hiding answer fields on listing cards, tightening search matching, adding near-miss distractors, correcting TEDx cities, and removing unrelated PR noise.

Assets

Verification

  • python3 -m py_compile sites/ted/app.py sites/ted/seed_data.py control_server.py site_runner.py
  • ./scripts/check_assets.sh
  • git diff --check
  • ./scripts/fetch_assets.sh ted
  • ./scripts/build.sh webharbor:ted-final-review
  • Docker run with -p 8401:8101 -p 43000-43016:40000-40016.
  • All ports 43000-43016 returned HTTP 200.
  • TED _health returned {ok: true, site: ted, talks: 64}.
  • TED runtime audit covered listing answer leaks, detail answers, login, profile update, saving talks, event registration, new account flow, /reset/ted, byte-identical DB restore, and /reset-all.
  • Browser audit covered desktop and 390px mobile layouts across home, search, topic, playlist, detail, and events pages with no broken images, no console warnings/errors, and no horizontal overflow.

hqhq1025 referenced this pull request in hqhq1025/WebHarbor May 26, 2026
…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).
hqhq1025 referenced this pull request in hqhq1025/WebHarbor May 27, 2026
…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.
hqhq1025 referenced this pull request in hqhq1025/WebHarbor May 27, 2026
… / 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.
@DEM1TASSE DEM1TASSE mentioned this pull request Jun 20, 2026
6 tasks

@Susan571 Susan571 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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: transcript fields 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. --0 instructs "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.com but 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.

@DEM1TASSE DEM1TASSE mentioned this pull request Jun 23, 2026
9 tasks
@MufanQiu

MufanQiu commented Jul 1, 2026

Copy link
Copy Markdown

Review — ted (PR #1)

Verdict: REQUEST CHANGES.

We deployed the environment locally and ran the full review checklist; every finding below was independently reproduced, and fidelity was checked against the real upstream site.

Issues (summary)

  • BLOCKER: .assets-revision pinned to 'main' but new site's tarball is not on main -> CI fail-closed
  • MINOR: Event-name + title exposed on every talk card leaks the answer for TED--3, TED--6, TED--10
  • MINOR: Thin single-result searches make TED--13 and TED--14 trivially easy
  • MINOR: scored_talks over-matches short substrings; q='AI' returns all 64 talks
  • MINOR: Ambiguous referents in a few task wordings (TED--8 two Debbie Millman talks; TED--2/15 'a/two' loosely specified)
  • NIT: Out-of-scope repo edits bundled in a single-site PR (review-env SKILL.md, agent_demo, CONTRIBUTING, booking image paths)

Mechanical checks: FAIL

The site registration is internally consistent: EXPOSE 8101 40000-40015 (Dockerfile:36), the web field http://localhost:40015/ on all 18 task rows, and ted at index 15 in both websyn_start.sh SITES and control_server.py SITES all agree.

Visual fidelity: PASS

Strong TED.com resemblance across every page. Homepage: red TED wordmark, "Ideas change everything" hero with featured-talk thumbnail, WATCH/TOPICS/PLAYLISTS/ATTEND nav, "Search ideas" box, "Latest talks" card grid (speaker + thumbnail + topic chips), "Popular now" with view counts, "Curated playlists", topic-tag footer; title TED: Ideas change everything.

Functional depth: PASS

All flows verified via Playwright. Login (alice.j@test.com / TestPass123!) → /account (H1 "Alice Johnson"); invalid password rejected ("Invalid email or password"); register auto-logs-in, duplicate email rejected ("already exists").

Task quality: FAIL

18 tasks, all with confirmed DB ground truth; catalog is rich (64 talks, 17 events, 124 topics, 7 playlists) and difficulty distribution meets the bar (≥5 multi-action tasks, ≥2 comparisons).

Required fixes before approval

  1. (BLOCKER) Re-pin .assets-revision from main back to the merged HuggingFace commit SHA that contains sites/ted/ assets, set after HF PR feat(mega): add new site #2 is merged.
  2. (MAJOR) Eliminate the listing-card answer leaks for TED--3, TED--6, TED--10, and TED--5.
  3. (MINOR) Add near-miss distractors so TED--13 (wine) and TED--14 (architecture 3D printing) are not single-result searches with the answer on the only card.
  4. (MINOR) Fix scored_talks (app.py:155-165) to use word-boundary/tokenized matching or require token length ≥ 3 so q=AI no longer matches all 64 talks via the ai substring.
  5. (MINOR) Correct the six TEDx event cities (currently all "Washington, DC") to their real locations (Manchester, Denver, Berlin, etc.) so /events data is faithful.

@shanjiaming
shanjiaming force-pushed the feat/ted-webharbor branch from 8d63a56 to 6945aa5 Compare July 2, 2026 05:14
JeremyJC67 referenced this pull request in JeremyJC67/WebHarbor Jul 4, 2026
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>
Raibows pushed a commit that referenced this pull request Sep 7, 2026
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.
@Raibows
Raibows merged commit e054cea into aiming-lab:main Sep 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants