From 54a2c4d77b8e9aaf390818d142c6ddc1639063fe Mon Sep 17 00:00:00 2001 From: Builder Date: Tue, 26 May 2026 14:48:20 +0000 Subject: [PATCH 01/17] Add IMDb mirror (port 40015) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds sites/imdb/ — a Flask mirror of imdb.com built per the .claude/skills/ six-phase contributor pipeline (clone-website, design-tasks, evolve-env, harden-env, seed-database). Catalog (scraped from imdb.com via Playwright, gitignored in sites/imdb/scraped_data/; shipped as instance_seed/imdb.db + static/images/ via HF dataset): - 392 titles (Top 250 + Top TV 250 + Most Popular + Box Office) - 3796 persons (cast / crew with real bios + headshots) - 4280 real posters + headshots - 19 canonical IMDb genres Coverage: - 22 routes: homepage / title detail / fullcredits / reviews / rate / watchlist toggle / person detail / scored search / advanced search (genre / year / rating / sort) / 4 charts (Top 250 / Top TV / Most Popular / Box Office) / genre browse / news / auth (login / register / account) - scored token-overlap search (not strict-AND), 18 stop words - 4 benchmark users alice.j / bob.c / carol.d / david.k @ test.com (password TestPass123!) — pre-seeded with 4-item watchlists, 3-5 ratings, one written review each - 12 seeded news items + 12 featured reviews (high helpful-count) across major titles - 18 benchmark tasks in tasks.jsonl across 6 functional areas: chart browse, title detail, person filmography, advanced search, genre browse, user state — including 4 hard tasks (>= 5 steps) and 2 disambiguation tasks (bob's SF/fantasy watchlist subset; carol's crime film subset) Data integrity: - canonical-URL guard skips 65 IMDb-redirected tt_ids (some unknown tt_ids returned the wrong page) - garbage filter skips 1854 names that hit IMDb's 403/ error fallback during concurrent scraping - html.unescape on all string fields; hero h1 preferred over ld.name (which is sometimes original-language) - lowercase substring match for box-office data-testid keys HF asset PR: https://huggingface.co/datasets/ChilleD/WebHarbor/discussions/23 --- Dockerfile | 4 +- README.md | 6 +- control_server.py | 2 +- sites/imdb/_health.py | 3 + sites/imdb/app.py | 722 +++++++++++++++++++ sites/imdb/requirements.txt | 1 + sites/imdb/seed_data.py | 688 ++++++++++++++++++ sites/imdb/static/css/.gitkeep | 0 sites/imdb/static/css/style.css | 236 ++++++ sites/imdb/static/icons/.gitkeep | 0 sites/imdb/static/js/.gitkeep | 0 sites/imdb/tasks.jsonl | 18 + sites/imdb/templates/.gitkeep | 0 sites/imdb/templates/404.html | 7 + sites/imdb/templates/account.html | 12 + sites/imdb/templates/advanced_search.html | 62 ++ sites/imdb/templates/base.html | 68 ++ sites/imdb/templates/chart.html | 35 + sites/imdb/templates/genre_browse.html | 16 + sites/imdb/templates/index.html | 92 +++ sites/imdb/templates/login.html | 12 + sites/imdb/templates/my_ratings.html | 20 + sites/imdb/templates/name_detail.html | 63 ++ sites/imdb/templates/news.html | 19 + sites/imdb/templates/register.html | 12 + sites/imdb/templates/search.html | 46 ++ sites/imdb/templates/title_detail.html | 156 ++++ sites/imdb/templates/title_fullcredits.html | 28 + sites/imdb/templates/title_reviews.html | 37 + sites/imdb/templates/title_write_review.html | 20 + sites/imdb/templates/watchlist.html | 22 + websyn_start.sh | 2 +- 32 files changed, 2402 insertions(+), 7 deletions(-) create mode 100644 sites/imdb/_health.py create mode 100644 sites/imdb/app.py create mode 100644 sites/imdb/requirements.txt create mode 100644 sites/imdb/seed_data.py create mode 100644 sites/imdb/static/css/.gitkeep create mode 100644 sites/imdb/static/css/style.css create mode 100644 sites/imdb/static/icons/.gitkeep create mode 100644 sites/imdb/static/js/.gitkeep create mode 100644 sites/imdb/tasks.jsonl create mode 100644 sites/imdb/templates/.gitkeep create mode 100644 sites/imdb/templates/404.html create mode 100644 sites/imdb/templates/account.html create mode 100644 sites/imdb/templates/advanced_search.html create mode 100644 sites/imdb/templates/base.html create mode 100644 sites/imdb/templates/chart.html create mode 100644 sites/imdb/templates/genre_browse.html create mode 100644 sites/imdb/templates/index.html create mode 100644 sites/imdb/templates/login.html create mode 100644 sites/imdb/templates/my_ratings.html create mode 100644 sites/imdb/templates/name_detail.html create mode 100644 sites/imdb/templates/news.html create mode 100644 sites/imdb/templates/register.html create mode 100644 sites/imdb/templates/search.html create mode 100644 sites/imdb/templates/title_detail.html create mode 100644 sites/imdb/templates/title_fullcredits.html create mode 100644 sites/imdb/templates/title_reviews.html create mode 100644 sites/imdb/templates/title_write_review.html create mode 100644 sites/imdb/templates/watchlist.html diff --git a/Dockerfile b/Dockerfile index 991e5ab6..1e86b1d0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # WebHarbor — slim, self-contained image. -# 15 Flask mirror sites + control plane on :8101. +# 16 Flask mirror sites + control plane on :8101. FROM python:3.12-slim-bookworm @@ -33,6 +33,6 @@ COPY control_server.py /opt/control_server.py COPY site_runner.py /opt/site_runner.py RUN chmod +x /opt/websyn_start.sh -EXPOSE 8101 40000-40014 +EXPOSE 8101 40000-40015 CMD ["/opt/websyn_start.sh"] diff --git a/README.md b/README.md index dce3f934..50943a84 100644 --- a/README.md +++ b/README.md @@ -36,17 +36,17 @@ WebHarbor takes a different approach. We leverage coding agent (e.g., Claude Cod - **Deep features unlocked** — carts, checkouts, accounts, all fully testable - **Evolving** — harder tasks drive richer mirrors; the environment grows with agents - **RL-ready** — sub-second database resets between rollouts -- **Community-driven** — 15 sites today, scaling to 100+ together +- **Community-driven** — 16 sites today, scaling to 100+ together ## 🚀 Quickstart One command to run all web environments: ```bash -docker run -p 8101:8101 -p 40000-40014:40000-40014 battalion7244/webharbor:latest +docker run -p 8101:8101 -p 40000-40015:40000-40015 battalion7244/webharbor:latest ``` -Then point your agent at `http://localhost:40000` through `http://localhost:40014` to explore 15 local mirrors of webvoyager sites: `Allrecipes, Amazon, Apple, ArXiv, BBC News, Booking, GitHub, Google Flights, Google Maps, Google Search, Hugging Face, Wolfram Alpha, Cambridge Dictionary, Coursera, and ESPN`. +Then point your agent at `http://localhost:40000` through `http://localhost:40015` to explore 16 local mirrors of webvoyager sites: `Allrecipes, Amazon, Apple, ArXiv, BBC News, Booking, GitHub, Google Flights, Google Maps, Google Search, Hugging Face, Wolfram Alpha, Cambridge Dictionary, Coursera, ESPN, and IMDb`. For sub-second reset between rollouts, expose the control plane and call `/reset/`: diff --git a/control_server.py b/control_server.py index c255253c..0ae4de44 100644 --- a/control_server.py +++ b/control_server.py @@ -26,7 +26,7 @@ 'allrecipes', 'amazon', 'apple', 'arxiv', 'bbc_news', 'booking', 'github', 'google_flights', 'google_map', 'google_search', 'huggingface', 'wolfram_alpha', 'cambridge_dictionary', - 'coursera', 'espn', + 'coursera', 'espn', 'imdb', ] BASE_PORT = 40000 WEBSYN_DIR = '/opt/WebSyn' diff --git a/sites/imdb/_health.py b/sites/imdb/_health.py new file mode 100644 index 00000000..b21acf55 --- /dev/null +++ b/sites/imdb/_health.py @@ -0,0 +1,3 @@ +"""Per-site health probe (optional, called by control_server).""" +def health(): + return {"ok": True, "site": "imdb"} diff --git a/sites/imdb/app.py b/sites/imdb/app.py new file mode 100644 index 00000000..47424414 --- /dev/null +++ b/sites/imdb/app.py @@ -0,0 +1,722 @@ +"""IMDb mirror — Flask app. + +Phase 1 (clone-website) rewrite: real catalog data from Playwright scraping, +scored token-overlap search, four benchmark users with the canonical +WebHarbor email scheme (alice.j / bob.c / carol.d / david.k). + +Mirrors the public, logged-out + logged-in browsing surface of imdb.com that +matters for web-agent benchmarks: title detail, name detail, search, charts +(Top 250 / Most Popular / Box Office), reviews, ratings, watchlist, news. +""" +import os +import json +import re +from datetime import datetime + +from flask import (Flask, render_template, request, redirect, url_for, + flash, abort, jsonify) +from flask_sqlalchemy import SQLAlchemy +from flask_login import (LoginManager, UserMixin, login_user, logout_user, + login_required, current_user) +from werkzeug.security import generate_password_hash, check_password_hash +from sqlalchemy import func, desc + +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) + +app = Flask(__name__) +app.config['SECRET_KEY'] = 'imdb-mirror-dev-secret' +app.config['SQLALCHEMY_DATABASE_URI'] = ( + f"sqlite:///{os.path.join(BASE_DIR, 'instance', 'imdb.db')}" +) +app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False + +os.makedirs(os.path.join(BASE_DIR, 'instance'), exist_ok=True) + +db = SQLAlchemy(app) +login_manager = LoginManager(app) +login_manager.login_view = 'login' +login_manager.login_message = 'Please sign in to use this feature.' + + +# --------------------------------------------------------------------------- +# Models +# --------------------------------------------------------------------------- + +title_genre = db.Table( + 'title_genre', + db.Column('title_id', db.Integer, db.ForeignKey('titles.id'), primary_key=True), + db.Column('genre_id', db.Integer, db.ForeignKey('genres.id'), primary_key=True), +) + + +class User(db.Model, UserMixin): + __tablename__ = 'users' + id = db.Column(db.Integer, primary_key=True) + email = db.Column(db.String(160), unique=True, nullable=False, index=True) + name = db.Column(db.String(120), nullable=False) + password_hash = db.Column(db.String(255), nullable=False) + created_at = db.Column(db.DateTime, default=datetime.utcnow) + + reviews = db.relationship('Review', backref='user', lazy=True, + cascade='all, delete-orphan') + ratings = db.relationship('UserRating', backref='user', lazy=True, + cascade='all, delete-orphan') + watchlist = db.relationship('WatchlistItem', backref='user', lazy=True, + cascade='all, delete-orphan') + + def set_password(self, pw): + self.password_hash = generate_password_hash(pw) + + def check_password(self, pw): + return check_password_hash(self.password_hash, pw) + + +class Title(db.Model): + __tablename__ = 'titles' + id = db.Column(db.Integer, primary_key=True) + tt_id = db.Column(db.String(20), unique=True, nullable=False, index=True) + title_type = db.Column(db.String(20), nullable=False, default='movie') + primary_title = db.Column(db.String(255), nullable=False, index=True) + original_title = db.Column(db.String(255), default='') + year = db.Column(db.Integer, index=True) + end_year = db.Column(db.Integer) + runtime_min = db.Column(db.Integer) + mpaa_rating = db.Column(db.String(10), default='') + plot_short = db.Column(db.String(500), default='') + plot = db.Column(db.Text, default='') + rating_avg = db.Column(db.Float, default=0.0, index=True) + num_votes = db.Column(db.Integer, default=0) + metascore = db.Column(db.Integer) + popularity_rank = db.Column(db.Integer, index=True) + top_rank = db.Column(db.Integer, index=True) + box_office_us = db.Column(db.BigInteger) + box_office_world = db.Column(db.BigInteger) + box_office_opening = db.Column(db.BigInteger) + budget = db.Column(db.BigInteger) + release_date = db.Column(db.String(20), default='') + country = db.Column(db.String(80), default='') + language = db.Column(db.String(80), default='') + poster_path = db.Column(db.String(255), default='') + taglines_json = db.Column(db.Text, default='[]') + + genres = db.relationship('Genre', secondary=title_genre, backref='titles', + lazy='joined') + credits = db.relationship('Credit', backref='title', lazy=True, + cascade='all, delete-orphan') + reviews = db.relationship('Review', backref='title', lazy=True, + cascade='all, delete-orphan') + + @property + def directors(self): + return [c for c in self.credits if c.role == 'director'] + + @property + def writers(self): + return [c for c in self.credits if c.role == 'writer'] + + @property + def cast(self): + return sorted([c for c in self.credits if c.role == 'actor'], + key=lambda c: c.billing_order or 999) + + def taglines(self): + try: + return json.loads(self.taglines_json or '[]') + except Exception: + return [] + + @property + def search_text(self): + gnames = ' '.join(g.name for g in self.genres) + people = ' '.join(c.person.name for c in self.credits[:8] if c.person) + return ' '.join([ + self.primary_title, self.original_title or '', + str(self.year or ''), gnames, people, self.plot_short or '', + ]).lower() + + +class Person(db.Model): + __tablename__ = 'persons' + id = db.Column(db.Integer, primary_key=True) + nm_id = db.Column(db.String(20), unique=True, nullable=False, index=True) + name = db.Column(db.String(160), nullable=False, index=True) + birth_year = db.Column(db.Integer) + death_year = db.Column(db.Integer) + birth_place = db.Column(db.String(200), default='') + bio = db.Column(db.Text, default='') + primary_profession = db.Column(db.String(200), default='') + photo_path = db.Column(db.String(255), default='') + known_for_json = db.Column(db.Text, default='[]') + + credits = db.relationship('Credit', backref='person', lazy=True) + + def known_for(self): + try: + tt_ids = json.loads(self.known_for_json or '[]') + except Exception: + return [] + return Title.query.filter(Title.tt_id.in_(tt_ids)).all() + + +class Genre(db.Model): + __tablename__ = 'genres' + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(50), unique=True, nullable=False) + slug = db.Column(db.String(50), unique=True, nullable=False, index=True) + + +class Credit(db.Model): + __tablename__ = 'credits' + id = db.Column(db.Integer, primary_key=True) + title_id = db.Column(db.Integer, db.ForeignKey('titles.id'), nullable=False, index=True) + person_id = db.Column(db.Integer, db.ForeignKey('persons.id'), nullable=False, index=True) + role = db.Column(db.String(20), nullable=False) + character = db.Column(db.String(160), default='') + billing_order = db.Column(db.Integer) + + +class Review(db.Model): + __tablename__ = 'reviews' + id = db.Column(db.Integer, primary_key=True) + title_id = db.Column(db.Integer, db.ForeignKey('titles.id'), nullable=False, index=True) + user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False, index=True) + rating = db.Column(db.Integer) + headline = db.Column(db.String(160), nullable=False) + body = db.Column(db.Text, nullable=False) + helpful_count = db.Column(db.Integer, default=0) + created_at = db.Column(db.DateTime, default=datetime.utcnow) + is_seed = db.Column(db.Boolean, default=False) + + +class UserRating(db.Model): + __tablename__ = 'user_ratings' + id = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False, index=True) + title_id = db.Column(db.Integer, db.ForeignKey('titles.id'), nullable=False, index=True) + rating = db.Column(db.Integer, nullable=False) + created_at = db.Column(db.DateTime, default=datetime.utcnow) + __table_args__ = (db.UniqueConstraint('user_id', 'title_id'),) + + +class WatchlistItem(db.Model): + __tablename__ = 'watchlist_items' + id = db.Column(db.Integer, primary_key=True) + user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False, index=True) + title_id = db.Column(db.Integer, db.ForeignKey('titles.id'), nullable=False, index=True) + added_at = db.Column(db.DateTime, default=datetime.utcnow) + __table_args__ = (db.UniqueConstraint('user_id', 'title_id'),) + + +class NewsItem(db.Model): + __tablename__ = 'news_items' + id = db.Column(db.Integer, primary_key=True) + headline = db.Column(db.String(255), nullable=False) + summary = db.Column(db.Text, default='') + source = db.Column(db.String(120), default='') + published_at = db.Column(db.String(40), default='') + category = db.Column(db.String(40), default='') + related_tt = db.Column(db.String(20), default='') + + +@login_manager.user_loader +def load_user(uid): + return db.session.get(User, int(uid)) + + +# --------------------------------------------------------------------------- +# Scored token-overlap search (skill: NEVER strict AND) +# --------------------------------------------------------------------------- + +STOP_WORDS = { + 'the','a','an','in','on','at','to','for','of','and','or','is','it','by', + 'with','this','that','from','about','into','as','be','are','was','were', +} + + +def _tokenize(q): + return [t.lower() for t in re.split(r'\W+', q or '') + if t and len(t) > 1 and t.lower() not in STOP_WORDS] + + +def scored_title_search(query, limit=50): + toks = _tokenize(query) + if not toks: + return [] + rows = Title.query.all() + hits = [] + for t in rows: + text = t.search_text + score = sum(1 for tk in toks if tk in text) + if score: + hits.append((score, -(t.num_votes or 0), t)) + hits.sort(key=lambda x: (-x[0], x[1])) + return [h[2] for h in hits[:limit]] + + +def scored_person_search(query, limit=50): + toks = _tokenize(query) + if not toks: + return [] + rows = Person.query.all() + hits = [] + for p in rows: + name_lc = p.name.lower() + body = (' ' + (p.primary_profession or '') + ' ' + + (p.birth_place or '') + ' ' + (p.bio or '')).lower() + # Name matches weighted 10x; substring of full-name another +5. + score = 0 + for tk in toks: + if tk in name_lc: + score += 10 + if tk in body: + score += 1 + if all(tk in name_lc for tk in toks): + score += 50 # exact full-name superiority + if score: + hits.append((score, name_lc, p)) + hits.sort(key=lambda x: (-x[0], x[1])) + return [h[2] for h in hits[:limit]] + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +def _get_title_or_404(tt_id): + t = Title.query.filter_by(tt_id=tt_id).first() + if not t: + abort(404) + return t + + +def _get_person_or_404(nm_id): + p = Person.query.filter_by(nm_id=nm_id).first() + if not p: + abort(404) + return p + + +def _user_watchlist_ids(): + if not current_user.is_authenticated: + return set() + return {w.title_id for w in current_user.watchlist} + + +def _user_rating(title_id): + if not current_user.is_authenticated: + return None + r = UserRating.query.filter_by(user_id=current_user.id, title_id=title_id).first() + return r.rating if r else None + + +@app.context_processor +def inject_globals(): + return { + 'site_name': 'IMDb', + 'now_year': datetime.utcnow().year, + 'in_watchlist': _user_watchlist_ids(), + } + + +@app.template_filter('money') +def fmt_money(v): + if not v: + return '—' + if v >= 1_000_000_000: + return f'${v/1_000_000_000:.1f}B' + if v >= 1_000_000: + return f'${v/1_000_000:.1f}M' + if v >= 1_000: + return f'${v/1_000:.1f}K' + return f'${v}' + + +@app.template_filter('compact_votes') +def fmt_votes(v): + if not v: + return '0' + if v >= 1_000_000: + return f'{v/1_000_000:.1f}M' + if v >= 1_000: + return f'{v/1_000:.1f}K' + return str(v) + + +# --------------------------------------------------------------------------- +# Routes +# --------------------------------------------------------------------------- + +@app.route('/') +def index(): + top_picks = (Title.query + .filter(Title.top_rank.isnot(None)) + .order_by(Title.top_rank.asc()) + .limit(10).all()) + trending = (Title.query + .filter(Title.popularity_rank.isnot(None)) + .order_by(Title.popularity_rank.asc()) + .limit(8).all()) + in_theaters = (Title.query + .filter(Title.year.in_([2024, 2025, 2026])) + .order_by(desc(Title.year), desc(Title.rating_avg)) + .limit(8).all()) + latest_news = NewsItem.query.order_by(desc(NewsItem.id)).limit(5).all() + return render_template('index.html', + top_picks=top_picks, + trending=trending, + in_theaters=in_theaters, + latest_news=latest_news) + + +@app.route('/title/') +def title_detail(tt_id): + t = _get_title_or_404(tt_id) + cast = t.cast[:15] + featured_reviews = (Review.query + .filter_by(title_id=t.id) + .order_by(desc(Review.is_seed), desc(Review.helpful_count)) + .limit(3).all()) + similar = (Title.query + .join(Title.genres) + .filter(Genre.id.in_([g.id for g in t.genres]), + Title.id != t.id) + .order_by(desc(Title.rating_avg)) + .limit(6).all()) + return render_template('title_detail.html', title=t, cast=cast, + featured_reviews=featured_reviews, + similar=similar, + user_rating=_user_rating(t.id)) + + +@app.route('/title//fullcredits') +def title_fullcredits(tt_id): + t = _get_title_or_404(tt_id) + return render_template('title_fullcredits.html', title=t) + + +@app.route('/title//reviews') +def title_reviews(tt_id): + t = _get_title_or_404(tt_id) + sort = request.args.get('sort', 'helpful') + q = Review.query.filter_by(title_id=t.id) + if sort == 'recent': + q = q.order_by(desc(Review.created_at)) + elif sort == 'rating': + q = q.order_by(desc(Review.rating)) + else: + q = q.order_by(desc(Review.helpful_count)) + return render_template('title_reviews.html', title=t, + reviews=q.all(), sort=sort) + + +@app.route('/title//review', methods=['GET', 'POST']) +@login_required +def title_write_review(tt_id): + t = _get_title_or_404(tt_id) + if request.method == 'POST': + headline = (request.form.get('headline') or '').strip() + body = (request.form.get('body') or '').strip() + rating = request.form.get('rating') + if not headline or not body: + flash('Headline and body are required.', 'error') + return render_template('title_write_review.html', title=t) + r = Review(title_id=t.id, user_id=current_user.id, + headline=headline[:160], body=body, + rating=int(rating) if rating else None) + db.session.add(r) + db.session.commit() + flash('Review posted.', 'success') + return redirect(url_for('title_reviews', tt_id=t.tt_id)) + return render_template('title_write_review.html', title=t) + + +@app.route('/title//rate', methods=['POST']) +@login_required +def title_rate(tt_id): + t = _get_title_or_404(tt_id) + try: + rating = int(request.form['rating']) + except (KeyError, ValueError): + flash('Invalid rating.', 'error') + return redirect(url_for('title_detail', tt_id=t.tt_id)) + if not 1 <= rating <= 10: + flash('Rating must be 1-10.', 'error') + return redirect(url_for('title_detail', tt_id=t.tt_id)) + existing = UserRating.query.filter_by(user_id=current_user.id, title_id=t.id).first() + if existing: + existing.rating = rating + else: + db.session.add(UserRating(user_id=current_user.id, title_id=t.id, rating=rating)) + db.session.commit() + flash(f'Rated {rating}/10.', 'success') + return redirect(url_for('title_detail', tt_id=t.tt_id)) + + +@app.route('/title//watchlist', methods=['POST']) +@login_required +def title_watchlist_toggle(tt_id): + t = _get_title_or_404(tt_id) + existing = WatchlistItem.query.filter_by(user_id=current_user.id, + title_id=t.id).first() + if existing: + db.session.delete(existing) + flash('Removed from Watchlist.', 'info') + else: + db.session.add(WatchlistItem(user_id=current_user.id, title_id=t.id)) + flash('Added to Watchlist.', 'success') + db.session.commit() + return redirect(request.referrer or url_for('title_detail', tt_id=t.tt_id)) + + +@app.route('/name/') +def name_detail(nm_id): + p = _get_person_or_404(nm_id) + grouped = {'director': [], 'writer': [], 'actor': [], 'producer': [], 'composer': []} + for c in p.credits: + grouped.setdefault(c.role, []).append(c) + for k in grouped: + grouped[k].sort(key=lambda c: -(c.title.year or 0)) + return render_template('name_detail.html', person=p, grouped=grouped, + known_for=p.known_for()) + + +# Canonical IMDb search URL is /find?q= (URL realism, per WebHarbor doc). +# /search?q= remains as a WebHarbor convention alias. +@app.route('/find') +@app.route('/find/') +@app.route('/search') +def search(): + q = (request.args.get('q') or '').strip() + kind = request.args.get('s', 'all') + titles, people = [], [] + if q: + if kind in ('all', 'tt'): + titles = scored_title_search(q, limit=50) + if kind in ('all', 'nm'): + people = scored_person_search(q, limit=50) + return render_template('search.html', q=q, kind=kind, + titles=titles, people=people) + + +@app.route('/search/title') +def advanced_title_search(): + q = request.args + query = Title.query + selected_genres = q.getlist('genre') + title_type = q.get('title_type', '') + year_from = q.get('year_from', type=int) + year_to = q.get('year_to', type=int) + rating_min = q.get('rating_min', type=float) + sort = q.get('sort', 'popularity') + if title_type: + query = query.filter(Title.title_type == title_type) + if year_from: + query = query.filter(Title.year >= year_from) + if year_to: + query = query.filter(Title.year <= year_to) + if rating_min: + query = query.filter(Title.rating_avg >= rating_min) + if selected_genres: + query = (query.join(Title.genres) + .filter(Genre.slug.in_(selected_genres)) + .group_by(Title.id) + .having(func.count(Genre.id) == len(selected_genres))) + if sort == 'rating': + query = query.order_by(desc(Title.rating_avg)) + elif sort == 'votes': + query = query.order_by(desc(Title.num_votes)) + elif sort == 'year': + query = query.order_by(desc(Title.year)) + elif sort == 'box_office': + query = query.order_by(desc(Title.box_office_world)) + else: + query = query.order_by(Title.popularity_rank.asc().nulls_last()) + results = query.limit(100).all() + all_genres = Genre.query.order_by(Genre.name).all() + return render_template('advanced_search.html', + results=results, + all_genres=all_genres, + selected_genres=selected_genres, + title_type=title_type, + year_from=year_from, year_to=year_to, + rating_min=rating_min, sort=sort) + + +@app.route('/chart/top') +def chart_top(): + titles = (Title.query + .filter(Title.title_type == 'movie', Title.top_rank.isnot(None)) + .order_by(Title.top_rank.asc()) + .all()) + return render_template('chart.html', titles=titles, + chart_name='IMDb Top 250 Movies', + chart_slug='top', + description='As rated by regular IMDb voters.') + + +@app.route('/chart/toptv') +def chart_toptv(): + titles = (Title.query + .filter(Title.title_type == 'tvSeries', Title.top_rank.isnot(None)) + .order_by(Title.top_rank.asc()) + .all()) + return render_template('chart.html', titles=titles, + chart_name='Top 250 TV Shows', + chart_slug='toptv', + description='Highest-rated TV series of all time.') + + +@app.route('/chart/moviemeter') +def chart_moviemeter(): + titles = (Title.query + .filter(Title.popularity_rank.isnot(None)) + .order_by(Title.popularity_rank.asc()) + .limit(100).all()) + return render_template('chart.html', titles=titles, + chart_name='Most Popular Movies', + chart_slug='moviemeter', + description="IMDb users' most popular page views this week.") + + +@app.route('/chart/boxoffice') +def chart_boxoffice(): + titles = (Title.query + .filter(Title.box_office_us.isnot(None)) + .order_by(desc(Title.box_office_us)) + .limit(50).all()) + return render_template('chart.html', titles=titles, + chart_name='Top Box Office (US)', + chart_slug='boxoffice', + description='Highest US domestic gross.') + + +@app.route('/genre/') +def genre_browse(slug): + g = Genre.query.filter_by(slug=slug).first_or_404() + titles = (Title.query.join(Title.genres) + .filter(Genre.id == g.id) + .order_by(desc(Title.rating_avg)) + .limit(60).all()) + return render_template('genre_browse.html', genre=g, titles=titles) + + +@app.route('/list/watchlist') +@login_required +def my_watchlist(): + items = (WatchlistItem.query + .filter_by(user_id=current_user.id) + .order_by(desc(WatchlistItem.added_at)) + .all()) + titles = [db.session.get(Title, w.title_id) for w in items] + return render_template('watchlist.html', titles=titles) + + +@app.route('/list/ratings') +@login_required +def my_ratings(): + rs = (UserRating.query + .filter_by(user_id=current_user.id) + .order_by(desc(UserRating.created_at)) + .all()) + rows = [(r, db.session.get(Title, r.title_id)) for r in rs] + return render_template('my_ratings.html', rows=rows) + + +@app.route('/news') +def news_list(): + items = NewsItem.query.order_by(desc(NewsItem.id)).all() + return render_template('news.html', items=items) + + +@app.route('/register', methods=['GET', 'POST']) +def register(): + if current_user.is_authenticated: + return redirect(url_for('index')) + if request.method == 'POST': + email = (request.form.get('email') or '').strip().lower() + name = (request.form.get('name') or '').strip() + pw = request.form.get('password') or '' + if not email or not name or len(pw) < 6: + flash('Email, name and a 6+ character password are required.', 'error') + return render_template('register.html') + if User.query.filter_by(email=email).first(): + flash('Account with that email already exists.', 'error') + return render_template('register.html') + u = User(email=email, name=name) + u.set_password(pw) + db.session.add(u) + db.session.commit() + login_user(u) + flash('Welcome to IMDb.', 'success') + return redirect(url_for('index')) + return render_template('register.html') + + +@app.route('/login', methods=['GET', 'POST']) +def login(): + if current_user.is_authenticated: + return redirect(url_for('index')) + if request.method == 'POST': + email = (request.form.get('email') or '').strip().lower() + pw = request.form.get('password') or '' + u = User.query.filter_by(email=email).first() + if not u or not u.check_password(pw): + flash('Invalid email or password.', 'error') + return render_template('login.html') + login_user(u) + flash(f'Welcome back, {u.name}.', 'success') + return redirect(url_for('index')) + return render_template('login.html') + + +@app.route('/logout') +@login_required +def logout(): + logout_user() + flash('Signed out.', 'info') + return redirect(url_for('index')) + + +@app.route('/account') +@login_required +def account(): + review_count = Review.query.filter_by(user_id=current_user.id).count() + rating_count = UserRating.query.filter_by(user_id=current_user.id).count() + watch_count = WatchlistItem.query.filter_by(user_id=current_user.id).count() + return render_template('account.html', + review_count=review_count, + rating_count=rating_count, + watch_count=watch_count) + + +@app.errorhandler(404) +def not_found(e): + return render_template('404.html'), 404 + + +@app.route('/_health') +def health(): + return jsonify({'ok': True, 'site': 'imdb', + 'titles': Title.query.count(), + 'persons': Person.query.count(), + 'users': User.query.count()}) + + +# --------------------------------------------------------------------------- +# Bootstrap +# --------------------------------------------------------------------------- + +def _bootstrap(): + with app.app_context(): + db.create_all() + from seed_data import seed_all + seed_all(db, Title, Person, Genre, Credit, Review, UserRating, + WatchlistItem, User, NewsItem) + + +_bootstrap() + + +if __name__ == '__main__': + port = int(os.environ.get('PORT', 5000)) + app.run(host='0.0.0.0', port=port, debug=False) diff --git a/sites/imdb/requirements.txt b/sites/imdb/requirements.txt new file mode 100644 index 00000000..e3e9a71d --- /dev/null +++ b/sites/imdb/requirements.txt @@ -0,0 +1 @@ +Flask diff --git a/sites/imdb/seed_data.py b/sites/imdb/seed_data.py new file mode 100644 index 00000000..c4f6e2fe --- /dev/null +++ b/sites/imdb/seed_data.py @@ -0,0 +1,688 @@ +"""IMDb mirror seed data — loads from scraped_data/*.json. + +Phase 1 (clone-website) loader. Pulls real catalog from Playwright recon: + scraped_data/chart_top.json — Top 250 ordered list + scraped_data/chart_toptv.json + scraped_data/chart_moviemeter.json + scraped_data/chart_boxoffice.json + scraped_data/title_.json — per-title detail + scraped_data/name_.json — per-person detail + +Outputs into the SQLAlchemy DB: + - 18 canonical Genre rows (skill recommends 5-15 categories; IMDb has 18) + - All scraped Title rows (typed movie / tvSeries) + - All scraped Person rows linked via Credit + - 4 benchmark users (alice.j / bob.c / carol.d / david.k @ test.com, + password TestPass123! — skill convention) + - Per-user seeded watchlist (4) / ratings (4-6) / one review + - Curated featured reviews per major title + +Idempotent: returns immediately if titles already populated. +Image files are referenced as `static/images/.jpg` etc. — they live +under `static/images/` (HF-managed in the WebHarbor pipeline). + +Data integrity safeguards (added after diagnosing scraper output): + - html.unescape on all string fields (IMDb ld.name emits ' etc.) + - prefer hero h1 (stripped) over ld.name (ld.name is in original language) + - canonical-URL guard: skip JSON whose ld.url tt_id != filename tt_id + (IMDb sometimes redirects an unknown tt_id to a different page; without + this guard, BENCH_USERS' Spirited Away (tt0245429) silently became + Psycho because IMDb returned the wrong page) + - case-insensitive substring match on box-office detail keys +""" +import html +import json +import re +import shutil +from datetime import datetime +from pathlib import Path + +BASE_DIR = Path(__file__).resolve().parent +SCRAPED = BASE_DIR / 'scraped_data' +STATIC_IMG = BASE_DIR / 'static' / 'images' +STATIC_IMG.mkdir(parents=True, exist_ok=True) + +# Pin reference date so any "today/latest" rendering is stable per skill. +MIRROR_REFERENCE_DATE = datetime(2026, 5, 26) + + +# IMDb's 18 standard genre buckets (matches their genre browse pages). +GENRES = [ + ('Action', 'action'), ('Adventure', 'adventure'), ('Animation', 'animation'), + ('Biography', 'biography'), ('Comedy', 'comedy'), ('Crime', 'crime'), + ('Documentary', 'documentary'), ('Drama', 'drama'), ('Family', 'family'), + ('Fantasy', 'fantasy'), ('History', 'history'), ('Horror', 'horror'), + ('Music', 'music'), ('Mystery', 'mystery'), ('Romance', 'romance'), + ('Sci-Fi', 'sci-fi'), ('Thriller', 'thriller'), ('War', 'war'), + ('Western', 'western'), +] +GENRE_ALIAS = { + 'sci-fi': 'Sci-Fi', 'science fiction': 'Sci-Fi', 'science-fiction': 'Sci-Fi', + 'film-noir': 'Mystery', 'film noir': 'Mystery', 'short': 'Drama', + 'reality-tv': 'Documentary', 'talk-show': 'Documentary', 'game-show': 'Family', + 'news': 'Documentary', 'sport': 'Documentary', +} + + +# ------------ helpers ------------------------------------------------------ + +VOTES_RE = re.compile(r'^([\d.]+)\s*([KMB]?)', re.I) + + +def _u(s): + """html.unescape + strip; tolerant of None.""" + if s is None: + return '' + return html.unescape(str(s)).strip() + + +def _parse_votes(s): + """'3.2M' / '780K' / '12,345' → int.""" + if not s: + return 0 + s = s.strip().replace(',', '') + m = VOTES_RE.match(s) + if not m: + return 0 + num = float(m.group(1)) + suf = m.group(2).upper() if m.group(2) else '' + mult = {'K': 1_000, 'M': 1_000_000, 'B': 1_000_000_000}.get(suf, 1) + return int(num * mult) + + +def _parse_money(s): + """'$28,341,469 | bo_cumulativeworldwidegross | ...' → 28341469.""" + if not s: + return None + m = re.search(r'\$([\d,]+)', s) + if not m: + return None + try: + return int(m.group(1).replace(',', '')) + except ValueError: + return None + + +def _find_money(details, *needles): + """Look up detail value by case-insensitive substring of key. + + IMDb's data-testid keys are lowercase (bo_grossdomestic, + bo_cumulativeworldwidegross, bo_openingweekenddomestic). Earlier camelCase + lookups missed every entry, producing the all-zero box-office bug. + """ + if not details: + return None + lc = {k.lower(): v for k, v in details.items()} + for n in needles: + n_lc = n.lower() + for k, v in lc.items(): + if n_lc in k: + return _parse_money(v) + return None + + +DURATION_RE = re.compile(r'PT(?:(\d+)H)?(?:(\d+)M)?') + + +def _parse_duration(s): + if not s: + return None + m = DURATION_RE.match(s) + if not m: + return None + h = int(m.group(1) or 0) + mins = int(m.group(2) or 0) + return h * 60 + mins or None + + +YEAR_PAREN_RE = re.compile(r'\((\d{4})(?:[-–](\d{4})?)?\)') +DISAMBIG_RE = re.compile(r'\([IVX]+\)') # IMDb same-name suffix: (I), (II), (III), ... + + +def _h1_year(h1): + """'Inception(2010)' → 2010 ; '12 Angry Men(1957)' → 1957""" + m = YEAR_PAREN_RE.search(h1 or '') + if m: + try: + return int(m.group(1)), (int(m.group(2)) if m.group(2) else None) + except ValueError: + pass + return None, None + + +def _strip_year(h1): + s = YEAR_PAREN_RE.sub('', h1 or '') + s = DISAMBIG_RE.sub('', s) + return _u(s) + + +TT_FROM_URL = re.compile(r'/title/(tt\d+)') + + +def _ld_tt_id(ld): + if not ld: + return None + u = ld.get('url') or '' + m = TT_FROM_URL.search(u) + return m.group(1) if m else None + + +def _normalize_genre(name, name_to_genre): + key = (name or '').strip() + if not key: + return None + if key in name_to_genre: + return name_to_genre[key] + lo = key.lower() + canon = GENRE_ALIAS.get(lo) + if canon and canon in name_to_genre: + return name_to_genre[canon] + return None + + +def _release_year_from_ld(ld): + dp = (ld or {}).get('datePublished') or '' + m = re.match(r'^(\d{4})', dp) + return int(m.group(1)) if m else None + + +def _country_from_ld(ld): + """countryOfOrigin shape: [{'@type':'Country','name':'United States'}]""" + coo = (ld or {}).get('countryOfOrigin') or (ld or {}).get('country') + if isinstance(coo, list) and coo: + return coo[0].get('name', '') if isinstance(coo[0], dict) else str(coo[0]) + if isinstance(coo, dict): + return coo.get('name', '') + return '' + + +def _type_from_ld(ld): + t = (ld or {}).get('@type', '') + if t == 'TVSeries': + return 'tvSeries' + return 'movie' + + +def _copy_image(src_name, dst_name): + """Copy scraped image to static/images/. Returns relative path or ''.""" + src = SCRAPED / 'images' / src_name + if not src.exists() or src.stat().st_size == 0: + return '' + dst = STATIC_IMG / dst_name + if not dst.exists() or dst.stat().st_size != src.stat().st_size: + shutil.copy2(src, dst) + return dst_name + + +# ------------ chart rank map ---------------------------------------------- + +def _load_charts(): + """Return (top_rank, popularity_rank, box_office_us, top_tv_rank) dicts.""" + top_rank, pop_rank, top_tv_rank = {}, {}, {} + bo_us = {} + for chart, fname in [ + ('top', 'chart_top.json'), + ('toptv', 'chart_toptv.json'), + ('moviemeter', 'chart_moviemeter.json'), + ('boxoffice', 'chart_boxoffice.json'), + ]: + f = SCRAPED / fname + if not f.exists(): + continue + rows = json.loads(f.read_text()) + for i, r in enumerate(rows, start=1): + tt = r.get('tt_id') + if not tt: + continue + if chart == 'top': + top_rank[tt] = i + elif chart == 'toptv': + top_tv_rank[tt] = i + elif chart == 'moviemeter': + pop_rank[tt] = i + elif chart == 'boxoffice': + # box office chart rows have rating_str format too, + # but no money there; money comes from per-title details. + pass + return top_rank, top_tv_rank, pop_rank, bo_us + + +# ------------ benchmark users (skill canonical) --------------------------- + +USERS_SPEC = [ + {'email': 'alice.j@test.com', 'name': 'Alice Johnson', + 'password': 'TestPass123!'}, + {'email': 'bob.c@test.com', 'name': 'Bob Chen', + 'password': 'TestPass123!'}, + {'email': 'carol.d@test.com', 'name': 'Carol Davis', + 'password': 'TestPass123!'}, + {'email': 'david.k@test.com', 'name': 'David Kim', + 'password': 'TestPass123!'}, +] + + +# Featured (seeded) reviews. Headlines avoid leaking title-level facts that +# tasks may ask about (no "Best Picture 1994", no "Box office champion"). +SEED_REVIEWS = [ + # high-helpful reviews on the most-trafficked titles + ('tt0111161', 'CinemaPilgrim', + 'A timeless meditation on hope', + 'Frank Darabont turns the Stephen King novella into a slow-burning hymn to friendship. The performances feel lived-in; the cinematography stays out of the way. Watch it twice — the second viewing is even better.', + 10, 2413), + ('tt0111161', 'CelluloidDad', + 'Why this one stays at the top', + 'No special effects. No twist endings. Just two prisoners and a quiet question about whether anyone can be remade. Survives on craft alone.', + 10, 1902), + ('tt0068646', 'NewWaveFan', + 'The blueprint for the modern crime epic', + 'Every modern crime drama lives in the shadow of this 1972 work. The slow gathering of menace, the cool jazz strings, the wedding day staged like a state funeral — it has not been bettered.', + 10, 3120), + ('tt0468569', 'GothamFan', + 'A villain performance for the record books', + 'Forget the cape. The interrogation room scenes are some of the finest acting put to film in the 2000s. The realist Gotham makes every other comic-book movie look frivolous.', + 10, 4002), + ('tt1375666', 'DreamArchitect', + 'A summer blockbuster that asks you to keep up', + 'Five-tiered nested heist, an emotional core that earns its sentiment, and an ending that has fueled bar arguments for fifteen years now.', + 9, 1551), + ('tt0816692', 'DustBowlPilot', + 'Cosmic in the best sense', + 'Wears its Kubrick on its sleeve and earns the comparison. The docking sequence is the most exhilarating five minutes of the decade.', + 10, 1802), + ('tt0110912', 'ReservoirDad', + 'Pulp, defined', + 'Three years before the Coen brothers found their groove, Tarantino weaponized non-linear narrative for the mainstream. The diner conversation is still a master class.', + 10, 2287), + ('tt0167260', 'HobbitForever', + 'A trilogy ends in glory', + 'Twelve Academy Awards for a reason. Every character earns a quiet send-off, and the final harbour scene is the kind of farewell most franchises never figure out.', + 10, 1980), + ('tt0903747', 'AlbuquerqueDealer', + 'Television\'s greatest pivot', + 'A show that began as a quirky drama about a chemistry teacher with cancer ended as a Greek tragedy of a man who became his own worst fear. Cranston\'s arc has no equal on TV.', + 10, 3500), + ('tt0944947', 'IronThroneWatcher', + 'Eight seasons of grandeur and one of fumble', + 'For seven seasons, the gold standard of TV fantasy. The rushed final season cost it the crown but the first half remains required viewing.', + 8, 1320), + ('tt15398776', 'AtomicFilmgoer', + 'Three hours of conversation, not a minute wasted', + 'Mostly dialogue, mostly close-up. Murphy is hauntingly internal; the Trinity sequence is craft beyond superlative. Worth the IMAX premium.', + 10, 1710), + ('tt6751668', 'GenreNomad', + 'A class study in three acts', + 'Bong pivots from satire to thriller to tragedy without missing a beat. The first non-English Best Picture winner — every frame earned.', + 10, 1408), +] + + +# Watchlists / ratings / reviews per benchmark user. +# Picked to ensure disambiguation tasks: alice's watchlist has 4 items, +# carol's ratings span 5+ titles, etc. +USER_STATE = { + 'alice.j@test.com': { + 'watchlist': ['tt0111161', 'tt0468569', 'tt6751668', 'tt0816692'], + 'ratings': [('tt0111161', 10), ('tt0068646', 10), ('tt0468569', 9), + ('tt1375666', 9)], + 'reviews': [ + ('tt0816692', 'Cosmic in the best sense', + 'A film that wears its Kubrick on its sleeve and earns the comparison. The docking sequence alone is worth the IMAX premium.', 10), + ], + }, + 'bob.c@test.com': { + 'watchlist': ['tt0903747', 'tt0944947', 'tt4574334', 'tt0386676'], + 'ratings': [('tt0903747', 10), ('tt0944947', 9), ('tt0386676', 9), + ('tt0167260', 10), ('tt0120737', 10)], + 'reviews': [ + ('tt0386676', 'Comfort TV for the ages', + 'Twenty seasons in and the cold opens still make me laugh out loud.', 9), + ], + }, + 'carol.d@test.com': { + 'watchlist': ['tt0137523', 'tt0099685', 'tt0114369', 'tt0102926'], + 'ratings': [('tt0137523', 9), ('tt0114369', 8), ('tt0102926', 9), + ('tt0110912', 10), ('tt0099685', 9)], + 'reviews': [ + ('tt0137523', 'A movie that grows up with you', + 'Eye-rolling at 16, in love at 22, and at 40 I see it as a tragicomic indictment of consumerism.', 9), + ], + }, + 'david.k@test.com': { + 'watchlist': ['tt0080684', 'tt0078788', 'tt0050083', 'tt0167260'], + 'ratings': [('tt0080684', 10), ('tt0078788', 9), ('tt0050083', 10)], + 'reviews': [], + }, +} + + +# News items (12). related_tt and related_nm both supported. +NEWS = [ + ('Oppenheimer dominates the 96th Academy Awards', + 'Christopher Nolan\'s historical epic took home seven Oscars including Best Picture, Best Director, and Best Actor.', + 'IMDb News', '2024-03-11', 'movie', 'tt15398776'), + ('Stranger Things Season 5 wraps production', + 'The Duffer Brothers confirm filming has finished ahead of the show\'s final season premiere later this year.', + 'IMDb News', '2025-01-08', 'tv', 'tt4574334'), + ('Greta Gerwig signs on to direct Narnia adaptations', + 'After Barbie\'s global success, Gerwig will helm at least two Narnia films for Netflix.', + 'Variety', '2024-09-22', 'movie', 'tt1517268'), + ('Cillian Murphy joins Steve adaptation', + 'Following his Best Actor win, Murphy will star in and produce a Netflix film based on Cormac McCarthy\'s work.', + 'Deadline', '2024-06-30', 'celebrity', 'nm0614165'), + ('Peter Jackson returns to Middle-earth with The Hunt for Gollum', + 'Warner Bros. confirms Andy Serkis will direct with Jackson producing, slated for 2026.', + 'Hollywood Reporter', '2024-05-09', 'movie', 'tt0167260'), + ('Tom Hanks reflects on 30 years of Forrest Gump', + 'In a candid interview, Hanks revisits the making of the iconic 1994 drama.', + 'IndieWire', '2024-07-06', 'celebrity', 'tt0109830'), + ('Bong Joon-ho returns with Mickey 17', + 'The Parasite director\'s sci-fi follow-up starring Robert Pattinson hits theaters in March.', + 'IMDb News', '2025-02-14', 'movie', 'tt6751668'), + ('Robert Downey Jr. cast in Avengers: Doomsday', + 'In a surprise twist, Marvel announces Downey will return as Doctor Doom in 2026.', + 'Marvel Wire', '2024-07-27', 'celebrity', 'nm0000375'), + ('Quentin Tarantino\'s final film delayed', + 'Production on The Movie Critic has been put on hold; Tarantino is reconsidering the project.', + 'Deadline', '2024-04-18', 'movie', 'tt0110912'), + ('Anthony Hopkins begins memoir promotion', + 'The two-time Academy Award winner discusses six decades on screen.', + 'IMDb News', '2024-11-04', 'celebrity', 'nm0000164'), + ('Breaking Bad turns 17', + 'Looking back at how a chemistry teacher became the most quoted antihero on TV.', + 'AV Club', '2025-01-20', 'tv', 'tt0903747'), + ('Planet Earth III tops critic best-of lists', + 'Sir David Attenborough\'s latest series scores a 100 Metascore.', + 'IMDb News', '2024-12-29', 'tv', 'tt5491994'), +] + + +# ----------- main entrypoint ------------------------------------------------- + +def seed_all(db, Title, Person, Genre, Credit, Review, UserRating, + WatchlistItem, User, NewsItem): + """Idempotent. Returns silently if already populated.""" + if db.session.query(Title).count() > 0: + return + + # 1) Genres ------------------------------------------------------------ + name_to_genre = {} + for name, slug in GENRES: + g = Genre(name=name, slug=slug) + db.session.add(g) + name_to_genre[name] = g + db.session.flush() + + # 2) Load chart rank maps --------------------------------------------- + top_rank, top_tv_rank, pop_rank, _ = _load_charts() + + # 3) Persons (load first so credits link cleanly) --------------------- + nm_to_person = {} + skipped_garbage = 0 + for f in sorted(SCRAPED.glob('name_*.json')): + nm_id = f.stem.removeprefix('name_') + try: + d = json.loads(f.read_text()) + except Exception: + continue + h1 = d.get('h1') or '' + # GARBAGE FILTER: IMDb anti-bot rate-limit sometimes serves a 403 + # / Error page. Don't ship those into the DB as real people. + if h1.startswith(('403', 'Error', '404', '502', '503')) or not h1.strip(): + skipped_garbage += 1 + continue + ld = d.get('ld') or {} + # Prefer h1 (stripped of year + (I)/(II) disambig) over ld.name. + name = _strip_year(h1) or _u(ld.get('name')) or '' + if not name: + continue + # birth_year / death_year: prefer ld.birthDate/deathDate, then h1, then born_block. + by = dy = None + bd = (ld.get('birthDate') or '').strip() + dd = (ld.get('deathDate') or '').strip() + if bd[:4].isdigit(): + by = int(bd[:4]) + if dd[:4].isdigit(): + dy = int(dd[:4]) + if not by: + m = YEAR_PAREN_RE.search(h1) + if m: + try: by = int(m.group(1)) + except ValueError: pass + if m and m.group(2): + try: dy = int(m.group(2)) + except ValueError: pass + if not by: + # new scraper produces 'Born\nJuly 30, 1970' + born_block = d.get('born_block') or '' + m = re.search(r'(\d{4})', born_block) + if m: + by = int(m.group(1)) + if not dy: + died_block = d.get('died_block') or '' + m = re.search(r'(\d{4})', died_block) + if m: + dy = int(m.group(1)) + prof = ', '.join(d.get('profession') or []) or _u(ld.get('jobTitle')) + bio = _u(d.get('bio')) or _u(ld.get('description')) + photo_path = _copy_image(f"{nm_id}.jpg", f"{nm_id}.jpg") if (SCRAPED / 'images' / f'{nm_id}.jpg').exists() else '' + known_for = d.get('known_for') or [] + p = Person(nm_id=nm_id, name=name, birth_year=by, death_year=dy, + birth_place='', bio=(bio or '')[:4000], + primary_profession=prof[:200], + photo_path=photo_path, + known_for_json=json.dumps(known_for)) + db.session.add(p) + nm_to_person[nm_id] = p + print(f"[seed] persons loaded={len(nm_to_person)}, garbage_skipped={skipped_garbage}", flush=True) + db.session.flush() + + # 4) Titles + credits -------------------------------------------------- + tt_to_title = {} + redirect_skipped = 0 + for f in sorted(SCRAPED.glob('title_*.json')): + tt_id = f.stem.removeprefix('title_') + try: + d = json.loads(f.read_text()) + except Exception: + continue + # CANONICAL-URL GUARD: IMDb sometimes serves a different title's page + # for an unknown tt_id (Spirited Away → Psycho was observed). Drop any + # scraped file whose ld.url disagrees with its filename. + ld = d.get('ld') or {} + canonical = _ld_tt_id(ld) + if canonical and canonical != tt_id: + redirect_skipped += 1 + continue + if tt_id in tt_to_title: + continue # dedupe + h1 = d.get('h1') or '' + # Prefer h1 (original Japanese ld.name → en h1: 'Parasite' wins). + title_text = _strip_year(h1) or _u(ld.get('name')) or tt_id + year, end_year = _h1_year(h1) + if year is None: + year = _release_year_from_ld(ld) + ttype = _type_from_ld(ld) if ld.get('@type') else 'movie' + runtime = _parse_duration(ld.get('duration', '')) + mpaa = _u(ld.get('contentRating')) + plot = _u(d.get('plot')) or _u(ld.get('description')) + plot_short = _u(d.get('plot_short')) or plot[:300] + rating = d.get('rating') + if rating is None: + agg = ld.get('aggregateRating') or {} + rating = agg.get('ratingValue') + try: + rating = float(rating) if rating is not None else 0.0 + except (TypeError, ValueError): + rating = 0.0 + votes = _parse_votes(d.get('votes')) + if not votes: + agg = ld.get('aggregateRating') or {} + votes = int(agg.get('ratingCount') or 0) + country = _country_from_ld(ld) + language = '' + if ld.get('inLanguage'): + language = ld['inLanguage'] if isinstance(ld['inLanguage'], str) else '' + # box office: lowercase substring match (IMDb data-testid is lowercase) + details = d.get('details') or {} + bo_us = _find_money(details, 'grossdomestic') + bo_ww = _find_money(details, 'cumulativeworldwidegross', 'worldwidegross') + bo_open = _find_money(details, 'openingweekenddomestic', 'openingweekend') + budget = _find_money(details, 'budget') + release_date = '' + if details.get('releasedate'): + release_date = _u(details['releasedate'])[:60] + elif details.get('releaseDate'): + release_date = _u(details['releaseDate'])[:60] + elif ld.get('datePublished'): + release_date = ld['datePublished'] + poster_path = _copy_image(f'{tt_id}.jpg', f'{tt_id}.jpg') if (SCRAPED / 'images' / f'{tt_id}.jpg').exists() else '' + + tagline = _u(d.get('tagline')) + + t = Title( + tt_id=tt_id, title_type=ttype, primary_title=title_text, + year=year, end_year=end_year, runtime_min=runtime, mpaa_rating=mpaa, + plot_short=plot_short[:480], plot=plot, + rating_avg=rating, num_votes=votes, + popularity_rank=pop_rank.get(tt_id), + top_rank=(top_rank.get(tt_id) or top_tv_rank.get(tt_id)), + box_office_us=bo_us, box_office_world=bo_ww, + box_office_opening=bo_open, budget=budget, + release_date=release_date, + country=country[:80], language=language[:80], + poster_path=poster_path, + taglines_json=json.dumps([tagline] if tagline else []), + ) + # Genres from ld.genre (array of strings or single) + g_raw = ld.get('genre') or d.get('genres') or [] + if isinstance(g_raw, str): + g_raw = [g_raw] + seen = set() + for gname in g_raw: + g = _normalize_genre(gname, name_to_genre) + if g is not None and g.id not in seen: + t.genres.append(g) + seen.add(g.id) + db.session.add(t) + tt_to_title[tt_id] = (t, d) + print(f"[seed] redirect_skipped={redirect_skipped}", flush=True) + db.session.flush() + + # 5) Credits ----------------------------------------------------------- + for tt_id, (t, d) in tt_to_title.items(): + seen = set() + # directors / writers / producers from credits dict + for role_key, role in [('director', 'director'), + ('writer', 'writer'), + ('producer', 'producer'), + ('creator', 'writer')]: + for pers in (d.get('credits') or {}).get(role_key) or []: + nm = pers.get('nm_id') + if not nm or (nm, role) in seen: + continue + p = nm_to_person.get(nm) + if p is None: + continue + db.session.add(Credit(title_id=t.id, person_id=p.id, + role=role, character='', billing_order=None)) + seen.add((nm, role)) + # cast + for c in (d.get('cast') or [])[:15]: + nm = c.get('nm_id') + if not nm or (nm, 'actor') in seen: + continue + p = nm_to_person.get(nm) + if p is None: + continue + db.session.add(Credit(title_id=t.id, person_id=p.id, + role='actor', + character=(c.get('character') or '')[:160], + billing_order=c.get('billing'))) + seen.add((nm, 'actor')) + db.session.flush() + + # 5b) Backfill known_for: pick 4 highest-voted titles per person ------ + for nm, p in nm_to_person.items(): + # Skip if scraper already produced ≥3 known_for entries + try: + existing = json.loads(p.known_for_json or '[]') + except Exception: + existing = [] + if len(existing) >= 3: + continue + their = [(c.title.num_votes or 0, c.title.tt_id) for c in p.credits if c.title] + their.sort(reverse=True) + seen, picked = set(), [] + for _, tt in their: + if tt in seen: continue + seen.add(tt); picked.append(tt) + if len(picked) >= 4: break + p.known_for_json = json.dumps(picked) + db.session.flush() + + # 6) Benchmark users --------------------------------------------------- + email_to_user = {} + for spec in USERS_SPEC: + u = User(email=spec['email'], name=spec['name']) + u.set_password(spec['password']) + db.session.add(u) + email_to_user[spec['email']] = u + db.session.flush() + + # 7) Featured review authors ------------------------------------------ + author_users = {} + for _, author, *_ in SEED_REVIEWS: + if author not in author_users: + u = User(email=f'{author.lower()}@imdb-mirror.test', name=author) + u.set_password('seeded-anon-' + author) + db.session.add(u) + author_users[author] = u + db.session.flush() + + # 8) Seeded reviews --------------------------------------------------- + for tt, author, headline, body, rating, helpful in SEED_REVIEWS: + entry = tt_to_title.get(tt) + if not entry: + continue + t = entry[0] + u = author_users[author] + r = Review(title_id=t.id, user_id=u.id, rating=rating, + headline=headline, body=body, helpful_count=helpful, + is_seed=True, + created_at=datetime(2024, 6, 1)) + db.session.add(r) + + # 9) Per-user state --------------------------------------------------- + for email, st in USER_STATE.items(): + u = email_to_user.get(email) + if u is None: + continue + for tt in st['watchlist']: + entry = tt_to_title.get(tt) + if not entry: + continue + db.session.add(WatchlistItem(user_id=u.id, title_id=entry[0].id, + added_at=datetime(2024, 5, 1))) + for tt, score in st['ratings']: + entry = tt_to_title.get(tt) + if not entry: + continue + db.session.add(UserRating(user_id=u.id, title_id=entry[0].id, + rating=score, + created_at=datetime(2024, 5, 5))) + for tt, headline, body, rating in st['reviews']: + entry = tt_to_title.get(tt) + if not entry: + continue + db.session.add(Review(title_id=entry[0].id, user_id=u.id, + rating=rating, headline=headline, body=body, + helpful_count=42, is_seed=False, + created_at=datetime(2024, 5, 10))) + + # 10) News ------------------------------------------------------------ + for headline, summary, source, pub, cat, related in NEWS: + db.session.add(NewsItem(headline=headline, summary=summary, + source=source, published_at=pub, + category=cat, related_tt=related)) + + db.session.commit() diff --git a/sites/imdb/static/css/.gitkeep b/sites/imdb/static/css/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/sites/imdb/static/css/style.css b/sites/imdb/static/css/style.css new file mode 100644 index 00000000..fcd7a7bd --- /dev/null +++ b/sites/imdb/static/css/style.css @@ -0,0 +1,236 @@ +:root { + --imdb-yellow: #f5c518; + --imdb-yellow-dark: #d9ae00; + --imdb-bg: #ffffff; + --imdb-fg: #1a1a1a; + --imdb-fg-muted: #5a5a5a; + --imdb-border: #e3e3e3; + --imdb-panel: #f7f7f7; + --imdb-top-bg: #121212; + --imdb-link: #136cb2; +} + +* { box-sizing: border-box; } + +body { + margin: 0; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + background: var(--imdb-bg); + color: var(--imdb-fg); + line-height: 1.45; +} + +.container { max-width: 1180px; margin: 0 auto; padding: 0 16px; } + +/* topbar */ +.topbar { + background: var(--imdb-top-bg); + color: #fff; + padding: 10px 0; +} +.topbar .nav { display: flex; align-items: center; gap: 18px; } +.brand { + font-weight: 800; font-size: 22px; + background: var(--imdb-yellow); + color: #000; + padding: 4px 10px; + border-radius: 4px; + text-decoration: none; +} +.primary-nav .menu { position: relative; cursor: pointer; padding: 6px 8px; color: #fff; } +.primary-nav .dropdown { + display: none; + position: absolute; top: 100%; left: 0; + background: #fff; color: var(--imdb-fg); + border: 1px solid var(--imdb-border); + padding: 8px 0; min-width: 220px; z-index: 50; +} +.primary-nav .menu:hover .dropdown, +.primary-nav .menu:focus-within .dropdown { display: block; } +.primary-nav .dropdown a { display: block; padding: 6px 14px; text-decoration: none; color: var(--imdb-fg); } +.primary-nav .dropdown a:hover { background: var(--imdb-panel); } + +.search { display: flex; flex: 1; max-width: 600px; gap: 0; } +.search select, .search input, .search button { border: 0; padding: 8px 10px; font-size: 14px; } +.search select { background: var(--imdb-panel); border-radius: 4px 0 0 4px; } +.search input { flex: 1; } +.search button { + background: var(--imdb-yellow); color: #000; font-weight: 700; + cursor: pointer; border-radius: 0 4px 4px 0; +} + +.user-area { display: flex; gap: 14px; } +.user-area a { color: #fff; text-decoration: none; font-weight: 500; } +.user-area a:hover { color: var(--imdb-yellow); } + +/* main */ +main { padding: 22px 0 60px; } +a { color: var(--imdb-link); text-decoration: none; } +a:hover { text-decoration: underline; } +.muted { color: var(--imdb-fg-muted); } +.crumb { display: inline-block; margin-bottom: 8px; } + +h1 { font-size: 28px; margin: 0 0 8px; } +h2 { font-size: 20px; margin: 28px 0 12px; padding-bottom: 4px; border-bottom: 4px solid var(--imdb-yellow); display: inline-block; } +h3 { font-size: 16px; margin: 16px 0 6px; } + +/* flash */ +.flashes { margin-bottom: 12px; } +.flash { padding: 8px 12px; border-radius: 4px; margin-bottom: 6px; font-size: 14px; } +.flash-success { background: #d8f5d0; color: #1a5b1a; } +.flash-error { background: #fde0e0; color: #8b1c1c; } +.flash-info { background: #d8eaf5; color: #1a4767; } + +/* hero / rows */ +.hero { padding: 14px 0 6px; } +.hero h1 { font-size: 32px; } +.hero .lede { color: var(--imdb-fg-muted); font-size: 16px; } + +.row { margin-top: 24px; } +.row-head { display: flex; align-items: center; justify-content: space-between; } +.row-head h2 { border-bottom: 4px solid var(--imdb-yellow); } +.see-all { font-size: 14px; } +.card-grid { + list-style: none; padding: 0; margin: 12px 0 0; + display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); + gap: 14px; +} +.card { + background: var(--imdb-panel); border-radius: 6px; padding: 12px; + position: relative; display: flex; flex-direction: column; +} +.card .rank { font-size: 12px; color: var(--imdb-fg-muted); margin-bottom: 4px; } +.card .poster { width: 100%; aspect-ratio: 2 / 3; object-fit: cover; border-radius: 4px; margin-bottom: 8px; } +.card-title { font-weight: 600; color: var(--imdb-fg); display: block; margin-bottom: 4px; } +.card-meta { color: var(--imdb-fg-muted); font-size: 13px; } +.star { color: var(--imdb-yellow); } +.star.big { font-size: 28px; vertical-align: middle; } +.big { font-size: 26px; font-weight: 700; } +.small { color: var(--imdb-fg-muted); } + +/* title detail */ +.title-detail .title-head { + display: flex; justify-content: space-between; align-items: flex-end; + gap: 16px; margin-bottom: 8px; +} +.title-sub { color: var(--imdb-fg-muted); font-size: 14px; margin-top: 2px; } +.title-poster { float: right; width: 220px; aspect-ratio: 2 / 3; object-fit: cover; border-radius: 6px; margin: 0 0 12px 16px; } +.genre-pills { margin-top: 8px; } +.pill { + display: inline-block; border: 1px solid var(--imdb-border); + border-radius: 999px; padding: 3px 10px; font-size: 12px; + margin: 2px 4px 2px 0; +} +.tagline { font-style: italic; color: var(--imdb-fg-muted); margin: 6px 0 16px; } +.rating-box { text-align: center; } +.rating-label { font-size: 11px; color: var(--imdb-fg-muted); text-transform: uppercase; } +.rating-value { font-weight: 700; } +.rating-votes { font-size: 12px; color: var(--imdb-fg-muted); } +.rank-badge, .popularity-badge { + display: inline-block; background: var(--imdb-yellow); + color: #000; padding: 3px 8px; border-radius: 4px; + font-size: 12px; margin-top: 6px; margin-left: 4px; +} + +.plot, .cast, .boxoffice, .reviews, .user-actions { margin-top: 22px; } +.plot-short { font-weight: 600; } +.plot-full { color: #333; } + +.cast-grid { + list-style: none; padding: 0; + display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); + gap: 10px; +} +.cast-card { background: var(--imdb-panel); padding: 8px 10px; border-radius: 4px; } +.cast-card .character { font-size: 12px; color: var(--imdb-fg-muted); } +.cast-photo { width: 60px; height: 80px; object-fit: cover; border-radius: 4px; margin-right: 8px; float: left; } + +.metadata { display: grid; grid-template-columns: 220px 1fr; gap: 6px 16px; } +.metadata dt { font-weight: 600; } +.metadata dd { margin: 0; } + +.user-actions form, .user-actions a.btn { display: inline-block; margin-right: 8px; } +.rate-form select { margin-left: 4px; } +.btn { + background: var(--imdb-yellow); + color: #000; font-weight: 600; + border: 0; padding: 7px 14px; border-radius: 4px; + cursor: pointer; text-decoration: none; + display: inline-block; +} +.btn:hover { background: var(--imdb-yellow-dark); text-decoration: none; } +.link { background: transparent; border: 0; color: var(--imdb-link); cursor: pointer; padding: 0; font-size: 13px; } +.inline { display: inline; margin-left: 8px; } + +.review-card { + background: var(--imdb-panel); padding: 12px 14px; + border-left: 4px solid var(--imdb-yellow); + margin-bottom: 12px; +} +.review-card header { display: flex; justify-content: space-between; align-items: baseline; } +.review-rating { font-weight: 600; } +.review-foot { color: var(--imdb-fg-muted); font-size: 12px; margin-top: 6px; } +.review-list { list-style: none; padding: 0; } + +/* tables */ +.chart-table, .credits-table { + width: 100%; border-collapse: collapse; margin-top: 8px; +} +.chart-table th, .chart-table td, .credits-table td { + text-align: left; padding: 8px 10px; border-bottom: 1px solid var(--imdb-border); + vertical-align: top; +} +.chart-table th { background: var(--imdb-panel); font-weight: 600; } +.credits-table .year { width: 60px; color: var(--imdb-fg-muted); } +.credits-table .char { color: var(--imdb-fg-muted); } + +/* search + filters */ +.filters { + background: var(--imdb-panel); padding: 14px; + border-radius: 6px; display: grid; + grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 14px; + margin-bottom: 16px; +} +.filters fieldset { + grid-column: 1 / -1; + border: 1px solid var(--imdb-border); padding: 10px; +} +.filters .check { display: inline-block; margin-right: 12px; font-weight: 400; } +.filters label, .form label { display: block; font-weight: 600; font-size: 13px; } +.filters input, .filters select, .form input, .form textarea, .form select { + width: 100%; padding: 6px 8px; font-size: 14px; + border: 1px solid var(--imdb-border); border-radius: 4px; + background: #fff; +} +.form { max-width: 480px; } +.form label { margin-bottom: 10px; } + +/* sort bar */ +.sort-bar { margin: 8px 0 12px; color: var(--imdb-fg-muted); } +.sort-bar a { margin-right: 4px; } +.sort-bar .active { font-weight: 700; color: var(--imdb-fg); } + +.result-list { list-style: none; padding: 0; } +.result-list li { padding: 10px 0; border-bottom: 1px solid var(--imdb-border); } + +/* person */ +.person-head { display: flex; gap: 16px; align-items: flex-start; } +.person-head-left { flex: 1; } +.person-head .person-sub { color: var(--imdb-fg-muted); } +.person-head .person-life { color: var(--imdb-fg-muted); font-size: 13px; } +.person-photo { width: 180px; aspect-ratio: 2 / 3; object-fit: cover; border-radius: 6px; } + +/* news */ +.news-list { list-style: none; padding: 0; } +.news-list li { padding: 12px 0; border-bottom: 1px solid var(--imdb-border); } +.news-meta { color: var(--imdb-fg-muted); font-size: 12px; } + +.account-stats { list-style: none; padding: 0; } +.account-stats li { padding: 6px 0; } + +.footer { + margin-top: 60px; + background: var(--imdb-top-bg); color: #ccc; + padding: 18px 0; font-size: 12px; +} +.footer a { color: var(--imdb-yellow); } diff --git a/sites/imdb/static/icons/.gitkeep b/sites/imdb/static/icons/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/sites/imdb/static/js/.gitkeep b/sites/imdb/static/js/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/sites/imdb/tasks.jsonl b/sites/imdb/tasks.jsonl new file mode 100644 index 00000000..7ae9a5dc --- /dev/null +++ b/sites/imdb/tasks.jsonl @@ -0,0 +1,18 @@ +{"web_name": "IMDb", "id": "IMDb--0", "ques": "Open the IMDb Top 250 movies chart. Which film is ranked #1, and what is its IMDb rating?", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} +{"web_name": "IMDb", "id": "IMDb--1", "ques": "On the IMDb Top 250 chart, identify the third-ranked movie and its release year.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} +{"web_name": "IMDb", "id": "IMDb--2", "ques": "Open the Top Box Office chart on IMDb. Pick the movie ranked first in that chart and report its production budget (visible only on the title's detail page).", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} +{"web_name": "IMDb", "id": "IMDb--3", "ques": "Visit the IMDb page for The Shawshank Redemption (1994). What is its runtime in minutes and its MPAA rating?", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} +{"web_name": "IMDb", "id": "IMDb--4", "ques": "On IMDb, open The Godfather (1972). Who directed it, and what was the film's worldwide gross?", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} +{"web_name": "IMDb", "id": "IMDb--5", "ques": "Visit The Dark Knight (2008) reviews page on IMDb sorted by most helpful. Report the headline and author of the top featured review.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} +{"web_name": "IMDb", "id": "IMDb--6", "ques": "Search IMDb for the name 'Christopher Nolan'. Open his profile and report his professional roles as listed under his name.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} +{"web_name": "IMDb", "id": "IMDb--7", "ques": "Find Christopher Nolan's filmography on IMDb. Among the movies he directed in the database, identify the one with the highest IMDb rating and report its title, release year, and IMDb rating.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} +{"web_name": "IMDb", "id": "IMDb--8", "ques": "Open the IMDb page for The Dark Knight (2008). Who is billed first in the cast, and what character do they play?", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} +{"web_name": "IMDb", "id": "IMDb--9", "ques": "Use IMDb's advanced title search to find Drama movies with an IMDb rating of at least 8.5, sorted by rating. Report the top three titles.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} +{"web_name": "IMDb", "id": "IMDb--10", "ques": "Use IMDb's advanced title search to find Crime movies released between 1990 and 1999 with IMDb rating of at least 8.5, sorted by rating. Open the top result and report its director and its worldwide gross.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} +{"web_name": "IMDb", "id": "IMDb--11", "ques": "Open the advanced title search page on IMDb. How many distinct genre options does the genre filter offer?", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} +{"web_name": "IMDb", "id": "IMDb--12", "ques": "Browse the Crime genre on IMDb. Report the title and year of the highest-rated crime title in the listing.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} +{"web_name": "IMDb", "id": "IMDb--13", "ques": "Open the IMDb News page. Find a story that mentions Christopher Nolan or one of his films and report the headline and publication date.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} +{"web_name": "IMDb", "id": "IMDb--14", "ques": "Compare The Dark Knight (2008) and Inception (2010) on IMDb. Which one has the higher IMDb rating, and which one had the larger worldwide gross?", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} +{"web_name": "IMDb", "id": "IMDb--15", "ques": "Sign in to IMDb as bob.c@test.com (password TestPass123!). Bob's Watchlist contains several TV series, including a few in the science-fiction / fantasy genre. Remove one of the science-fiction / fantasy shows from his Watchlist. The Watchlist holds more than one such show, so ask the user which one to remove before acting.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} +{"web_name": "IMDb", "id": "IMDb--16", "ques": "Sign in to IMDb as carol.d@test.com (password TestPass123!). Carol's Watchlist contains multiple crime films. Pick one of her crime watchlist titles and set her personal IMDb rating for it to 8 out of 10. Since more than one crime title qualifies, ask the user to choose which one before submitting the rating.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} +{"web_name": "IMDb", "id": "IMDb--17", "ques": "Sign in to IMDb as alice.j@test.com (password TestPass123!). Open the page for Interstellar (2014) and submit a written review with the headline 'Brilliant sci-fi epic' along with a 1-10 rating of 10. Confirm afterwards that the new review appears on Interstellar's user reviews page.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} diff --git a/sites/imdb/templates/.gitkeep b/sites/imdb/templates/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/sites/imdb/templates/404.html b/sites/imdb/templates/404.html new file mode 100644 index 00000000..20ae86e8 --- /dev/null +++ b/sites/imdb/templates/404.html @@ -0,0 +1,7 @@ +{% extends 'base.html' %} +{% block title %}404 Not Found - IMDb{% endblock %} +{% block content %} +

404 — Not Found

+

We couldn't find that page in the IMDb mirror.

+

Back to homepage

+{% endblock %} diff --git a/sites/imdb/templates/account.html b/sites/imdb/templates/account.html new file mode 100644 index 00000000..469f0a56 --- /dev/null +++ b/sites/imdb/templates/account.html @@ -0,0 +1,12 @@ +{% extends 'base.html' %} +{% block title %}{{ current_user.name }} - Account{% endblock %} +{% block content %} +

Your account

+

{{ current_user.name }} · {{ current_user.email }}

+ +

Sign out

+{% endblock %} diff --git a/sites/imdb/templates/advanced_search.html b/sites/imdb/templates/advanced_search.html new file mode 100644 index 00000000..4bf2d736 --- /dev/null +++ b/sites/imdb/templates/advanced_search.html @@ -0,0 +1,62 @@ +{% extends 'base.html' %} +{% block title %}Advanced title search - IMDb{% endblock %} +{% block content %} +

Advanced title search

+
+ + + + +
+ Genres (all selected must apply) + {% for g in all_genres %} + + {% endfor %} +
+ + +
+ +

{{ results|length }} result{{ 's' if results|length != 1 }}

+
    + {% for t in results %} +
  1. + {{ t.primary_title }} + + ({{ t.year }}) · + {{ '%.1f'|format(t.rating_avg) }} · + {{ t.num_votes|compact_votes }} votes · + {{ t.runtime_min }}m · + {% for g in t.genres %}{{ g.name }}{{ ', ' if not loop.last }}{% endfor %} + +

    {{ t.plot_short }}

    +
  2. + {% else %} +
  3. No matches. Loosen the filters.
  4. + {% endfor %} +
+{% endblock %} diff --git a/sites/imdb/templates/base.html b/sites/imdb/templates/base.html new file mode 100644 index 00000000..2f4fff7e --- /dev/null +++ b/sites/imdb/templates/base.html @@ -0,0 +1,68 @@ + + + + + {% block title %}{{ site_name }}{% endblock %} + + + + +
+ +
+ +
+ {% with msgs = get_flashed_messages(with_categories=true) %} + {% if msgs %} +
+ {% for cat, msg in msgs %} +
{{ msg }}
+ {% endfor %} +
+ {% endif %} + {% endwith %} + {% block content %}{% endblock %} +
+ +
+
+

IMDb mirror — offline replica for web-agent benchmarks. Data is illustrative only.

+

© 1990–{{ now_year }} IMDb mirror (WebHarbor)

+
+
+ + diff --git a/sites/imdb/templates/chart.html b/sites/imdb/templates/chart.html new file mode 100644 index 00000000..dbd435c1 --- /dev/null +++ b/sites/imdb/templates/chart.html @@ -0,0 +1,35 @@ +{% extends 'base.html' %} +{% block title %}{{ chart_name }} - IMDb{% endblock %} +{% block content %} +
+

{{ chart_name }}

+

{{ description }}

+
+ + + + {% if chart_slug == 'boxoffice' %}{% endif %} + + + + {% for t in titles %} + + + + + + {% if chart_slug == 'boxoffice' %}{% endif %} + + {% endfor %} + +
RankTitleIMDb ratingYearGross (US)
+ {% if chart_slug == 'top' or chart_slug == 'toptv' %}{{ t.top_rank }}{% elif chart_slug == 'moviemeter' %}{{ t.popularity_rank }}{% else %}{{ loop.index }}{% endif %} + + {{ t.primary_title }} + {% if current_user.is_authenticated %} +
+ +
+ {% endif %} +
{{ '%.1f'|format(t.rating_avg) }}{{ t.year }}{{ t.box_office_us|money }}
+{% endblock %} diff --git a/sites/imdb/templates/genre_browse.html b/sites/imdb/templates/genre_browse.html new file mode 100644 index 00000000..4d6e8836 --- /dev/null +++ b/sites/imdb/templates/genre_browse.html @@ -0,0 +1,16 @@ +{% extends 'base.html' %} +{% block title %}{{ genre.name }} movies and TV - IMDb{% endblock %} +{% block content %} +

Browse {{ genre.name }}

+

Top-rated {{ genre.name|lower }} titles in the mirror.

+
    + {% for t in titles %} +
  • + {{ t.primary_title }} + ({{ t.year }}) · + {{ '%.1f'|format(t.rating_avg) }} + +
  • + {% endfor %} +
+{% endblock %} diff --git a/sites/imdb/templates/index.html b/sites/imdb/templates/index.html new file mode 100644 index 00000000..750aceba --- /dev/null +++ b/sites/imdb/templates/index.html @@ -0,0 +1,92 @@ +{% extends 'base.html' %} +{% block content %} + +
+

What to watch

+

Top picks, trending titles, and stories from IMDb editors.

+
+ +
+
+

Top picks for you

+ See the Top 250 › +
+
    + {% for t in top_picks %} +
  • +
    #{{ t.top_rank }}
    + {% if t.poster_path %} + + + + {% endif %} + {{ t.primary_title }} +
    + {{ '%.1f'|format(t.rating_avg) }} + · {{ t.year }} +
    +
  • + {% endfor %} +
+
+ +
+
+

Trending this week

+ Most Popular › +
+
    + {% for t in trending %} +
  • + {% if t.poster_path %} + + + + {% endif %} + {{ t.primary_title }} +
    + {{ '%.1f'|format(t.rating_avg) }} + · {{ t.year }} +
    +
  • + {% endfor %} +
+
+ +{% if in_theaters %} +
+
+

Recently released

+
+
    + {% for t in in_theaters %} +
  • + {{ t.primary_title }} +
    + {{ '%.1f'|format(t.rating_avg) }} + · {{ t.year }} + · {% for g in t.genres %}{{ g.name }}{{ ', ' if not loop.last }}{% endfor %} +
    +
  • + {% endfor %} +
+
+{% endif %} + +
+
+

Latest IMDb news

+ All news › +
+
    + {% for n in latest_news %} +
  • + {{ n.headline }} + — {{ n.source }} · {{ n.published_at }} +

    {{ n.summary }}

    +
  • + {% endfor %} +
+
+ +{% endblock %} diff --git a/sites/imdb/templates/login.html b/sites/imdb/templates/login.html new file mode 100644 index 00000000..1c4df288 --- /dev/null +++ b/sites/imdb/templates/login.html @@ -0,0 +1,12 @@ +{% extends 'base.html' %} +{% block title %}Sign in - IMDb{% endblock %} +{% block content %} +

Sign in

+
+ + + +
+

New here? Create an account.

+

Demo accounts: alice.j@test.com / bob.c@test.com / carol.d@test.com / david.k@test.com — password TestPass123!

+{% endblock %} diff --git a/sites/imdb/templates/my_ratings.html b/sites/imdb/templates/my_ratings.html new file mode 100644 index 00000000..c1ebabad --- /dev/null +++ b/sites/imdb/templates/my_ratings.html @@ -0,0 +1,20 @@ +{% extends 'base.html' %} +{% block title %}Your ratings - IMDb{% endblock %} +{% block content %} +

{{ current_user.name }}'s ratings

+ + + + {% for r, t in rows %} + + + + + + + {% else %} + + {% endfor %} + +
TitleYearYour ratingIMDb rating
{{ t.primary_title }}{{ t.year }} {{ r.rating }}/10 {{ '%.1f'|format(t.rating_avg) }}
No ratings yet.
+{% endblock %} diff --git a/sites/imdb/templates/name_detail.html b/sites/imdb/templates/name_detail.html new file mode 100644 index 00000000..7746c4c4 --- /dev/null +++ b/sites/imdb/templates/name_detail.html @@ -0,0 +1,63 @@ +{% extends 'base.html' %} +{% block title %}{{ person.name }} - IMDb{% endblock %} +{% block content %} +
+
+
+

{{ person.name }}

+
+ {% if person.primary_profession %}{{ person.primary_profession.replace(',', ' · ')|safe }}{% endif %} +
+
+ Born {{ person.birth_year or '—' }}{% if person.birth_place %}, {{ person.birth_place }}{% endif %} + {% if person.death_year %} · Died {{ person.death_year }}{% endif %} +
+
+ {% if person.photo_path %} + + {% endif %} +
+ + {% if person.bio %} +
+

Mini bio

+

{{ person.bio }}

+
+ {% endif %} + + {% if known_for %} +
+

Known for

+
    + {% for t in known_for %} +
  • + {{ t.primary_title }} +
    {{ t.year }} · {{ '%.1f'|format(t.rating_avg) }}
    +
  • + {% endfor %} +
+
+ {% endif %} + + {% set role_labels = {'actor':'Actor', 'director':'Director', 'writer':'Writer', + 'producer':'Producer', 'composer':'Composer'} %} + {% for role, items in grouped.items() %} + {% if items %} +
+

{{ role_labels[role] }} — {{ items|length }} credit{{ 's' if items|length != 1 }}

+ + + {% for c in items %} + + + + + + {% endfor %} + +
{{ c.title.year or '' }}{{ c.title.primary_title }}{% if c.character %}as {{ c.character }}{% endif %}
+
+ {% endif %} + {% endfor %} +
+{% endblock %} diff --git a/sites/imdb/templates/news.html b/sites/imdb/templates/news.html new file mode 100644 index 00000000..fb97ec73 --- /dev/null +++ b/sites/imdb/templates/news.html @@ -0,0 +1,19 @@ +{% extends 'base.html' %} +{% block title %}IMDb News{% endblock %} +{% block content %} +

IMDb News

+
    + {% for n in items %} +
  • + {{ n.headline }} + — {{ n.source }} · {{ n.published_at }} · {{ n.category }} +

    {{ n.summary }}

    + {% if n.related_tt and n.related_tt.startswith('tt') %} + View related title › + {% elif n.related_tt and n.related_tt.startswith('nm') %} + View related person › + {% endif %} +
  • + {% endfor %} +
+{% endblock %} diff --git a/sites/imdb/templates/register.html b/sites/imdb/templates/register.html new file mode 100644 index 00000000..fc4f34bd --- /dev/null +++ b/sites/imdb/templates/register.html @@ -0,0 +1,12 @@ +{% extends 'base.html' %} +{% block title %}Create an account - IMDb{% endblock %} +{% block content %} +

Create your account

+
+ + + + +
+

Already have an account? Sign in.

+{% endblock %} diff --git a/sites/imdb/templates/search.html b/sites/imdb/templates/search.html new file mode 100644 index 00000000..c71af47c --- /dev/null +++ b/sites/imdb/templates/search.html @@ -0,0 +1,46 @@ +{% extends 'base.html' %} +{% block title %}{% if q %}{{ q }} — {% endif %}IMDb search{% endblock %} +{% block content %} +

Search results{% if q %} for “{{ q }}”{% endif %}

+

+ All | + Titles ({{ titles|length }}) | + Names ({{ people|length }}) +

+ +{% if titles %} +
+

Titles

+
    + {% for t in titles %} +
  • + {{ t.primary_title }} + ({{ t.year }}) + · {{ t.title_type }} + · {{ '%.1f'|format(t.rating_avg) }} + · {{ t.num_votes|compact_votes }} votes + +
  • + {% endfor %} +
+
+{% endif %} + +{% if people %} +
+

Names

+
    + {% for p in people %} +
  • + {{ p.name }} + · {{ p.primary_profession }} +
  • + {% endfor %} +
+
+{% endif %} + +{% if q and not titles and not people %} +

No results matching “{{ q }}”.

+{% endif %} +{% endblock %} diff --git a/sites/imdb/templates/title_detail.html b/sites/imdb/templates/title_detail.html new file mode 100644 index 00000000..ec653096 --- /dev/null +++ b/sites/imdb/templates/title_detail.html @@ -0,0 +1,156 @@ +{% extends 'base.html' %} +{% block title %}{{ title.primary_title }} ({{ title.year }}) - IMDb{% endblock %} +{% block content %} + +
+
+
+

{{ title.primary_title }}

+
+ {% if title.title_type == 'tvSeries' %}TV Series · {% endif %} + {{ title.year }}{% if title.end_year and title.end_year != title.year %}–{{ title.end_year }}{% endif %} + · {{ title.mpaa_rating or 'Not Rated' }} + · {{ title.runtime_min }}m +
+
+ {% for g in title.genres %} + {{ g.name }} + {% endfor %} +
+
+
+
+
IMDb Rating
+
+ + {{ '%.1f'|format(title.rating_avg) }}/10 +
+
{{ title.num_votes|compact_votes }}
+
+ {% if title.top_rank %} +
#{{ title.top_rank }} in Top 250
+ {% endif %} + {% if title.popularity_rank %} +
Popularity #{{ title.popularity_rank }}
+ {% endif %} +
+
+ + {% if title.poster_path %} + + {% endif %} + + {% if title.taglines() %} +

“{{ title.taglines()[0] }}”

+ {% endif %} + +
+

Plot

+ {% if title.plot_short and title.plot_short != title.plot %}

{{ title.plot_short }}

{% endif %} +

{{ title.plot }}

+
+ +
+

Top cast

+ {% if cast %} +
    + {% for c in cast %} +
  • + {% if c.person.photo_path %} + + {% endif %} + {{ c.person.name }} + {% if c.character %}
    as {{ c.character }}
    {% endif %} +
  • + {% endfor %} +
+

See full cast & crew ›

+ {% else %} +

No cast listed.

+ {% endif %} + + {% if title.directors %} +

Director{{ 's' if title.directors|length > 1 else '' }}: + {% for c in title.directors %} + {{ c.person.name }}{{ ', ' if not loop.last }} + {% endfor %} +

+ {% endif %} + {% if title.writers %} +

Writer{{ 's' if title.writers|length > 1 else '' }}: + {% for c in title.writers %} + {{ c.person.name }}{{ ', ' if not loop.last }} + {% endfor %} +

+ {% endif %} +
+ +
+

Box office & details

+ +
+ + + +
+

Featured reviews

+ {% for r in featured_reviews %} +
+
+ {{ r.headline }} + {% if r.rating %}{{ r.rating }}/10{% endif %} +
+

{{ r.body }}

+
by {{ r.user.name }} · {{ r.helpful_count }} found this helpful
+
+ {% else %} +

No reviews yet.

+ {% endfor %} +

All reviews ({{ title.reviews|length }}) ›

+
+ + {% if similar %} +
+

More like this

+
    + {% for s in similar %} +
  • + {{ s.primary_title }} +
    {{ '%.1f'|format(s.rating_avg) }} · {{ s.year }}
    +
  • + {% endfor %} +
+
+ {% endif %} +
+{% endblock %} diff --git a/sites/imdb/templates/title_fullcredits.html b/sites/imdb/templates/title_fullcredits.html new file mode 100644 index 00000000..99dd5f50 --- /dev/null +++ b/sites/imdb/templates/title_fullcredits.html @@ -0,0 +1,28 @@ +{% extends 'base.html' %} +{% block title %}Full cast & crew — {{ title.primary_title }}{% endblock %} +{% block content %} +‹ {{ title.primary_title }} +

{{ title.primary_title }} — Full cast & crew

+ +{% set roles = [('director', 'Directed by'), ('writer', 'Written by'), + ('producer', 'Produced by'), ('actor', 'Cast'), + ('composer', 'Music by')] %} +{% for role, label in roles %} + {% set members = title.credits|selectattr('role', 'equalto', role)|list %} + {% if members %} +
+

{{ label }}

+ + + {% for c in members %} + + + + + {% endfor %} + +
{{ c.person.name }}{% if c.character %}as {{ c.character }}{% endif %}
+
+ {% endif %} +{% endfor %} +{% endblock %} diff --git a/sites/imdb/templates/title_reviews.html b/sites/imdb/templates/title_reviews.html new file mode 100644 index 00000000..3bc9ffb7 --- /dev/null +++ b/sites/imdb/templates/title_reviews.html @@ -0,0 +1,37 @@ +{% extends 'base.html' %} +{% block title %}User reviews — {{ title.primary_title }}{% endblock %} +{% block content %} +‹ {{ title.primary_title }} +

User reviews for {{ title.primary_title }} ({{ title.year }})

+ +
+ Sort by: + Most helpful | + Most recent | + Rating +
+ +{% if current_user.is_authenticated %} +

Write your review

+{% endif %} + +
    +{% for r in reviews %} +
  • +
    + {{ r.headline }} + {% if r.rating %}{{ r.rating }}/10{% endif %} +
    +

    {{ r.body }}

    +
    + by {{ r.user.name }} + · {{ r.created_at.strftime('%Y-%m-%d') }} + · {{ r.helpful_count }} found this helpful +
    +
  • +{% else %} +
  • No reviews yet.
  • +{% endfor %} +
+ +{% endblock %} diff --git a/sites/imdb/templates/title_write_review.html b/sites/imdb/templates/title_write_review.html new file mode 100644 index 00000000..b0239f22 --- /dev/null +++ b/sites/imdb/templates/title_write_review.html @@ -0,0 +1,20 @@ +{% extends 'base.html' %} +{% block title %}Write a review — {{ title.primary_title }}{% endblock %} +{% block content %} +

Write a review for {{ title.primary_title }} ({{ title.year }})

+
+ + + + +
+{% endblock %} diff --git a/sites/imdb/templates/watchlist.html b/sites/imdb/templates/watchlist.html new file mode 100644 index 00000000..00a4e5a0 --- /dev/null +++ b/sites/imdb/templates/watchlist.html @@ -0,0 +1,22 @@ +{% extends 'base.html' %} +{% block title %}Your Watchlist - IMDb{% endblock %} +{% block content %} +

{{ current_user.name }}'s Watchlist

+

{{ titles|length }} title{{ 's' if titles|length != 1 }} saved.

+
    + {% for t in titles %} +
  • + {{ t.primary_title }} + ({{ t.year }}) · + {{ '%.1f'|format(t.rating_avg) }} · + {{ t.runtime_min }}m + +
    + +
    +
  • + {% else %} +
  • Your Watchlist is empty. Visit a title page and click Add to Watchlist.
  • + {% endfor %} +
+{% endblock %} diff --git a/websyn_start.sh b/websyn_start.sh index 72defad8..9b341ba0 100644 --- a/websyn_start.sh +++ b/websyn_start.sh @@ -5,7 +5,7 @@ set -e SITES=(allrecipes amazon apple arxiv bbc_news booking github google_flights google_map google_search huggingface wolfram_alpha - cambridge_dictionary coursera espn) + cambridge_dictionary coursera espn imdb) BASE_PORT=40000 PID_DIR=/tmp/websyn_pids mkdir -p "$PID_DIR" From ebe92f0888c5cf888fa40bd46f5b535ad01faa57 Mon Sep 17 00:00:00 2001 From: JackJin <1037461232@qq.com> Date: Tue, 8 Sep 2026 08:58:20 +0800 Subject: [PATCH 02/17] fix(imdb): correct sourced profile identities and pin reviewer assets --- .assets-revision | 2 +- sites/imdb/docs/seed-provenance.md | 97 ++++ sites/imdb/migrate_seed.py | 169 +++++++ sites/imdb/seed_corrections.json | 736 +++++++++++++++++++++++++++++ sites/imdb/seed_data.py | 62 ++- sites/imdb/tests/test_seed_data.py | 142 ++++++ 6 files changed, 1198 insertions(+), 10 deletions(-) create mode 100644 sites/imdb/docs/seed-provenance.md create mode 100644 sites/imdb/migrate_seed.py create mode 100644 sites/imdb/seed_corrections.json create mode 100644 sites/imdb/tests/test_seed_data.py diff --git a/.assets-revision b/.assets-revision index a25e5b8b..06d2404e 100644 --- a/.assets-revision +++ b/.assets-revision @@ -5,4 +5,4 @@ # is a git revision (branch name like `main`, a tag, or a specific commit # sha). Override at runtime with the ASSETS_REVISION env var. repo: ChilleD/WebHarbor -revision: db9c73e62d853ed91f6152b5b7105571502b7e07 +revision: 4d5709e171d7c40fc742727adfa98b04b9023039 diff --git a/sites/imdb/docs/seed-provenance.md b/sites/imdb/docs/seed-provenance.md new file mode 100644 index 00000000..1ee96aa7 --- /dev/null +++ b/sites/imdb/docs/seed-provenance.md @@ -0,0 +1,97 @@ +# IMDb seed corrections + +The original seed attached some other people's profile data to the requested +IMDb `nm_id`. For example, `nm1165110` was labelled Robin Williams even though +[IMDb identifies that exact ID as Chris Hemsworth playing Thor in Endgame](https://www.imdb.com/title/tt4154796/characters/nm1165110/). +The loader now requires a matching canonical Person URL before importing a +scraped profile. Missing, malformed and mismatching identities are skipped. +The existing title canonical-URL check remains in place. + +The contributor's title catalog, credit relationships, image files and user +state are retained. `migrate_seed.py` is an offline asset migration; it is not +called during app startup or reset. + +## Sources and scope + +The input is `imdb/instance_seed/imdb.db` from `imdb.tar.gz` in the +[original HF asset revision](https://huggingface.co/datasets/ChilleD/WebHarbor/tree/51c523d1c02a57caaaea44c76f3f96646d15bcea): + +- Revision: `51c523d1c02a57caaaea44c76f3f96646d15bcea` +- Archive SHA256: `333800bc9919c6a7f258e8e49cca611929886f6dfe222d02773006b5a5368f75` +- Input seed SHA256: `f9f1431142d528c3126663a452dc12df0a8cd952f49b0b0be5fb807fd8bb5abf` + +The replacement facts come from [IMDb's official non-commercial datasets](https://data.imdb.com/non-commercial-datasets/), +specifically `name.basics.tsv.gz`. Each correction uses an exact `nconst`, +never a fuzzy name match. `seed_corrections.json` contains only the selected +official facts, their source metadata, and correction classifications. + +- Retrieval completed: `2026-09-07T17:07:30.738877+00:00` +- Actual GET Last-Modified: `Mon, 07 Sep 2026 00:32:01 GMT` +- Source run date: `2026-09-06` +- Compressed bytes: `309376069` +- Complete compressed-stream SHA256: `8381884fe8796b09d1f6f6f2871ab6ccdfc7dfbc1a10fada14d45a3f98307aea` + +The full gzip was consumed to EOF and its CRC and declared length checked; +only the target records were retained. The source URL is mutable. Its +multipart ETag is recorded as version evidence, not represented as a content +hash. The manifest also hashes the exact six-column correction rows. + +The selected changes are: + +- 642 profiles have an official name difference and a copied profile payload + associated with another canonical identity. +- 47 additional substantial name differences are classified as + **canonicalization of uncertain alias/profile**, not individually proven + wrong-person records. These use the same exact-ID official source. +- For those 689 rows, name, birth/death years, primary professions and known-for + IDs come from the source record. Unverified biography, birthplace and portrait + links are cleared. The source supplies no replacement biographies or images; + none are generated. Original image files remain in the asset archive. +- Two same-name birth-year corrections are independently supported by IMDb + profiles: [Michael Byrne, 1939](https://www.imdb.com/name/nm0126250/) and + [Matt Tarses, 1968](https://www.imdb.com/name/nm0850696/). Their other fields + are preserved; current death-year changes are not copied into the older seed. +- Fourteen name-format/diacritic/disambiguator variants are left unchanged. + `nm14177307` and `nm18523349` are missing from the consumed official dataset; + direct profile requests returned 403, so their records and credits are kept. + +For title dates, the loader prefers a valid complete `ld.datePublished`. +Legacy `Release date | Month D, YYYY ...` values are converted only when they +contain a complete, valid date. The migration normalizes 390 existing dates +without supplying new facts. The two year-only values remain unchanged: +`tt0994314` (2008) and `tt33041431` (2027). + +## Reproduction and validation + +After extracting the original asset revision into the checkout: + +```bash +python3 sites/imdb/migrate_seed.py --report /tmp/imdb-migration-first.json +python3 sites/imdb/migrate_seed.py --report /tmp/imdb-migration-second.json +python3 -m unittest discover -s sites/imdb/tests -p test_seed_data.py +``` + +The migration refuses to modify an unexpected source seed. Its transaction +checks the complete logical diff before committing. A completed migration +performs no writes on subsequent runs. Reports contain table/row hashes and +changed field names, not user values or old biographies. + +Verified locally with Python 3.11.3 / SQLite 3.40.1: + +- All six targeted tests pass: canonical identity rejection/import, complete + date parsing and precedence, preserved relationships/state, byte-identical + second migration, and rejection of a modified source. +- 691 person rows change: 689 selected profiles and two birth years. +- 390 title rows change only in `release_date`. +- An independent comparison against the original seed confirms all other + title/person fields and all credits, genres, news, reviews, ratings, users, + watchlists and title/genre relationships are unchanged. +- Second migration: zero changed rows and identical file SHA256. +- Original archive and the checkout's runtime database are unchanged. + +Candidate seed SHA256: +`27558f13a9dd3b003435463ceaad8538e2b6f9fc5095c3bd6831666fecaab5d9`. + +These are source and migration checks. Container reset, browser behavior, +visual comparison and task execution are separate validation steps. The +removed portrait/biography links remain an explicit source-coverage limitation. diff --git a/sites/imdb/migrate_seed.py b/sites/imdb/migrate_seed.py new file mode 100644 index 00000000..cca05140 --- /dev/null +++ b/sites/imdb/migrate_seed.py @@ -0,0 +1,169 @@ +"""Apply the sourced IMDb corrections once, before packaging the HF seed. + +This is an offline asset migration, never a runtime/reset hook. It preserves +identifiers, relationships and user state. Only the original source seed can +be changed; a fully corrected seed is an exact byte-preserving no-op. +""" +import argparse +from collections import Counter +from contextlib import closing +import hashlib +import json +from pathlib import Path +import re +import sqlite3 + +from seed_data import _parse_release_date + +BASE_DIR = Path(__file__).resolve().parent +MANIFEST = BASE_DIR / 'seed_corrections.json' +PERSON_FIELDS = ('name', 'birth_year', 'death_year', 'birth_place', 'bio', + 'primary_profession', 'photo_path', 'known_for_json') + + +def _hash(value): + encoded = json.dumps(value, ensure_ascii=False, separators=(',', ':')).encode() + return hashlib.sha256(encoded).hexdigest() + + +def _snapshot(connection): + """Keep row values in memory; exported reports contain only their hashes.""" + schema = connection.execute( + "SELECT type,name,tbl_name,sql FROM sqlite_master ORDER BY type,name").fetchall() + tables = {} + for (name,) in connection.execute( + "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name"): + quoted = '"' + name.replace('"', '""') + '"' + cursor = connection.execute(f'SELECT * FROM {quoted} ORDER BY rowid') + tables[name] = {'columns': [column[0] for column in cursor.description], + 'rows': cursor.fetchall()} + return {'schema': schema, 'tables': tables} + + +def _person_values(record): + def year(value): + return None if value == '\\N' else int(value) + professions = record['primaryProfession'] + known_for = record['knownForTitles'] + return dict(zip(PERSON_FIELDS, ( + record['primaryName'], year(record['birthYear']), year(record['deathYear']), + '', '', '' if professions == '\\N' else ', '.join( + part.replace('_', ' ').title() for part in professions.split(',')), + '', json.dumps([] if known_for == '\\N' else known_for.split(','))))) + + +def _prepare_updates(connection, manifest): + updates = [] + seen = set() + groups = ((manifest['people'], _person_values), + (manifest['birth_year_corrections'], + lambda row: {'birth_year': int(row['birthYear'])})) + for records, values_for in groups: + for record in records: + nm_id = record['nconst'] + if not re.fullmatch(r'nm\d+', nm_id) or nm_id in seen: + raise ValueError('Invalid or duplicate correction identity') + seen.add(nm_id) + row = connection.execute('SELECT * FROM persons WHERE nm_id=?', (nm_id,)) + columns = [column[0] for column in row.description] + original = row.fetchone() + if original is None: + raise ValueError(f'Correction identity missing from source seed: {nm_id}') + current = dict(zip(columns, original)) + changes = {field: value for field, value in values_for(record).items() + if current[field] != value} + if changes: + updates.append(('persons', current['id'], nm_id, changes)) + for row_id, tt_id, original in connection.execute('SELECT id,tt_id,release_date FROM titles'): + parsed = _parse_release_date(original) + if parsed and parsed != original: + updates.append(('titles', row_id, tt_id, {'release_date': parsed})) + return updates + + +def _verify_logical_diff(before, after, updates): + if before['schema'] != after['schema'] or before['tables'].keys() != after['tables'].keys(): + raise ValueError('Migration changed database schema') + expected = {(table, row_id): (key, values) for table, row_id, key, values in updates} + changes = [] + for table, original in before['tables'].items(): + current = after['tables'][table] + if original['columns'] != current['columns'] or len(original['rows']) != len(current['rows']): + raise ValueError(f'Migration changed row/column structure: {table}') + columns = original['columns'] + for old, new in zip(original['rows'], current['rows']): + if old == new: + continue + row_id = old[columns.index('id')] + key, permitted = expected.pop((table, row_id), (None, {})) + actual = {field: value for field, previous, value in zip(columns, old, new) + if previous != value} + if actual != permitted: + raise ValueError(f'Unexpected field changes in {table} row {row_id}') + changes.append({'table': table, 'row_id': row_id, 'key': key, + 'fields': sorted(actual), 'before_row_sha256': _hash(old), + 'after_row_sha256': _hash(new)}) + if expected: + raise ValueError('Expected updates missing from logical diff') + return changes + + +def migrate_seed(database, manifest_path=MANIFEST): + database = Path(database).resolve() + manifest = json.loads(Path(manifest_path).read_text()) + if manifest.get('schema_version') != 1: + raise ValueError('Unsupported correction manifest schema') + before_bytes = hashlib.sha256(database.read_bytes()).hexdigest() + with closing(sqlite3.connect(database.as_uri() + '?mode=rw', uri=True)) as connection: + before = _snapshot(connection) + updates = _prepare_updates(connection, manifest) + if updates and before_bytes != manifest['source_seed']['sha256']: + raise ValueError('Refusing to change an unexpected source seed') + if updates: + try: + connection.execute('BEGIN IMMEDIATE') + for table, row_id, _, values in updates: + columns = ', '.join(f'{field}=?' for field in values) + connection.execute(f'UPDATE {table} SET {columns} WHERE id=?', + (*values.values(), row_id)) + after = _snapshot(connection) + changes = _verify_logical_diff(before, after, updates) + connection.commit() + except Exception: + connection.rollback() + raise + else: + after, changes = before, [] + return { + 'before_sha256': before_bytes, + 'after_sha256': hashlib.sha256(database.read_bytes()).hexdigest(), + 'manifest_sha256': hashlib.sha256(Path(manifest_path).read_bytes()).hexdigest(), + 'changed_rows': dict(Counter(change['table'] for change in changes)), + 'changed_fields': dict(Counter(f"{change['table']}.{field}" + for change in changes for field in change['fields'])), + 'logical_diff': changes, + 'tables': {table: {'row_count': len(snapshot['rows']), + 'before_sha256': _hash(snapshot), + 'after_sha256': _hash(after['tables'][table])} + for table, snapshot in before['tables'].items()}, + 'protected_tables_unchanged': [table for table in before['tables'] + if table not in ('persons', 'titles')], + } + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('database', nargs='?', type=Path, + default=BASE_DIR / 'instance_seed' / 'imdb.db') + parser.add_argument('--manifest', type=Path, default=MANIFEST) + parser.add_argument('--report', type=Path) + args = parser.parse_args() + report = migrate_seed(args.database, args.manifest) + if args.report: + args.report.write_text(json.dumps(report, indent=2) + '\n') + print(json.dumps({key: report[key] for key in + ('before_sha256', 'after_sha256', 'changed_rows', 'changed_fields')})) + + +if __name__ == '__main__': + main() diff --git a/sites/imdb/seed_corrections.json b/sites/imdb/seed_corrections.json new file mode 100644 index 00000000..69ac4565 --- /dev/null +++ b/sites/imdb/seed_corrections.json @@ -0,0 +1,736 @@ +{ + "schema_version": 1, + "source_seed": { + "repository": "ChilleD/WebHarbor", + "revision": "51c523d1c02a57caaaea44c76f3f96646d15bcea", + "archive": "imdb.tar.gz", + "archive_sha256": "333800bc9919c6a7f258e8e49cca611929886f6dfe222d02773006b5a5368f75", + "member": "imdb/instance_seed/imdb.db", + "sha256": "f9f1431142d528c3126663a452dc12df0a8cd952f49b0b0be5fb807fd8bb5abf" + }, + "official_source": { + "description_url": "https://data.imdb.com/non-commercial-datasets/", + "url": "https://datasets.imdbws.com/name.basics.tsv.gz", + "retrieved_at": "2026-09-07T17:07:30.738877+00:00", + "last_modified": "Mon, 07 Sep 2026 00:32:01 GMT", + "run_date": "2026-09-06", + "etag": "\"f4f943948657f323e733cd38bac4c4ea-37\"", + "compressed_bytes": 309376069, + "compressed_sha256": "8381884fe8796b09d1f6f6f2871ab6ccdfc7dfbc1a10fada14d45a3f98307aea", + "correction_rows_tsv_sha256": "f056e53001b0d2883692dfe98cd71b1a93daae42c30e9e778a1366e5d97ac595", + "validation": "Full gzip consumed to EOF; CRC and Content-Length validated. URL is mutable; ETag is multipart and is not a content hash." + }, + "scope": { + "profile_collision": 642, + "canonicalization_of_uncertain_alias_or_profile": 47, + "same_identity_birth_year_only": 2, + "policy": "Match exact nconst only. Correct selected profile facts; remove unverifiable biography, birthplace, and portrait links. Preserve format/diacritic variants and source-missing identities. Convert only existing complete release dates to ISO; retain unknown/partial dates." + }, + "birth_year_corrections": [ + { + "nconst": "nm0126250", + "birthYear": "1939", + "source_url": "https://www.imdb.com/name/nm0126250/", + "source_fact": "Born November 7, 1939", + "observed_at": "2026-09-07T17:11:19Z" + }, + { + "nconst": "nm0850696", + "birthYear": "1968", + "source_url": "https://www.imdb.com/name/nm0850696/", + "source_fact": "Born September 21, 1968", + "observed_at": "2026-09-07T17:11:19Z" + } + ], + "people": [ + {"nconst":"nm0000006","primaryName":"Ingrid Bergman","birthYear":"1915","deathYear":"1982","primaryProfession":"actress,producer,soundtrack","knownForTitles":"tt0034583,tt0038109,tt0036855,tt0038787","kind":"profile_collision"}, + {"nconst":"nm0000007","primaryName":"Humphrey Bogart","birthYear":"1899","deathYear":"1957","primaryProfession":"actor,producer,miscellaneous","knownForTitles":"tt0034583,tt0043265,tt0037382,tt0042593","kind":"profile_collision"}, + {"nconst":"nm0000020","primaryName":"Henry Fonda","birthYear":"1905","deathYear":"1982","primaryProfession":"actor,producer,miscellaneous","knownForTitles":"tt0050083,tt0082846,tt0032551,tt0036244","kind":"profile_collision"}, + {"nconst":"nm0000041","primaryName":"Akira Kurosawa","birthYear":"1910","deathYear":"1998","primaryProfession":"writer,director,assistant_director","knownForTitles":"tt0051808,tt0080979,tt0089881,tt0057565","kind":"profile_collision"}, + {"nconst":"nm0000044","primaryName":"Burt Lancaster","birthYear":"1913","deathYear":"1994","primaryProfession":"actor,producer,miscellaneous","knownForTitles":"tt0045793,tt0057091,tt0085859,tt0053793","kind":"profile_collision"}, + {"nconst":"nm0000059","primaryName":"Laurence Olivier","birthYear":"1907","deathYear":"1989","primaryProfession":"actor,producer,director","knownForTitles":"tt0069281,tt0032976,tt0077269,tt0074860","kind":"profile_collision"}, + {"nconst":"nm0000063","primaryName":"Anthony Quinn","birthYear":"1915","deathYear":"2001","primaryProfession":"actor,producer,director","knownForTitles":"tt0057831,tt0056172,tt0049456,tt0036244","kind":"profile_collision"}, + {"nconst":"nm0000071","primaryName":"James Stewart","birthYear":"1908","deathYear":"1997","primaryProfession":"actor,director,producer","knownForTitles":"tt0052357,tt0052561,tt0038650,tt0031679","kind":"profile_collision"}, + {"nconst":"nm0000093","primaryName":"Brad Pitt","birthYear":"1963","deathYear":"\\N","primaryProfession":"producer,actor,executive","knownForTitles":"tt0137523,tt0356910,tt0114746,tt1210166","kind":"profile_collision"}, + {"nconst":"nm0000111","primaryName":"Matthew Broderick","birthYear":"1962","deathYear":"\\N","primaryProfession":"actor,director,producer","knownForTitles":"tt0395251,tt0091042,tt0086567,tt0126886","kind":"profile_collision"}, + {"nconst":"nm0000118","primaryName":"John Carpenter","birthYear":"1948","deathYear":"\\N","primaryProfession":"music_department,writer,composer","knownForTitles":"tt0080749,tt0077651,tt0069945,tt0082340","kind":"profile_collision"}, + {"nconst":"nm0000141","primaryName":"David Duchovny","birthYear":"1960","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt0106179,tt0120902,tt0904208,tt0443701","kind":"profile_collision"}, + {"nconst":"nm0000147","primaryName":"Colin Firth","birthYear":"1960","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt1315981,tt1504320,tt0243155,tt2802144","kind":"profile_collision"}, + {"nconst":"nm0000150","primaryName":"Michael J. Fox","birthYear":"1961","deathYear":"\\N","primaryProfession":"actor,producer,miscellaneous","knownForTitles":"tt0088763,tt0096874,tt0116365,tt0115369","kind":"profile_collision"}, + {"nconst":"nm0000155","primaryName":"Whoopi Goldberg","birthYear":"1955","deathYear":"\\N","primaryProfession":"actress,producer,writer","knownForTitles":"tt0099653,tt0105417,tt0088939,tt0108147","kind":"profile_collision"}, + {"nconst":"nm0000157","primaryName":"Linda Hamilton","birthYear":"1956","deathYear":"\\N","primaryProfession":"actress,soundtrack,archive_footage","knownForTitles":"tt0103064,tt6450804,tt0088247,tt0118928","kind":"profile_collision"}, + {"nconst":"nm0000164","primaryName":"Anthony Hopkins","birthYear":"1937","deathYear":"\\N","primaryProfession":"actor,composer,producer","knownForTitles":"tt0102926,tt0113987,tt0412080,tt0975645","kind":"profile_collision"}, + {"nconst":"nm0000172","primaryName":"Harvey Keitel","birthYear":"1939","deathYear":"\\N","primaryProfession":"actor,producer,soundtrack","knownForTitles":"tt0105236,tt0103759,tt2278388,tt0110912","kind":"profile_collision"}, + {"nconst":"nm0000173","primaryName":"Nicole Kidman","birthYear":"1967","deathYear":"\\N","primaryProfession":"actress,producer,music_department","knownForTitles":"tt0203009,tt0114681,tt0274558,tt0935075","kind":"profile_collision"}, + {"nconst":"nm0000175","primaryName":"Stephen King","birthYear":"1947","deathYear":"\\N","primaryProfession":"writer,producer,actor","knownForTitles":"tt0091499,tt0083767,tt0105428,tt0111161","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0000184","primaryName":"George Lucas","birthYear":"1944","deathYear":"\\N","primaryProfession":"writer,producer,director","knownForTitles":"tt0076759,tt0066434,tt0069704,tt0082971","kind":"profile_collision"}, + {"nconst":"nm0000234","primaryName":"Charlize Theron","birthYear":"1975","deathYear":"\\N","primaryProfession":"producer,actress,costume_designer","knownForTitles":"tt0340855,tt1392190,tt5610554,tt1735898","kind":"profile_collision"}, + {"nconst":"nm0000242","primaryName":"Mark Wahlberg","birthYear":"1971","deathYear":"\\N","primaryProfession":"producer,actor,composer","knownForTitles":"tt0964517,tt0118749,tt0407887,tt1637725","kind":"profile_collision"}, + {"nconst":"nm0000255","primaryName":"Ben Affleck","birthYear":"1972","deathYear":"\\N","primaryProfession":"producer,actor,writer","knownForTitles":"tt1024648,tt2267998,tt0840361,tt0119217","kind":"profile_collision"}, + {"nconst":"nm0000261","primaryName":"Karen Allen","birthYear":"1951","deathYear":"\\N","primaryProfession":"actress,director,soundtrack","knownForTitles":"tt0082971,tt0367882,tt0088172,tt0077975","kind":"profile_collision"}, + {"nconst":"nm0000293","primaryName":"Sean Bean","birthYear":"1959","deathYear":"\\N","primaryProfession":"actor,producer,animation_department","knownForTitles":"tt0120737,tt1181791,tt0332452,tt1617661","kind":"profile_collision"}, + {"nconst":"nm0000297","primaryName":"Tom Berenger","birthYear":"1949","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt0091763,tt1375666,tt0085244,tt0097815","kind":"profile_collision"}, + {"nconst":"nm0000305","primaryName":"Mel Blanc","birthYear":"1908","deathYear":"1989","primaryProfession":"actor,music_department,miscellaneous","knownForTitles":"tt0096438,tt0094939,tt0078915,tt0077278","kind":"profile_collision"}, + {"nconst":"nm0000307","primaryName":"Helena Bonham Carter","birthYear":"1966","deathYear":"\\N","primaryProfession":"actress,producer,director","knownForTitles":"tt0408236,tt1707386,tt0137523,tt1504320","kind":"profile_collision"}, + {"nconst":"nm0000314","primaryName":"Charles Bronson","birthYear":"1921","deathYear":"2003","primaryProfession":"actor,archive_footage","knownForTitles":"tt0071402,tt0064116,tt0057115,tt0054047","kind":"profile_collision"}, + {"nconst":"nm0000342","primaryName":"James Cromwell","birthYear":"1940","deathYear":"\\N","primaryProfession":"actor,producer,soundtrack","knownForTitles":"tt0119488,tt0120689,tt0343818,tt0398165","kind":"profile_collision"}, + {"nconst":"nm0000349","primaryName":"Joan Cusack","birthYear":"1962","deathYear":"\\N","primaryProfession":"actress,writer,soundtrack","knownForTitles":"tt0119360,tt0096463,tt0119229,tt1659337","kind":"profile_collision"}, + {"nconst":"nm0000353","primaryName":"Willem Dafoe","birthYear":"1955","deathYear":"\\N","primaryProfession":"actor,producer,miscellaneous","knownForTitles":"tt0145487,tt6938828,tt5649144,tt7984734","kind":"profile_collision"}, + {"nconst":"nm0000354","primaryName":"Matt Damon","birthYear":"1970","deathYear":"\\N","primaryProfession":"producer,actor,writer","knownForTitles":"tt0119217,tt3659388,tt0407887,tt0134119","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0000407","primaryName":"Vivica A. Fox","birthYear":"1964","deathYear":"\\N","primaryProfession":"actress,producer,director","knownForTitles":"tt0116629,tt0266697,tt0373474,tt0118688","kind":"profile_collision"}, + {"nconst":"nm0000416","primaryName":"Terry Gilliam","birthYear":"1940","deathYear":"\\N","primaryProfession":"director,writer,actor","knownForTitles":"tt0088846,tt0071853,tt0081633,tt0085959","kind":"profile_collision"}, + {"nconst":"nm0000418","primaryName":"Danny Glover","birthYear":"1946","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt0093409,tt0104714,tt0122151,tt0097733","kind":"profile_collision"}, + {"nconst":"nm0000454","primaryName":"Dennis Hopper","birthYear":"1936","deathYear":"2010","primaryProfession":"actor,director,writer","knownForTitles":"tt0064276,tt0090756,tt0111257,tt0114898","kind":"profile_collision"}, + {"nconst":"nm0000474","primaryName":"Michael Keaton","birthYear":"1951","deathYear":"\\N","primaryProfession":"actor,production_department,producer","knownForTitles":"tt2562232,tt1895587,tt4276820,tt0094721","kind":"profile_collision"}, + {"nconst":"nm0000501","primaryName":"Ray Liotta","birthYear":"1954","deathYear":"2022","primaryProfession":"actor,producer,soundtrack","knownForTitles":"tt0099685,tt0097351,tt0272207,tt0091983","kind":"profile_collision"}, + {"nconst":"nm0000505","primaryName":"Nia Long","birthYear":"1970","deathYear":"\\N","primaryProfession":"actress,producer,director","knownForTitles":"tt2083355,tt0168501,tt0208003,tt0181984","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0000506","primaryName":"Julia Louis-Dreyfus","birthYear":"1961","deathYear":"\\N","primaryProfession":"actress,producer,writer","knownForTitles":"tt0098904,tt2390361,tt1759761,tt0462128","kind":"profile_collision"}, + {"nconst":"nm0000507","primaryName":"Rob Lowe","birthYear":"1964","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt0090060,tt1291580,tt0086066,tt0145660","kind":"profile_collision"}, + {"nconst":"nm0000546","primaryName":"Matthew Modine","birthYear":"1959","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt0093058,tt0112760,tt0086969,tt1345836","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0000554","primaryName":"Sam Neill","birthYear":"1947","deathYear":"2026","primaryProfession":"actor,producer,director","knownForTitles":"tt4698684,tt0104850,tt0107290,tt0163025","kind":"profile_collision"}, + {"nconst":"nm0000568","primaryName":"Frank Oz","birthYear":"1944","deathYear":"\\N","primaryProfession":"actor,miscellaneous,director","knownForTitles":"tt0074028,tt0063951,tt0086190,tt0080684","kind":"profile_collision"}, + {"nconst":"nm0000579","primaryName":"Ron Perlman","birthYear":"1950","deathYear":"\\N","primaryProfession":"actor,producer,executive","knownForTitles":"tt3973768,tt0411477,tt0167190,tt0092319","kind":"profile_collision"}, + {"nconst":"nm0000587","primaryName":"Donald Pleasence","birthYear":"1919","deathYear":"1995","primaryProfession":"actor,writer,director","knownForTitles":"tt0082495,tt0077651,tt0057115,tt0062512","kind":"profile_collision"}, + {"nconst":"nm0000632","primaryName":"Jerry Seinfeld","birthYear":"1954","deathYear":"\\N","primaryProfession":"producer,writer,actor","knownForTitles":"tt0098904,tt0389790,tt14914430,tt2314952","kind":"profile_collision"}, + {"nconst":"nm0000642","primaryName":"Marina Sirtis","birthYear":"1955","deathYear":"\\N","primaryProfession":"actress,producer,soundtrack","knownForTitles":"tt0092455,tt0111280,tt0375679,tt0117731","kind":"profile_collision"}, + {"nconst":"nm0000653","primaryName":"Brent Spiner","birthYear":"1949","deathYear":"\\N","primaryProfession":"actor,director,writer","knownForTitles":"tt0117731,tt1628841,tt0253754,tt0111280","kind":"profile_collision"}, + {"nconst":"nm0000685","primaryName":"Jon Voight","birthYear":"1938","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt0064665,tt0118615,tt0068473,tt0418279","kind":"profile_collision"}, + {"nconst":"nm0000697","primaryName":"Billy Wilder","birthYear":"1906","deathYear":"2002","primaryProfession":"writer,director,producer","knownForTitles":"tt0053604,tt0053291,tt0047437,tt0043014","kind":"profile_collision"}, + {"nconst":"nm0000703","primaryName":"BD Wong","birthYear":"1960","deathYear":"\\N","primaryProfession":"actor,director,soundtrack","knownForTitles":"tt0107290,tt4158110,tt0203259,tt0120762","kind":"profile_collision"}, + {"nconst":"nm0000709","primaryName":"Robert Zemeckis","birthYear":"1951","deathYear":"\\N","primaryProfession":"producer,writer,director","knownForTitles":"tt0088763,tt0109830,tt0118884,tt1907668","kind":"profile_collision"}, + {"nconst":"nm0000719","primaryName":"F. Murray Abraham","birthYear":"1939","deathYear":"\\N","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0086879,tt2278388,tt0113819,tt0120844","kind":"profile_collision"}, + {"nconst":"nm0000741","primaryName":"Tim Allen","birthYear":"1953","deathYear":"\\N","primaryProfession":"actor,producer,miscellaneous","knownForTitles":"tt0114709,tt0101120,tt0177789,tt0452681","kind":"profile_collision"}, + {"nconst":"nm0000751","primaryName":"Suzy Amis","birthYear":"1962","deathYear":"\\N","primaryProfession":"actress,producer,soundtrack","knownForTitles":"tt0114814,tt0109303,tt0120338,tt0106350","kind":"profile_collision"}, + {"nconst":"nm0000812","primaryName":"Roger Avary","birthYear":"1965","deathYear":"\\N","primaryProfession":"producer,writer,director","knownForTitles":"tt0110912,tt0105236,tt0110265,tt0442933","kind":"profile_collision"}, + {"nconst":"nm0000867","primaryName":"Jason Bateman","birthYear":"1969","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt0367279,tt2948356,tt2170299,tt2704998","kind":"profile_collision"}, + {"nconst":"nm0000895","primaryName":"Barbara Bel Geddes","birthYear":"1922","deathYear":"2005","primaryProfession":"actress,soundtrack,archive_footage","knownForTitles":"tt0052357,tt0077000,tt0042832,tt0040221","kind":"profile_collision"}, + {"nconst":"nm0000905","primaryName":"Roberto Benigni","birthYear":"1952","deathYear":"\\N","primaryProfession":"actor,writer,director","knownForTitles":"tt0118799,tt0419198,tt0090967,tt0102164","kind":"profile_collision"}, + {"nconst":"nm0000937","primaryName":"Richard Beymer","birthYear":"1939","deathYear":"\\N","primaryProfession":"actor,cinematographer,editor","knownForTitles":"tt0055614,tt0098936,tt0056197,tt0226836","kind":"profile_collision"}, + {"nconst":"nm0000981","primaryName":"James Brolin","birthYear":"1940","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt0181865,tt0077294,tt0078767,tt0070909","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0000985","primaryName":"James L. Brooks","birthYear":"1940","deathYear":"\\N","primaryProfession":"writer,producer,miscellaneous","knownForTitles":"tt0092699,tt0119822,tt0086425,tt0371246","kind":"profile_collision"}, + {"nconst":"nm0001003","primaryName":"Simon Callow","birthYear":"1949","deathYear":"\\N","primaryProfession":"actor,writer,director","knownForTitles":"tt0109831,tt0091867,tt0138097,tt0293508","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0001016","primaryName":"David Carradine","birthYear":"1936","deathYear":"2009","primaryProfession":"actor,producer,director","knownForTitles":"tt0378194,tt0074235,tt0072856,tt0490086","kind":"profile_collision"}, + {"nconst":"nm0001075","primaryName":"Peter Coyote","birthYear":"1941","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt0104779,tt0281358,tt0195685,tt0129290","kind":"profile_collision"}, + {"nconst":"nm0001079","primaryName":"Scatman Crothers","birthYear":"1910","deathYear":"1986","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0081505,tt0073486,tt0086491,tt0065421","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0001101","primaryName":"Ted Danson","birthYear":"1947","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt0083399,tt4955642,tt0082089,tt0098966","kind":"profile_collision"}, + {"nconst":"nm0001104","primaryName":"Frank Darabont","birthYear":"1959","deathYear":"\\N","primaryProfession":"writer,producer,director","knownForTitles":"tt0111161,tt0120689,tt0884328,tt1520211","kind":"profile_collision"}, + {"nconst":"nm0001120","primaryName":"Vittorio De Sica","birthYear":"1901","deathYear":"1974","primaryProfession":"actor,director,writer","knownForTitles":"tt0040522,tt0045274,tt0047313,tt0043809","kind":"profile_collision"}, + {"nconst":"nm0001159","primaryName":"Faye Dunaway","birthYear":"1941","deathYear":"\\N","primaryProfession":"actress,producer,director","knownForTitles":"tt0061418,tt0074958,tt0071315,tt0088206","kind":"profile_collision"}, + {"nconst":"nm0001160","primaryName":"Adrian Dunbar","birthYear":"1958","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt0104036,tt0102014,tt0097937,tt2303687","kind":"profile_collision"}, + {"nconst":"nm0001187","primaryName":"Noah Emmerich","birthYear":"1965","deathYear":"\\N","primaryProfession":"actor,director,archive_footage","knownForTitles":"tt1650062,tt0120382,tt0349825,tt0115639","kind":"profile_collision"}, + {"nconst":"nm0001232","primaryName":"Miloš Forman","birthYear":"1932","deathYear":"2018","primaryProfession":"director,writer,actor","knownForTitles":"tt0073486,tt0086879,tt0117318,tt0171433","kind":"profile_collision"}, + {"nconst":"nm0001233","primaryName":"Robert Forster","birthYear":"1941","deathYear":"2019","primaryProfession":"actor,producer,director","knownForTitles":"tt0119396,tt1033575,tt0166924,tt2302755","kind":"profile_collision"}, + {"nconst":"nm0001290","primaryName":"Richard E. Grant","birthYear":"1957","deathYear":"\\N","primaryProfession":"actor,director,writer","knownForTitles":"tt0280707,tt4595882,tt0102070,tt17351924","kind":"profile_collision"}, + {"nconst":"nm0001291","primaryName":"Rupert Graves","birthYear":"1963","deathYear":"\\N","primaryProfession":"actor,writer,director","knownForTitles":"tt0434409,tt0091867,tt0093512,tt0795368","kind":"profile_collision"}, + {"nconst":"nm0001327","primaryName":"David Hasselhoff","birthYear":"1952","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt0096542,tt0083437,tt1714203,tt3896198","kind":"profile_collision"}, + {"nconst":"nm0001354","primaryName":"Ciarán Hinds","birthYear":"1953","deathYear":"\\N","primaryProfession":"actor,producer,soundtrack","knownForTitles":"tt12789558,tt1596365,tt1340800,tt2294629","kind":"profile_collision"}, + {"nconst":"nm0001392","primaryName":"Peter Jackson","birthYear":"1961","deathYear":"\\N","primaryProfession":"producer,director,writer","knownForTitles":"tt0120737,tt0092610,tt0360717,tt0110005","kind":"profile_collision"}, + {"nconst":"nm0001426","primaryName":"Ben Kingsley","birthYear":"1943","deathYear":"\\N","primaryProfession":"actor,producer,miscellaneous","knownForTitles":"tt0203119,tt0083987,tt0108052,tt1300854","kind":"profile_collision"}, + {"nconst":"nm0001430","primaryName":"Jack Klugman","birthYear":"1922","deathYear":"2012","primaryProfession":"actor,writer,director","knownForTitles":"tt0050083,tt0065329,tt0074042,tt0055895","kind":"profile_collision"}, + {"nconst":"nm0001433","primaryName":"Yaphet Kotto","birthYear":"1939","deathYear":"2021","primaryProfession":"actor,writer,director","knownForTitles":"tt0078748,tt0070328,tt0095631,tt0106028","kind":"profile_collision"}, + {"nconst":"nm0001492","primaryName":"Kyle MacLachlan","birthYear":"1959","deathYear":"\\N","primaryProfession":"actor,director,producer","knownForTitles":"tt4093826,tt0087182,tt1780441,tt0090756","kind":"profile_collision"}, + {"nconst":"nm0001519","primaryName":"Ian McDiarmid","birthYear":"1944","deathYear":"\\N","primaryProfession":"actor,archive_footage,archive_sound","knownForTitles":"tt0121766,tt0086190,tt0120915,tt2527338","kind":"profile_collision"}, + {"nconst":"nm0001526","primaryName":"Patrick McGoohan","birthYear":"1928","deathYear":"2009","primaryProfession":"actor,producer,director","knownForTitles":"tt0061287,tt0112573,tt0117913,tt0081455","kind":"profile_collision"}, + {"nconst":"nm0001527","primaryName":"Elizabeth McGovern","birthYear":"1961","deathYear":"\\N","primaryProfession":"actress,producer,writer","knownForTitles":"tt0081283,tt6398184,tt0099731,tt0082970","kind":"profile_collision"}, + {"nconst":"nm0001536","primaryName":"Toshirō Mifune","birthYear":"1920","deathYear":"1997","primaryProfession":"actor,producer,director","knownForTitles":"tt0055630,tt0047478,tt0050613,tt0057565","kind":"profile_collision"}, + {"nconst":"nm0001549","primaryName":"Rita Moreno","birthYear":"1931","deathYear":"\\N","primaryProfession":"actress,producer,soundtrack","knownForTitles":"tt0055614,tt3581652,tt0049408,tt0118421","kind":"profile_collision"}, + {"nconst":"nm0001590","primaryName":"Chazz Palminteri","birthYear":"1946","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt0114814,tt0106489,tt0109348,tt0473488","kind":"profile_collision"}, + {"nconst":"nm0001592","primaryName":"Joe Pantoliano","birthYear":"1951","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt0209144,tt0115736,tt0106977,tt0133093","kind":"profile_collision"}, + {"nconst":"nm0001605","primaryName":"Amanda Peet","birthYear":"1972","deathYear":"\\N","primaryProfession":"actress,writer,producer","knownForTitles":"tt1190080,tt0391304,tt0190138,tt0309698","kind":"profile_collision"}, + {"nconst":"nm0001608","primaryName":"Barry Pepper","birthYear":"1970","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt0431377,tt1403865,tt0120689,tt8364368","kind":"profile_collision"}, + {"nconst":"nm0001634","primaryName":"CCH Pounder","birthYear":"1952","deathYear":"\\N","primaryProfession":"actress,producer,archive_footage","knownForTitles":"tt0286486,tt0499549,tt1538403,tt0107978","kind":"profile_collision"}, + {"nconst":"nm0001707","primaryName":"Paul Schrader","birthYear":"1946","deathYear":"\\N","primaryProfession":"writer,director,producer","knownForTitles":"tt6053438,tt11196036,tt0118564,tt0075314","kind":"profile_collision"}, + {"nconst":"nm0001725","primaryName":"Omar Sharif","birthYear":"1932","deathYear":"2015","primaryProfession":"actor,writer,producer","knownForTitles":"tt0056172,tt0059113,tt0329388,tt0062994","kind":"profile_collision"}, + {"nconst":"nm0001741","primaryName":"Bryan Singer","birthYear":"1965","deathYear":"\\N","primaryProfession":"producer,director,actor","knownForTitles":"tt0120903,tt0114814,tt1877832,tt0348150","kind":"profile_collision"}, + {"nconst":"nm0001767","primaryName":"Imelda Staunton","birthYear":"1956","deathYear":"\\N","primaryProfession":"actress,soundtrack,archive_footage","knownForTitles":"tt0383694,tt0373889,tt3169706,tt0138097","kind":"profile_collision"}, + {"nconst":"nm0001786","primaryName":"George Takei","birthYear":"1937","deathYear":"\\N","primaryProfession":"actor,miscellaneous,writer","knownForTitles":"tt0060028,tt0102975,tt0084726,tt0088170","kind":"profile_collision"}, + {"nconst":"nm0001804","primaryName":"Stanley Tucci","birthYear":"1960","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt0115678,tt1895587,tt0380510,tt0458339","kind":"profile_collision"}, + {"nconst":"nm0001806","primaryName":"John Turturro","birthYear":"1957","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt2258345,tt0101410,tt1399103,tt0190590","kind":"profile_collision"}, + {"nconst":"nm0001814","primaryName":"Gus Van Sant","birthYear":"1952","deathYear":"\\N","primaryProfession":"director,producer,actor","knownForTitles":"tt0363589,tt0097240,tt0842929,tt0102494","kind":"profile_collision"}, + {"nconst":"nm0001832","primaryName":"Sam Waterston","birthYear":"1940","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt0087553,tt0071577,tt0098844,tt0111127","kind":"profile_collision"}, + {"nconst":"nm0001837","primaryName":"Peter Weir","birthYear":"1944","deathYear":"\\N","primaryProfession":"director,writer,producer","knownForTitles":"tt0311113,tt1023114,tt0090329,tt0097165","kind":"profile_collision"}, + {"nconst":"nm0001844","primaryName":"Frank Whaley","birthYear":"1963","deathYear":"\\N","primaryProfession":"actor,director,writer","knownForTitles":"tt0115759,tt0110912,tt0452702,tt0101761","kind":"profile_collision"}, + {"nconst":"nm0001856","primaryName":"Oprah Winfrey","birthYear":"1954","deathYear":"\\N","primaryProfession":"producer,actress,miscellaneous","knownForTitles":"tt0090493,tt1327773,tt0088939,tt1620680","kind":"profile_collision"}, + {"nconst":"nm0001938","primaryName":"Richard Belzer","birthYear":"1944","deathYear":"2023","primaryProfession":"actor,writer,producer","knownForTitles":"tt0203259,tt0106028,tt0086250,tt0120841","kind":"profile_collision"}, + {"nconst":"nm0001967","primaryName":"Peter Boyle","birthYear":"1935","deathYear":"2006","primaryProfession":"actor,miscellaneous,soundtrack","knownForTitles":"tt0115167,tt0072431,tt0111143,tt0075314","kind":"profile_collision"}, + {"nconst":"nm0001976","primaryName":"Horst Buchholz","birthYear":"1933","deathYear":"2003","primaryProfession":"actor,miscellaneous,archive_footage","knownForTitles":"tt0118799,tt0054047,tt0055256,tt0054866","kind":"profile_collision"}, + {"nconst":"nm0002009","primaryName":"Arthur C. Clarke","birthYear":"1917","deathYear":"2008","primaryProfession":"writer,actor,art_department","knownForTitles":"tt0062622,tt0086837,tt0134933,tt6076524","kind":"profile_collision"}, + {"nconst":"nm0002017","primaryName":"Richard Conte","birthYear":"1910","deathYear":"1975","primaryProfession":"actor,director,soundtrack","knownForTitles":"tt0068646,tt0041958,tt0040202,tt0041487","kind":"profile_collision"}, + {"nconst":"nm0002073","primaryName":"Lou Ferrigno","birthYear":"1951","deathYear":"\\N","primaryProfession":"actor,producer,miscellaneous","knownForTitles":"tt0077031,tt0800080,tt0286716,tt0085672","kind":"profile_collision"}, + {"nconst":"nm0002076","primaryName":"Jason Flemyng","birthYear":"1966","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt0421715,tt0120735,tt0118956,tt0486655","kind":"profile_collision"}, + {"nconst":"nm0002078","primaryName":"Frederic Forrest","birthYear":"1936","deathYear":"2023","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0078788,tt0071360,tt0106856,tt0096639","kind":"profile_collision"}, + {"nconst":"nm0002104","primaryName":"Paulette Goddard","birthYear":"1910","deathYear":"1990","primaryProfession":"actress,producer,soundtrack","knownForTitles":"tt0032520,tt0027977,tt0033722,tt0037849","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0002128","primaryName":"Tess Harper","birthYear":"1950","deathYear":"\\N","primaryProfession":"actress,archive_footage","knownForTitles":"tt0477348,tt0086423,tt0090886,tt0119395","kind":"profile_collision"}, + {"nconst":"nm0002326","primaryName":"Al Sapienza","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,producer,stunts","knownForTitles":"tt0141842,tt1856010,tt1632701,tt9288030","kind":"profile_collision"}, + {"nconst":"nm0002364","primaryName":"Dante Basco","birthYear":"1975","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt0102057,tt0179116,tt0446046,tt2139965","kind":"profile_collision"}, + {"nconst":"nm0002369","primaryName":"John Williams","birthYear":"1903","deathYear":"1983","primaryProfession":"actor,archive_footage","knownForTitles":"tt0046912,tt0047437,tt0051201,tt0048728","kind":"profile_collision"}, + {"nconst":"nm0002728","primaryName":"Juan José Campanella","birthYear":"1959","deathYear":"\\N","primaryProfession":"writer,director,producer","knownForTitles":"tt1305806,tt1994702,tt8453986,tt0210843","kind":"profile_collision"}, + {"nconst":"nm0003697","primaryName":"Florian Henckel von Donnersmarck","birthYear":"1973","deathYear":"\\N","primaryProfession":"director,writer,producer","knownForTitles":"tt0405094,tt5311542,tt1243957,tt0233589","kind":"profile_collision"}, + {"nconst":"nm0004111","primaryName":"Mark Frost","birthYear":"1953","deathYear":"\\N","primaryProfession":"writer,producer,director","knownForTitles":"tt0120667,tt0081873,tt0098936,tt4093826","kind":"profile_collision"}, + {"nconst":"nm0004266","primaryName":"Anne Hathaway","birthYear":"1982","deathYear":"\\N","primaryProfession":"actress,producer,miscellaneous","knownForTitles":"tt1707386,tt1084950,tt1345836,tt0816692","kind":"profile_collision"}, + {"nconst":"nm0004423","primaryName":"Gerry Robert Byrne","birthYear":"\\N","deathYear":"\\N","primaryProfession":"production_manager,producer,actor","knownForTitles":"tt0217505,tt0388795,tt6866266,tt1327773","kind":"profile_collision"}, + {"nconst":"nm0004626","primaryName":"Kareena Kapoor","birthYear":"1980","deathYear":"\\N","primaryProfession":"actress,music_department,make_up_department","knownForTitles":"tt1093370,tt1187043,tt0488414,tt1562871","kind":"profile_collision"}, + {"nconst":"nm0004743","primaryName":"Gil Bellows","birthYear":"1967","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt4687882,tt0111161,tt0110395,tt8594276","kind":"profile_collision"}, + {"nconst":"nm0004988","primaryName":"Colin Hanks","birthYear":"1977","deathYear":"\\N","primaryProfession":"actor,director,producer","knownForTitles":"tt0360717,tt0273923,tt0852713,tt0880578","kind":"profile_collision"}, + {"nconst":"nm0005002","primaryName":"Isaac Hayes","birthYear":"1942","deathYear":"2008","primaryProfession":"music_artist,actor,music_department","knownForTitles":"tt0082340,tt0158983,tt0184858,tt0067741","kind":"profile_collision"}, + {"nconst":"nm0005017","primaryName":"Katie Holmes","birthYear":"1978","deathYear":"\\N","primaryProfession":"actress,producer,director","knownForTitles":"tt0134619,tt0372784,tt0810913,tt0118300","kind":"profile_collision"}, + {"nconst":"nm0005078","primaryName":"Stacy Keach","birthYear":"1941","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt1821549,tt0068575,tt0116225,tt1194173","kind":"profile_collision"}, + {"nconst":"nm0005082","primaryName":"David E. Kelley","birthYear":"1956","deathYear":"\\N","primaryProfession":"writer,producer,miscellaneous","knownForTitles":"tt0118437,tt3920596,tt0090466,tt0118254","kind":"profile_collision"}, + {"nconst":"nm0005132","primaryName":"Heath Ledger","birthYear":"1979","deathYear":"2008","primaryProfession":"actor,director,cinematographer","knownForTitles":"tt0388795,tt0468569,tt0183790,tt0355295","kind":"profile_collision"}, + {"nconst":"nm0005200","primaryName":"Paul McCartney","birthYear":"1942","deathYear":"\\N","primaryProfession":"music_artist,composer,actor","knownForTitles":"tt0058182,tt0078239,tt0063823,tt9735318","kind":"profile_collision"}, + {"nconst":"nm0005222","primaryName":"Sam Mendes","birthYear":"1965","deathYear":"\\N","primaryProfession":"producer,director,miscellaneous","knownForTitles":"tt8579674,tt14402146,tt0257044,tt1074638","kind":"profile_collision"}, + {"nconst":"nm0005305","primaryName":"Piper Perabo","birthYear":"1976","deathYear":"\\N","primaryProfession":"actor,actress,producer","knownForTitles":"tt0200550,tt4236770,tt0482571,tt1495708","kind":"profile_collision"}, + {"nconst":"nm0005311","primaryName":"Busy Philipps","birthYear":"1979","deathYear":"\\N","primaryProfession":"actress,producer,director","knownForTitles":"tt1001508,tt0866439,tt0381707,tt1441109","kind":"profile_collision"}, + {"nconst":"nm0005370","primaryName":"Kathleen Robertson","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,writer,producer","knownForTitles":"tt9288030,tt11343686,tt1833285,tt2402061","kind":"profile_collision"}, + {"nconst":"nm0005458","primaryName":"Jason Statham","birthYear":"1967","deathYear":"\\N","primaryProfession":"actor,producer,stunts","knownForTitles":"tt0479884,tt2820852,tt3079380,tt4779682","kind":"profile_collision"}, + {"nconst":"nm0005531","primaryName":"Donnie Wahlberg","birthYear":"1969","deathYear":"\\N","primaryProfession":"actor,producer,composer","knownForTitles":"tt0432348,tt0117438,tt0455760,tt0167404","kind":"profile_collision"}, + {"nconst":"nm0005606","primaryName":"Maurice LaMarche","birthYear":"1958","deathYear":"\\N","primaryProfession":"actor,producer,sound_department","knownForTitles":"tt0149460,tt0112123,tt2948356,tt0096697","kind":"profile_collision"}, + {"nconst":"nm0006168","primaryName":"John Lennon","birthYear":"1940","deathYear":"1980","primaryProfession":"music_artist,composer,actor","knownForTitles":"tt0058182,tt0078239,tt0063823,tt0059260","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0006471","primaryName":"Elsa Lanchester","birthYear":"1902","deathYear":"1986","primaryProfession":"actress,soundtrack,archive_footage","knownForTitles":"tt0051201,tt0074937,tt0026138,tt0058331","kind":"profile_collision"}, + {"nconst":"nm0008609","primaryName":"Johnny Aber","birthYear":"1916","deathYear":"1999","primaryProfession":"actor,archive_footage","knownForTitles":"tt0235076,tt0234861,tt0234751,tt0234787","kind":"profile_collision"}, + {"nconst":"nm0012524","primaryName":"Frank Adu","birthYear":"1937","deathYear":"2018","primaryProfession":"actor,archive_footage","knownForTitles":"tt0073312,tt0075314,tt0126916,tt0104797","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0016641","primaryName":"Fritz Alberti","birthYear":"1877","deathYear":"1954","primaryProfession":"actor,archive_footage","knownForTitles":"tt0015175,tt0017438,tt0015174,tt0022930","kind":"profile_collision"}, + {"nconst":"nm0018685","primaryName":"Richard Alexander","birthYear":"1902","deathYear":"1989","primaryProfession":"actor,archive_footage","knownForTitles":"tt0020629,tt0027977,tt0027623,tt0019532","kind":"profile_collision"}, + {"nconst":"nm0024404","primaryName":"Lauren Ambrose","birthYear":"1978","deathYear":"\\N","primaryProfession":"actress,producer,soundtrack","knownForTitles":"tt0248654,tt0386117,tt0127723,tt0206226","kind":"profile_collision"}, + {"nconst":"nm0026364","primaryName":"Anthony Anderson","birthYear":"1970","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt0407887,tt0410097,tt0257568,tt0418279","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0029508","primaryName":"June Angela","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,miscellaneous,music_department","knownForTitles":"tt0066651,tt3551096,tt0097814,tt0108757","kind":"profile_collision"}, + {"nconst":"nm0029962","primaryName":"Álex Angulo","birthYear":"1953","deathYear":"2014","primaryProfession":"actor,producer,archive_footage","knownForTitles":"tt0457430,tt0112922,tt0118819,tt0168080","kind":"profile_collision"}, + {"nconst":"nm0034877","primaryName":"Jonathan Aris","birthYear":"1971","deathYear":"\\N","primaryProfession":"actor,archive_footage","knownForTitles":"tt32061880,tt6257970,tt8368406,tt1475582","kind":"profile_collision"}, + {"nconst":"nm0039162","primaryName":"Shawn Ashmore","birthYear":"1979","deathYear":"\\N","primaryProfession":"actor,producer,archive_footage","knownForTitles":"tt0290334,tt1323045,tt0376994,tt0120903","kind":"profile_collision"}, + {"nconst":"nm0041003","primaryName":"David Attenborough","birthYear":"1926","deathYear":"\\N","primaryProfession":"writer,producer,director","knownForTitles":"tt6769208,tt0795176,tt2092588,tt0135095","kind":"profile_collision"}, + {"nconst":"nm0047962","primaryName":"Chieko Baishō","birthYear":"1941","deathYear":"\\N","primaryProfession":"actress,music_department,soundtrack","knownForTitles":"tt0347149,tt0081288,tt0073498,tt0066190","kind":"profile_collision"}, + {"nconst":"nm0048075","primaryName":"Manoj Bajpayee","birthYear":"1969","deathYear":"\\N","primaryProfession":"actor,producer,music_department","knownForTitles":"tt1954470,tt0195231,tt0289845,tt23864864","kind":"profile_collision"}, + {"nconst":"nm0048468","primaryName":"George Baker","birthYear":"1931","deathYear":"2011","primaryProfession":"actor,writer,production_department","knownForTitles":"tt0064757,tt0076752,tt0074006,tt0048611","kind":"profile_collision"}, + {"nconst":"nm0050332","primaryName":"Alan Ball","birthYear":"1957","deathYear":"\\N","primaryProfession":"producer,writer,miscellaneous","knownForTitles":"tt0169547,tt0248654,tt0844441,tt11327514","kind":"profile_collision"}, + {"nconst":"nm0051257","primaryName":"Kirk Baltz","birthYear":"1959","deathYear":"\\N","primaryProfession":"actor,producer,miscellaneous","knownForTitles":"tt0110632,tt0118798,tt0119094,tt0105236","kind":"profile_collision"}, + {"nconst":"nm0051397","primaryName":"Jamie Bamber","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,producer,archive_footage","knownForTitles":"tt0407362,tt1166893,tt5269594,tt1492179","kind":"profile_collision"}, + {"nconst":"nm0063527","primaryName":"Brian Beacock","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,miscellaneous,producer","knownForTitles":"tt3528758,tt3178442,tt0218864,tt0328790","kind":"profile_collision"}, + {"nconst":"nm0064235","primaryName":"Robert Beatty","birthYear":"1909","deathYear":"1992","primaryProfession":"actor,archive_footage","knownForTitles":"tt0065207,tt0075066,tt0062622,tt0094074","kind":"profile_collision"}, + {"nconst":"nm0064769","primaryName":"Jim Beaver","birthYear":"1950","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt0348914,tt0460681,tt0903747,tt1190634","kind":"profile_collision"}, + {"nconst":"nm0065874","primaryName":"Andy Beckwith","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,archive_footage","knownForTitles":"tt1355631,tt0944947,tt5691024,tt0208092","kind":"profile_collision"}, + {"nconst":"nm0071818","primaryName":"Jeff Bennett","birthYear":"1962","deathYear":"\\N","primaryProfession":"actor,music_department,miscellaneous","knownForTitles":"tt0461770,tt0118360,tt0318155,tt0892700","kind":"profile_collision"}, + {"nconst":"nm0074834","primaryName":"Mary Kay Bergman","birthYear":"1961","deathYear":"1999","primaryProfession":"actress,miscellaneous,producer","knownForTitles":"tt0158983,tt0101414,tt0119282,tt0120762","kind":"profile_collision"}, + {"nconst":"nm0075588","primaryName":"Jeannie Berlin","birthYear":"1949","deathYear":"\\N","primaryProfession":"actress,writer,director","knownForTitles":"tt0068687,tt0466893,tt14208870,tt1791528","kind":"profile_collision"}, + {"nconst":"nm0077720","primaryName":"Michael Berryman","birthYear":"1948","deathYear":"\\N","primaryProfession":"actor,producer,transportation_department","knownForTitles":"tt0077681,tt0090305,tt0395584,tt0073486","kind":"profile_collision"}, + {"nconst":"nm0080049","primaryName":"Yasiin Bey","birthYear":"1973","deathYear":"\\N","primaryProfession":"actor,producer,music_department","knownForTitles":"tt0317740,tt0371724,tt0361127,tt0450232","kind":"profile_collision"}, + {"nconst":"nm0080232","primaryName":"Nitish Bharadwaj","birthYear":"1963","deathYear":"\\N","primaryProfession":"actor,director,writer","knownForTitles":"tt0158417,tt0389673,tt3133538,tt0397214","kind":"profile_collision"}, + {"nconst":"nm0081449","primaryName":"Dragan Bjelogrlic","birthYear":"1963","deathYear":"\\N","primaryProfession":"director,actor,producer","knownForTitles":"tt20365920,tt8737152,tt6108262,tt1634013","kind":"profile_collision"}, + {"nconst":"nm0082450","primaryName":"Paul Feig","birthYear":"1962","deathYear":"\\N","primaryProfession":"producer,actor,director","knownForTitles":"tt27543632,tt2404463,tt0193676,tt0110006","kind":"profile_collision"}, + {"nconst":"nm0083655","primaryName":"Gil Birmingham","birthYear":"1953","deathYear":"\\N","primaryProfession":"actor,miscellaneous,archive_footage","knownForTitles":"tt5362988,tt1325004,tt1099212,tt1324999","kind":"profile_collision"}, + {"nconst":"nm0090008","primaryName":"Stanley Blystone","birthYear":"1894","deathYear":"1956","primaryProfession":"actor,archive_footage","knownForTitles":"tt0027977,tt0040333,tt0036381,tt0023013","kind":"profile_collision"}, + {"nconst":"nm0090386","primaryName":"James Bobin","birthYear":"1972","deathYear":"\\N","primaryProfession":"director,writer,producer","knownForTitles":"tt2281587,tt1204342,tt7547410,tt0863046","kind":"profile_collision"}, + {"nconst":"nm0093769","primaryName":"Fortunio Bonanova","birthYear":"1895","deathYear":"1969","primaryProfession":"actor,director,composer","knownForTitles":"tt0033467,tt0036775,tt0037979,tt0050105","kind":"profile_collision"}, + {"nconst":"nm0094435","primaryName":"Bong Joon Ho","birthYear":"1969","deathYear":"\\N","primaryProfession":"writer,producer,director","knownForTitles":"tt1706620,tt3967856,tt6751668,tt1216496","kind":"profile_collision"}, + {"nconst":"nm0095460","primaryName":"Ed Boon","birthYear":"1964","deathYear":"\\N","primaryProfession":"writer,miscellaneous,actor","knownForTitles":"tt0119707,tt0113855,tt17490712,tt0293429","kind":"profile_collision"}, + {"nconst":"nm0097504","primaryName":"Alex Borstein","birthYear":"1971","deathYear":"\\N","primaryProfession":"actress,music_department,producer","knownForTitles":"tt0182576,tt0385690,tt0307987,tt0327554","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0103495","primaryName":"James Bradshaw","birthYear":"1976","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt2701582,tt4696944,tt0808096,tt0187643","kind":"profile_collision"}, + {"nconst":"nm0104006","primaryName":"Tom Braidwood","birthYear":"1948","deathYear":"\\N","primaryProfession":"assistant_director,actor,producer","knownForTitles":"tt0120902,tt0156442,tt0443701,tt0106179","kind":"profile_collision"}, + {"nconst":"nm0105304","primaryName":"Patrick Brantseg","birthYear":"1967","deathYear":"\\N","primaryProfession":"miscellaneous,art_director,actor","knownForTitles":"tt0094517,tt0117128,tt0435555,tt0387005","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0107950","primaryName":"Jeremy Brett","birthYear":"1933","deathYear":"1995","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0058385,tt0049934,tt0095330,tt0685628","kind":"profile_collision"}, + {"nconst":"nm0110167","primaryName":"Chris Britton","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,miscellaneous","knownForTitles":"tt0319262,tt0364343,tt0335121,tt0119217","kind":"profile_collision"}, + {"nconst":"nm0110480","primaryName":"Peter Brocco","birthYear":"1903","deathYear":"1992","primaryProfession":"actor,archive_footage","knownForTitles":"tt0054331,tt0094142,tt0073486,tt0059557","kind":"profile_collision"}, + {"nconst":"nm0112459","primaryName":"Aline Brosh McKenna","birthYear":"1967","deathYear":"\\N","primaryProfession":"producer,writer,director","knownForTitles":"tt4094300,tt0458352,tt12823454,tt1126618","kind":"profile_collision"}, + {"nconst":"nm0114868","primaryName":"W. Earl Brown","birthYear":"1963","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt0348914,tt0129387,tt32268630,tt11815682","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0116897","primaryName":"Arthur Q. Bryan","birthYear":"1899","deathYear":"1959","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0032390,tt0032795,tt0047075,tt0036941","kind":"profile_collision"}, + {"nconst":"nm0122653","primaryName":"Edward Burns","birthYear":"1968","deathYear":"\\N","primaryProfession":"writer,actor,producer","knownForTitles":"tt0117628,tt0120815,tt0112585,tt0491109","kind":"profile_collision"}, + {"nconst":"nm0123404","primaryName":"Andrew Burt","birthYear":"1945","deathYear":"2018","primaryProfession":"actor,archive_footage","knownForTitles":"tt0404196,tt0094430,tt2158111,tt0068069","kind":"profile_collision"}, + {"nconst":"nm0123785","primaryName":"Ben Burtt","birthYear":"1948","deathYear":"\\N","primaryProfession":"sound_department,miscellaneous,editor","knownForTitles":"tt0910970,tt0076759,tt0120915,tt1650062","kind":"profile_collision"}, + {"nconst":"nm0126260","primaryName":"P.J. Byrne","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,writer,director","knownForTitles":"tt0993846,tt11995650,tt1190634,tt10640346","kind":"profile_collision"}, + {"nconst":"nm0130502","primaryName":"Dayton Callie","birthYear":"1946","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt0120461,tt0114682,tt1311067,tt0116828","kind":"profile_collision"}, + {"nconst":"nm0130536","primaryName":"James Callis","birthYear":"1971","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt5875444,tt0314979,tt6517102,tt0243155","kind":"profile_collision"}, + {"nconst":"nm0134666","primaryName":"Geoffrey Cantor","birthYear":"1962","deathYear":"\\N","primaryProfession":"actor,director,casting_director","knownForTitles":"tt3322312,tt0475290,tt5580146,tt7461272","kind":"profile_collision"}, + {"nconst":"nm0141953","primaryName":"T.K. Carter","birthYear":"1956","deathYear":"2026","primaryProfession":"actor,producer,miscellaneous","knownForTitles":"tt0084787,tt0421054,tt0089941,tt0081480","kind":"profile_collision"}, + {"nconst":"nm0144307","primaryName":"John Cassini","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,miscellaneous,producer","knownForTitles":"tt0402910,tt0114369,tt0208988,tt0315323","kind":"profile_collision"}, + {"nconst":"nm0144657","primaryName":"Dan Castellaneta","birthYear":"1957","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt0096697,tt0462538,tt0117705,tt0386789","kind":"profile_collision"}, + {"nconst":"nm0148437","primaryName":"Vincenzo Cerami","birthYear":"1940","deathYear":"2013","primaryProfession":"writer,actor,assistant_director","knownForTitles":"tt0118799,tt0419198,tt0100389,tt0102164","kind":"profile_collision"}, + {"nconst":"nm0153068","primaryName":"Jonathan Fahn","birthYear":"1965","deathYear":"\\N","primaryProfession":"actor,director,producer","knownForTitles":"tt0301290,tt0301921,tt1130090,tt4902250","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0153740","primaryName":"David Chase","birthYear":"1945","deathYear":"\\N","primaryProfession":"producer,writer,miscellaneous","knownForTitles":"tt0141842,tt0071042,tt0101124,tt0094414","kind":"profile_collision"}, + {"nconst":"nm0156928","primaryName":"Minoru Chiaki","birthYear":"1917","deathYear":"1999","primaryProfession":"actor,archive_footage","knownForTitles":"tt0047478,tt0042876,tt0051808,tt0050613","kind":"profile_collision"}, + {"nconst":"nm0156940","primaryName":"Dominic Chianese","birthYear":"1931","deathYear":"\\N","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0141842,tt0071562,tt0078718,tt0072890","kind":"profile_collision"}, + {"nconst":"nm0157058","primaryName":"Giulio Chiari","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt0040522","kind":"profile_collision"}, + {"nconst":"nm0157120","primaryName":"Isshin Chiba","birthYear":"1968","deathYear":"\\N","primaryProfession":"actor,archive_footage,archive_sound","knownForTitles":"tt2288938,tt0213338,tt0361140,tt2084868","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0165087","primaryName":"Jeremy Clarkson","birthYear":"1960","deathYear":"\\N","primaryProfession":"writer,producer,actor","knownForTitles":"tt1628033,tt0857190,tt0852863,tt0407290","kind":"profile_collision"}, + {"nconst":"nm0165412","primaryName":"James Clavell","birthYear":"1921","deathYear":"1994","primaryProfession":"writer,director,producer","knownForTitles":"tt0057115,tt0051622,tt0062376,tt0065969","kind":"profile_collision"}, + {"nconst":"nm0166359","primaryName":"David Clennon","birthYear":"1943","deathYear":"\\N","primaryProfession":"actor,archive_footage","knownForTitles":"tt0084335,tt0365737,tt0084787,tt2267998","kind":"profile_collision"}, + {"nconst":"nm0167388","primaryName":"François Cluzet","birthYear":"1955","deathYear":"\\N","primaryProfession":"actor,miscellaneous,soundtrack","knownForTitles":"tt1675434,tt0362225,tt0113117,tt0109731","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0175916","primaryName":"Paddy Considine","birthYear":"1973","deathYear":"\\N","primaryProfession":"actor,writer,director","knownForTitles":"tt0419677,tt1213663,tt0298845,tt1204340","kind":"profile_collision"}, + {"nconst":"nm0179289","primaryName":"Ellen Corby","birthYear":"1911","deathYear":"1999","primaryProfession":"actress,writer,script_department","knownForTitles":"tt0068149,tt0052357,tt0040458,tt0042296","kind":"profile_collision"}, + {"nconst":"nm0179819","primaryName":"Wendell Corey","birthYear":"1914","deathYear":"1968","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0047396,tt0061203,tt0060074,tt0040765","kind":"profile_collision"}, + {"nconst":"nm0185354","primaryName":"Brendan Coyle","birthYear":"1963","deathYear":"\\N","primaryProfession":"actor,producer,archive_footage","knownForTitles":"tt1606375,tt6398184,tt2674426,tt1077744","kind":"profile_collision"}, + {"nconst":"nm0185431","primaryName":"Jonny Coyne","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,archive_footage","knownForTitles":"tt30825738,tt8111088,tt10514222,tt16431870","kind":"profile_collision"}, + {"nconst":"nm0189144","primaryName":"David Cross","birthYear":"1964","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt0367279,tt0338013,tt1302011,tt1001526","kind":"profile_collision"}, + {"nconst":"nm0193485","primaryName":"Richard Curtis","birthYear":"1956","deathYear":"\\N","primaryProfession":"writer,producer,director","knownForTitles":"tt0314331,tt0109831,tt2194499,tt1131729","kind":"profile_collision"}, + {"nconst":"nm0200452","primaryName":"Paul Dano","birthYear":"1984","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt0469494,tt0449059,tt2024544,tt0903657","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0201669","primaryName":"Jean-Pierre Darroussin","birthYear":"1953","deathYear":"\\N","primaryProfession":"actor,director,writer","knownForTitles":"tt1508675,tt0118015,tt0474312,tt0319130","kind":"profile_collision"}, + {"nconst":"nm0201857","primaryName":"Ricardo Darín","birthYear":"1957","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt0247586,tt1305806,tt3011894,tt15301048","kind":"profile_collision"}, + {"nconst":"nm0203801","primaryName":"Karl Davies","birthYear":"1982","deathYear":"\\N","primaryProfession":"actor,producer,archive_footage","knownForTitles":"tt3428912,tt7366338,tt0944947,tt8697870","kind":"profile_collision"}, + {"nconst":"nm0205626","primaryName":"Viola Davis","birthYear":"1965","deathYear":"\\N","primaryProfession":"actress,producer,soundtrack","knownForTitles":"tt1454029,tt2671706,tt0918927,tt8093700","kind":"profile_collision"}, + {"nconst":"nm0206257","primaryName":"Rosario Dawson","birthYear":"1979","deathYear":"\\N","primaryProfession":"actress,producer,director","knownForTitles":"tt0294870,tt4116284,tt0401792,tt0477080","kind":"profile_collision"}, + {"nconst":"nm0209553","primaryName":"María Antonieta de las Nieves","birthYear":"1946","deathYear":"\\N","primaryProfession":"actress,miscellaneous,writer","knownForTitles":"tt0229890,tt0021884,tt0229889,tt0032138","kind":"profile_collision"}, + {"nconst":"nm0213354","primaryName":"Jamel Debbouze","birthYear":"1975","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt0211915,tt0473753,tt0250223,tt0444182","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0214354","primaryName":"Deepika Chikhalia","birthYear":"1965","deathYear":"\\N","primaryProfession":"actress,producer,music_department","knownForTitles":"tt0294139,tt0268093,tt0390792,tt0363967","kind":"profile_collision"}, + {"nconst":"nm0215916","primaryName":"Barry Del Sherman","birthYear":"1962","deathYear":"\\N","primaryProfession":"actor,archive_footage","knownForTitles":"tt0169547,tt0116629,tt0120241,tt0113690","kind":"profile_collision"}, + {"nconst":"nm0216507","primaryName":"Brian Delate","birthYear":"1949","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt0111161,tt0120382,tt0294870,tt0252299","kind":"profile_collision"}, + {"nconst":"nm0219465","primaryName":"Hugh Dennis","birthYear":"1962","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt0233084,tt2382320,tt0463827,tt5687612","kind":"profile_collision"}, + {"nconst":"nm0226813","primaryName":"Garret Dillahunt","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt2024544,tt0348914,tt0477348,tt1615919","kind":"profile_collision"}, + {"nconst":"nm0227759","primaryName":"Peter Dinklage","birthYear":"1969","deathYear":"\\N","primaryProfession":"actor,producer,stunts","knownForTitles":"tt0944947,tt0340377,tt1877832,tt5027774","kind":"profile_collision"}, + {"nconst":"nm0230826","primaryName":"Monica Dolan","birthYear":"1969","deathYear":"\\N","primaryProfession":"actress,soundtrack","knownForTitles":"tt2057392,tt3169706,tt2023690,tt3294200","kind":"profile_collision"}, + {"nconst":"nm0235103","primaryName":"Jason Douglas","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,miscellaneous,archive_footage","knownForTitles":"tt1520211,tt5016504,tt14614892,tt0477348","kind":"profile_collision"}, + {"nconst":"nm0235261","primaryName":"Terri Douglas","birthYear":"\\N","deathYear":"\\N","primaryProfession":"casting_department,actress,miscellaneous","knownForTitles":"tt4520988,tt22022452,tt29355505,tt30825738","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0235417","primaryName":"Tony Doupe","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt1862079,tt28494270,tt15133756,tt2305051","kind":"profile_collision"}, + {"nconst":"nm0241121","primaryName":"Jean Dujardin","birthYear":"1972","deathYear":"\\N","primaryProfession":"actor,director,writer","knownForTitles":"tt1655442,tt0464913,tt0993846,tt0412535","kind":"profile_collision"}, + {"nconst":"nm0244357","primaryName":"Lawrence Durrell","birthYear":"1912","deathYear":"1990","primaryProfession":"writer,actor,archive_footage","knownForTitles":"tt0060568,tt0064526,tt0054513,tt0861749","kind":"profile_collision"}, + {"nconst":"nm0252230","primaryName":"Chiwetel Ejiofor","birthYear":"1977","deathYear":"\\N","primaryProfession":"actor,director,writer","knownForTitles":"tt0301199,tt2024544,tt7533152,tt0379786","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0252238","primaryName":"Carmen Ejogo","birthYear":"1973","deathYear":"\\N","primaryProfession":"actress,producer,soundtrack","knownForTitles":"tt1020072,tt4695012,tt2975578,tt3183660","kind":"profile_collision"}, + {"nconst":"nm0263006","primaryName":"Mal Evans","birthYear":"1935","deathYear":"1976","primaryProfession":"miscellaneous,music_department,actor","knownForTitles":"tt0071760,tt0065976,tt0068307,tt9735318","kind":"profile_collision"}, + {"nconst":"nm0268380","primaryName":"Peter Farrelly","birthYear":"1956","deathYear":"\\N","primaryProfession":"producer,writer,director","knownForTitles":"tt6966692,tt0129387,tt0109686,tt1333125","kind":"profile_collision"}, + {"nconst":"nm0269463","primaryName":"Jon Favreau","birthYear":"1966","deathYear":"\\N","primaryProfession":"producer,actor,writer","knownForTitles":"tt2883512,tt0371746,tt0117802,tt4154796","kind":"profile_collision"}, + {"nconst":"nm0270625","primaryName":"JJ Feild","birthYear":"1978","deathYear":"\\N","primaryProfession":"actor,producer,soundtrack","knownForTitles":"tt1985019,tt0458339,tt1020558,tt6133130","kind":"profile_collision"}, + {"nconst":"nm0271965","primaryName":"Dave Fennoy","birthYear":"1952","deathYear":"\\N","primaryProfession":"actor,miscellaneous,producer","knownForTitles":"tt2006890,tt1037854,tt0462423,tt5785964","kind":"profile_collision"}, + {"nconst":"nm0272581","primaryName":"Rebecca Ferguson","birthYear":"1983","deathYear":"\\N","primaryProfession":"actress,producer,soundtrack","knownForTitles":"tt1485796,tt2381249,tt1160419,tt4912910","kind":"profile_collision"}, + {"nconst":"nm0283945","primaryName":"Dan Fogler","birthYear":"1976","deathYear":"\\N","primaryProfession":"actor,director,writer","knownForTitles":"tt3183660,tt0489049,tt0452625,tt0441773","kind":"profile_collision"}, + {"nconst":"nm0288144","primaryName":"Alastair Fothergill","birthYear":"1960","deathYear":"\\N","primaryProfession":"producer,director,writer","knownForTitles":"tt0296310,tt9253866,tt0795176,tt11989890","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0290117","primaryName":"Clive Francis","birthYear":"1946","deathYear":"\\N","primaryProfession":"actor,art_department,visual_effects","knownForTitles":"tt0066921,tt5431890,tt2473794,tt1212428","kind":"profile_collision"}, + {"nconst":"nm0290556","primaryName":"James Franco","birthYear":"1978","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt3521126,tt2101441,tt1542344,tt1245492","kind":"profile_collision"}, + {"nconst":"nm0291205","primaryName":"David Frankel","birthYear":"1959","deathYear":"\\N","primaryProfession":"director,producer,writer","knownForTitles":"tt0458352,tt0185906,tt1196956,tt0096566","kind":"profile_collision"}, + {"nconst":"nm0291569","primaryName":"Vincent Franklin","birthYear":"1966","deathYear":"\\N","primaryProfession":"actor,writer,soundtrack","knownForTitles":"tt0258463,tt0120681,tt0810784,tt0151568","kind":"profile_collision"}, + {"nconst":"nm0297054","primaryName":"Gustav Fröhlich","birthYear":"1902","deathYear":"1987","primaryProfession":"actor,director,writer","knownForTitles":"tt0017136,tt0904098,tt0048598,tt0041150","kind":"profile_collision"}, + {"nconst":"nm0301348","primaryName":"Richard Gaines","birthYear":"1904","deathYear":"1975","primaryProfession":"actor","knownForTitles":"tt0036775,tt0043338,tt0036172,tt0037671","kind":"profile_collision"}, + {"nconst":"nm0302330","primaryName":"John Gallagher Jr.","birthYear":"1984","deathYear":"\\N","primaryProfession":"actor,producer,soundtrack","knownForTitles":"tt1179933,tt2370248,tt5022702,tt1082807","kind":"profile_collision"}, + {"nconst":"nm0305558","primaryName":"Gael García Bernal","birthYear":"1978","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt3502172,tt0318462,tt0245574,tt0245712","kind":"profile_collision"}, + {"nconst":"nm0306786","primaryName":"Reginald Gardiner","birthYear":"1903","deathYear":"1980","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0032553,tt0037595,tt0033874,tt0028757","kind":"profile_collision"}, + {"nconst":"nm0309379","primaryName":"Gregory Gast","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,editorial_department,camera_department","knownForTitles":"tt13833978,tt14111734,tt0338348,tt0228528","kind":"profile_collision"}, + {"nconst":"nm0309693","primaryName":"Mark Gatiss","birthYear":"1966","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt0184135,tt1475582,tt0371724,tt9603212","kind":"profile_collision"}, + {"nconst":"nm0309945","primaryName":"Maxim Gaudette","birthYear":"1974","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt1255953,tt1194238,tt2486148,tt4881276","kind":"profile_collision"}, + {"nconst":"nm0311476","primaryName":"Martina Gedeck","birthYear":"1961","deathYear":"\\N","primaryProfession":"actress,miscellaneous,soundtrack","knownForTitles":"tt0405094,tt0765432,tt0246772,tt0343737","kind":"profile_collision"}, + {"nconst":"nm0320721","primaryName":"Rémy Girard","birthYear":"1950","deathYear":"\\N","primaryProfession":"actor,miscellaneous,soundtrack","knownForTitles":"tt0338135,tt1255953,tt0090985,tt0097635","kind":"profile_collision"}, + {"nconst":"nm0320812","primaryName":"Sara Giraudeau","birthYear":"1985","deathYear":"\\N","primaryProfession":"actress,director,cinematographer","knownForTitles":"tt4063800,tt6805302,tt21028846,tt3854802","kind":"profile_collision"}, + {"nconst":"nm0321294","primaryName":"Aldo Giuffrè","birthYear":"1924","deathYear":"2010","primaryProfession":"actor,miscellaneous,soundtrack","knownForTitles":"tt0060196,tt0063480,tt0066268,tt0057036","kind":"profile_collision"}, + {"nconst":"nm0324658","primaryName":"Walton Goggins","birthYear":"1971","deathYear":"\\N","primaryProfession":"actor,producer,soundtrack","knownForTitles":"tt1489428,tt3460252,tt1424381,tt1853728","kind":"profile_collision"}, + {"nconst":"nm0328751","primaryName":"Caroline Goodall","birthYear":"1959","deathYear":"\\N","primaryProfession":"actress,producer,writer","knownForTitles":"tt0109635,tt0360139,tt0106582,tt0108052","kind":"profile_collision"}, + {"nconst":"nm0331516","primaryName":"Ryan Gosling","birthYear":"1980","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt1120985,tt3783958,tt0780504,tt0332280","kind":"profile_collision"}, + {"nconst":"nm0335073","primaryName":"Philip Granger","birthYear":"1964","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt26657236,tt26625693,tt11337908,tt8613988","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0338169","primaryName":"Michael Green","birthYear":"1973","deathYear":"\\N","primaryProfession":"producer,writer,miscellaneous","knownForTitles":"tt3315342,tt1856101,tt13309742,tt1133985","kind":"profile_collision"}, + {"nconst":"nm0340580","primaryName":"Harry Grey","birthYear":"1901","deathYear":"1980","primaryProfession":"writer","knownForTitles":"tt0087843,tt0055317","kind":"profile_collision"}, + {"nconst":"nm0347039","primaryName":"Robert Guillaume","birthYear":"1927","deathYear":"2017","primaryProfession":"actor,producer,director","knownForTitles":"tt0078569,tt0110357,tt0165961,tt0097722","kind":"profile_collision"}, + {"nconst":"nm0355097","primaryName":"Jackie Earle Haley","birthYear":"1961","deathYear":"\\N","primaryProfession":"actor,director,writer","knownForTitles":"tt0409459,tt1179056,tt0074174,tt1130884","kind":"profile_collision"}, + {"nconst":"nm0358452","primaryName":"Doc Hammer","birthYear":"1967","deathYear":"\\N","primaryProfession":"visual_effects,actor,animation_department","knownForTitles":"tt0417373,tt14636186,tt0102731,tt0318376","kind":"profile_collision"}, + {"nconst":"nm0364748","primaryName":"Harriet Sansom Harris","birthYear":"1955","deathYear":"\\N","primaryProfession":"actress,soundtrack,archive_footage","knownForTitles":"tt11271038,tt5776858,tt26656917,tt13652142","kind":"profile_collision"}, + {"nconst":"nm0364915","primaryName":"Julie Harris","birthYear":"1925","deathYear":"2013","primaryProfession":"actress,soundtrack,archive_footage","knownForTitles":"tt0057129,tt0048028,tt0078638,tt0044896","kind":"profile_collision"}, + {"nconst":"nm0369617","primaryName":"Jerry Hausner","birthYear":"1909","deathYear":"1993","primaryProfession":"actor,miscellaneous,writer","knownForTitles":"tt0050825,tt0048412,tt0046138,tt0041061","kind":"profile_collision"}, + {"nconst":"nm0372423","primaryName":"Mark Heap","birthYear":"1957","deathYear":"\\N","primaryProfession":"actor,writer,archive_footage","knownForTitles":"tt0486655,tt0423661,tt1077744,tt1213663","kind":"profile_collision"}, + {"nconst":"nm0375738","primaryName":"Tom Helmore","birthYear":"1904","deathYear":"1995","primaryProfession":"actor,archive_footage","knownForTitles":"tt0052357,tt0054387,tt0051074,tt1090685","kind":"profile_collision"}, + {"nconst":"nm0376540","primaryName":"Martin Henderson","birthYear":"1974","deathYear":"\\N","primaryProfession":"actor,director,assistant_director","knownForTitles":"tt0475394,tt13560574,tt0454824,tt0298130","kind":"profile_collision"}, + {"nconst":"nm0383091","primaryName":"Bokuzen Hidari","birthYear":"1894","deathYear":"1971","primaryProfession":"actor,archive_footage","knownForTitles":"tt0047478,tt0044741,tt0050330,tt0043707","kind":"profile_collision"}, + {"nconst":"nm0384211","primaryName":"Dulé Hill","birthYear":"1975","deathYear":"\\N","primaryProfession":"actor,producer,soundtrack","knownForTitles":"tt0491738,tt0200276,tt1632701,tt2891574","kind":"profile_collision"}, + {"nconst":"nm0402898","primaryName":"Kathryn Hunter","birthYear":"1957","deathYear":"\\N","primaryProfession":"actress,producer,miscellaneous","knownForTitles":"tt10095582,tt14230458,tt0373889,tt10128846","kind":"profile_collision"}, + {"nconst":"nm0409183","primaryName":"Neil Innes","birthYear":"1944","deathYear":"2019","primaryProfession":"actor,composer,music_department","knownForTitles":"tt0071853,tt0079470,tt0077147,tt0072558","kind":"profile_collision"}, + {"nconst":"nm0410968","primaryName":"Akira Ishihama","birthYear":"1935","deathYear":"2022","primaryProfession":"actor,soundtrack","knownForTitles":"tt0056058,tt0185812,tt0156669,tt0053114","kind":"profile_collision"}, + {"nconst":"nm0412917","primaryName":"Jaaved Jaaferi","birthYear":"1960","deathYear":"\\N","primaryProfession":"actor,music_department,producer","knownForTitles":"tt0456165,tt9531772,tt2905838,tt1105709","kind":"profile_collision"}, + {"nconst":"nm0413168","primaryName":"Hugh Jackman","birthYear":"1968","deathYear":"\\N","primaryProfession":"actor,producer,executive","knownForTitles":"tt1707386,tt3315342,tt0458525,tt0120903","kind":"profile_collision"}, + {"nconst":"nm0413271","primaryName":"Anne Jackson","birthYear":"1925","deathYear":"2016","primaryProfession":"actress,producer,archive_footage","knownForTitles":"tt0081505,tt0065642,tt0831400,tt0063102","kind":"profile_collision"}, + {"nconst":"nm0421772","primaryName":"Roy Jenson","birthYear":"1927","deathYear":"2007","primaryProfession":"actor,stunts,archive_footage","knownForTitles":"tt0071315,tt0070723,tt0076070,tt0077523","kind":"profile_collision"}, + {"nconst":"nm0424060","primaryName":"Scarlett Johansson","birthYear":"1984","deathYear":"\\N","primaryProfession":"actress,producer,director","knownForTitles":"tt0335266,tt1798709,tt0848228,tt3480822","kind":"profile_collision"}, + {"nconst":"nm0428278","primaryName":"Jack Jones","birthYear":"1938","deathYear":"2024","primaryProfession":"music_department,actor,soundtrack","knownForTitles":"tt0099685,tt0083530,tt0093105,tt0266489","kind":"profile_collision"}, + {"nconst":"nm0429069","primaryName":"Rashida Jones","birthYear":"1976","deathYear":"\\N","primaryProfession":"actress,producer,writer","knownForTitles":"tt1266020,tt1405365,tt1285016,tt1155056","kind":"profile_collision"}, + {"nconst":"nm0429114","primaryName":"Richard T. Jones","birthYear":"1972","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt0119081,tt0183649,tt0369339,tt0443274","kind":"profile_collision"}, + {"nconst":"nm0434759","primaryName":"Wolf Kahler","birthYear":"1940","deathYear":"\\N","primaryProfession":"actor,miscellaneous,soundtrack","knownForTitles":"tt0082971,tt0077269,tt0451279,tt7560984","kind":"profile_collision"}, + {"nconst":"nm0449807","primaryName":"Steve Kerr","birthYear":"1965","deathYear":"\\N","primaryProfession":"actor,producer,archive_footage","knownForTitles":"tt2041488,tt4218012,tt21878148,tt37798645","kind":"profile_collision"}, + {"nconst":"nm0449984","primaryName":"Irvin Kershner","birthYear":"1923","deathYear":"2010","primaryProfession":"director,cinematographer,actor","knownForTitles":"tt0080684,tt0110725,tt0086006,tt0100502","kind":"profile_collision"}, + {"nconst":"nm0451383","primaryName":"Mukesh Khanna","birthYear":"1958","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt0158417,tt0389680,tt0242519,tt3595298","kind":"profile_collision"}, + {"nconst":"nm0452576","primaryName":"Ford Kiernan","birthYear":"1962","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt0281491,tt1924394,tt1830332,tt0224464","kind":"profile_collision"}, + {"nconst":"nm0455057","primaryName":"Matt King","birthYear":"1968","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt1172570,tt1032755,tt0387764,tt0374853","kind":"profile_collision"}, + {"nconst":"nm0456158","primaryName":"Jack Kirby","birthYear":"1917","deathYear":"1994","primaryProfession":"writer,miscellaneous,animation_department","knownForTitles":"tt1825683,tt0371746,tt1641384,tt4154796","kind":"profile_collision"}, + {"nconst":"nm0458342","primaryName":"Terry Klassen","birthYear":"1957","deathYear":"\\N","primaryProfession":"actor,miscellaneous,casting_department","knownForTitles":"tt0214341,tt0138919,tt0211793,tt0165046","kind":"profile_collision"}, + {"nconst":"nm0462030","primaryName":"Masaki Kobayashi","birthYear":"1916","deathYear":"1996","primaryProfession":"director,writer,assistant_director","knownForTitles":"tt0056058,tt0061847,tt0053114,tt0055233","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0462895","primaryName":"David Koepp","birthYear":"1963","deathYear":"\\N","primaryProfession":"writer,miscellaneous,producer","knownForTitles":"tt0107290,tt0164181,tt30988739,tt0117060","kind":"profile_collision"}, + {"nconst":"nm0463282","primaryName":"Kurt Koehler","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,casting_department,director","knownForTitles":"tt15398776,tt0898266,tt26670955,tt1266020","kind":"profile_collision"}, + {"nconst":"nm0465777","primaryName":"Kim Kopf","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,producer,writer","knownForTitles":"tt0910970,tt3092878,tt0120552,tt0114959","kind":"profile_collision"}, + {"nconst":"nm0466349","primaryName":"Baltasar Kormákur","birthYear":"1966","deathYear":"\\N","primaryProfession":"producer,writer,director","knownForTitles":"tt0805576,tt1114712,tt1764275,tt0237993","kind":"profile_collision"}, + {"nconst":"nm0471392","primaryName":"Eric Kripke","birthYear":"1974","deathYear":"\\N","primaryProfession":"writer,producer,director","knownForTitles":"tt1190634,tt0460681,tt13159924,tt0357507","kind":"profile_collision"}, + {"nconst":"nm0472816","primaryName":"Jack Kruschen","birthYear":"1922","deathYear":"2002","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0053604,tt0046534,tt0052564,tt0054016","kind":"profile_collision"}, + {"nconst":"nm0473166","primaryName":"Joachim Król","birthYear":"1957","deathYear":"\\N","primaryProfession":"actor,archive_footage","knownForTitles":"tt0109255,tt0130827,tt0155722,tt0246430","kind":"profile_collision"}, + {"nconst":"nm0484104","primaryName":"Sarah Lancashire","birthYear":"1964","deathYear":"\\N","primaryProfession":"actress,producer,director","knownForTitles":"tt3428912,tt8079248,tt0243183,tt0239958","kind":"profile_collision"}, + {"nconst":"nm0492639","primaryName":"Bill Lawrence","birthYear":"1968","deathYear":"\\N","primaryProfession":"producer,writer,director","knownForTitles":"tt10986410,tt0285403,tt15677150,tt1441109","kind":"profile_collision"}, + {"nconst":"nm0493257","primaryName":"Josh Lawson","birthYear":"1981","deathYear":"\\N","primaryProfession":"actor,writer,director","knownForTitles":"tt2785032,tt0293429,tt17490712,tt6023474","kind":"profile_collision"}, + {"nconst":"nm0500894","primaryName":"Brad Leland","birthYear":"1954","deathYear":"\\N","primaryProfession":"actor,producer","knownForTitles":"tt1860357,tt0758745,tt0448157,tt0390022","kind":"profile_collision"}, + {"nconst":"nm0501435","primaryName":"Kasi Lemmons","birthYear":"1959","deathYear":"\\N","primaryProfession":"actress,director,writer","knownForTitles":"tt0102926,tt4648786,tt0103919,tt0119080","kind":"profile_collision"}, + {"nconst":"nm0504962","primaryName":"Ken Leung","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt10954652,tt0411008,tt0141842,tt7671070","kind":"profile_collision"}, + {"nconst":"nm0507659","primaryName":"Richard Lewis","birthYear":"1947","deathYear":"2024","primaryProfession":"actor,writer,producer","knownForTitles":"tt0107977,tt0113627,tt0264235,tt0105980","kind":"profile_collision"}, + {"nconst":"nm0511892","primaryName":"Thure Lindhardt","birthYear":"1974","deathYear":"\\N","primaryProfession":"actor,director,producer","knownForTitles":"tt0920458,tt0808151,tt0403360,tt2011953","kind":"profile_collision"}, + {"nconst":"nm0514904","primaryName":"Chia-Hui Liu","birthYear":"1951","deathYear":"\\N","primaryProfession":"actor,stunts,director","knownForTitles":"tt0378194,tt0078243,tt0266697,tt1258972","kind":"profile_collision"}, + {"nconst":"nm0519765","primaryName":"Theodor Loos","birthYear":"1883","deathYear":"1954","primaryProfession":"actor,director,archive_footage","knownForTitles":"tt0022100,tt0017136,tt0013469,tt0132145","kind":"profile_collision"}, + {"nconst":"nm0526019","primaryName":"Diego Luna","birthYear":"1979","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt3748528,tt0245574,tt2262227,tt0316356","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0532461","primaryName":"Justina Machado","birthYear":"1972","deathYear":"\\N","primaryProfession":"actress,producer,soundtrack","knownForTitles":"tt0329691,tt0309593,tt0248654,tt5339440","kind":"profile_collision"}, + {"nconst":"nm0534134","primaryName":"Tress MacNeille","birthYear":"1951","deathYear":"\\N","primaryProfession":"actress,music_department,miscellaneous","knownForTitles":"tt0105941,tt0149460,tt0096697,tt0462538","kind":"profile_collision"}, + {"nconst":"nm0535582","primaryName":"Dominic Mafham","birthYear":"1968","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt5690810,tt14454876,tt3776288,tt3829170","kind":"profile_collision"}, + {"nconst":"nm0536883","primaryName":"Sean Maher","birthYear":"1975","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt0379786,tt0303461,tt6315800,tt5091548","kind":"profile_collision"}, + {"nconst":"nm0538320","primaryName":"Alan Mak","birthYear":"1965","deathYear":"\\N","primaryProfession":"director,actor,writer","knownForTitles":"tt0338564,tt1349853,tt0369060,tt0374339","kind":"profile_collision"}, + {"nconst":"nm0540441","primaryName":"Jena Malone","birthYear":"1984","deathYear":"\\N","primaryProfession":"actress,producer,music_department","knownForTitles":"tt1974419,tt1951266,tt0118884,tt1951264","kind":"profile_collision"}, + {"nconst":"nm0546816","primaryName":"Miriam Margolyes","birthYear":"1941","deathYear":"\\N","primaryProfession":"actress,soundtrack,archive_footage","knownForTitles":"tt0106226,tt0117509,tt0295297,tt0112453","kind":"profile_collision"}, + {"nconst":"nm0549134","primaryName":"John Marley","birthYear":"1907","deathYear":"1984","primaryProfession":"actor,archive_footage","knownForTitles":"tt0066011,tt0068646,tt0062952,tt0059017","kind":"profile_collision"}, + {"nconst":"nm0550855","primaryName":"E.G. Marshall","birthYear":"1914","deathYear":"1998","primaryProfession":"actor,writer,producer","knownForTitles":"tt0050083,tt0066473,tt0097958,tt0081573","kind":"profile_collision"}, + {"nconst":"nm0551065","primaryName":"Mona Marshall","birthYear":"1947","deathYear":"\\N","primaryProfession":"actress,miscellaneous,music_department","knownForTitles":"tt0121955,tt0210418,tt1799631,tt0363395","kind":"profile_collision"}, + {"nconst":"nm0552333","primaryName":"George R.R. Martin","birthYear":"1948","deathYear":"\\N","primaryProfession":"writer,producer,miscellaneous","knownForTitles":"tt0944947,tt11198330,tt0092319,tt27497448","kind":"profile_collision"}, + {"nconst":"nm0557850","primaryName":"Danny Mastrogiorgio","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,miscellaneous","knownForTitles":"tt4124758,tt4270492,tt7007696,tt2699110","kind":"profile_collision"}, + {"nconst":"nm0561982","primaryName":"James May","birthYear":"1963","deathYear":"\\N","primaryProfession":"writer,producer,actor","knownForTitles":"tt1628033,tt0857190,tt1536735,tt0498720","kind":"profile_collision"}, + {"nconst":"nm0562679","primaryName":"Peter Mayhew","birthYear":"1944","deathYear":"2019","primaryProfession":"actor,producer,miscellaneous","knownForTitles":"tt2488496,tt0076759,tt0080684,tt0086190","kind":"profile_collision"}, + {"nconst":"nm0566332","primaryName":"Michael McConnohie","birthYear":"1951","deathYear":"\\N","primaryProfession":"actor,writer,miscellaneous","knownForTitles":"tt1174954,tt0280240,tt0100758,tt0100263","kind":"profile_collision"}, + {"nconst":"nm0566393","primaryName":"Scott McCord","birthYear":"1971","deathYear":"\\N","primaryProfession":"actor,miscellaneous,music_department","knownForTitles":"tt9813792,tt10837952,tt1173427,tt1114855","kind":"profile_collision"}, + {"nconst":"nm0568390","primaryName":"Rob Mac","birthYear":"1977","deathYear":"\\N","primaryProfession":"writer,producer,actor","knownForTitles":"tt0472954,tt8879940,tt0345551,tt0118972","kind":"profile_collision"}, + {"nconst":"nm0568772","primaryName":"Mike McFarland","birthYear":"1970","deathYear":"\\N","primaryProfession":"actor,sound_department,producer","knownForTitles":"tt3819668,tt2263944,tt0388629,tt2560140","kind":"profile_collision"}, + {"nconst":"nm0572965","primaryName":"Pauline McLynn","birthYear":"1962","deathYear":"\\N","primaryProfession":"actress,archive_footage","knownForTitles":"tt0111958,tt9639470,tt0104231,tt3371366","kind":"profile_collision"}, + {"nconst":"nm0573862","primaryName":"Ian McNeice","birthYear":"1950","deathYear":"\\N","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0112281,tt0408381,tt0436992,tt0142032","kind":"profile_collision"}, + {"nconst":"nm0578766","primaryName":"Marc Menchaca","birthYear":"1975","deathYear":"\\N","primaryProfession":"actor,miscellaneous,director","knownForTitles":"tt5071412,tt1796960,tt3130776,tt2578508","kind":"profile_collision"}, + {"nconst":"nm0580014","primaryName":"Tobias Menzies","birthYear":"1974","deathYear":"\\N","primaryProfession":"actor,writer,soundtrack","knownForTitles":"tt16311594,tt16912512,tt15771916,tt4786824","kind":"profile_collision"}, + {"nconst":"nm0581282","primaryName":"Gary Merrill","birthYear":"1915","deathYear":"1990","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0042192,tt0041996,tt0043132,tt0057926","kind":"profile_collision"}, + {"nconst":"nm0582418","primaryName":"Laurie Metcalf","birthYear":"1955","deathYear":"\\N","primaryProfession":"actress,soundtrack,archive_footage","knownForTitles":"tt4925292,tt0102138,tt0120082,tt0133240","kind":"profile_collision"}, + {"nconst":"nm0583675","primaryName":"Menno Meyjes","birthYear":"1954","deathYear":"\\N","primaryProfession":"writer,director,script_department","knownForTitles":"tt0088939,tt0097576,tt0133952,tt2352230","kind":"profile_collision"}, + {"nconst":"nm0586528","primaryName":"Shin'ichirô Miki","birthYear":"1968","deathYear":"\\N","primaryProfession":"actor,music_department,miscellaneous","knownForTitles":"tt0156887,tt0375568,tt0210234,tt0235679","kind":"profile_collision"}, + {"nconst":"nm0586568","primaryName":"Mads Mikkelsen","birthYear":"1965","deathYear":"\\N","primaryProfession":"actor,producer,miscellaneous","knownForTitles":"tt2243973,tt2106476,tt1211837,tt10288566","kind":"profile_collision"}, + {"nconst":"nm0588087","primaryName":"Christopher Miller","birthYear":"1975","deathYear":"\\N","primaryProfession":"producer,writer,actor","knownForTitles":"tt1490017,tt12042730,tt0305011,tt9362722","kind":"profile_collision"}, + {"nconst":"nm0593348","primaryName":"Gavin Mitchell","birthYear":"1964","deathYear":"\\N","primaryProfession":"actor,archive_footage","knownForTitles":"tt1672845,tt0238793,tt6679794,tt0115751","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0594488","primaryName":"Kôhei Miyauchi","birthYear":"1929","deathYear":"1995","primaryProfession":"actor,archive_sound","knownForTitles":"tt0087544,tt0091211,tt0142240,tt0088509","kind":"profile_collision"}, + {"nconst":"nm0594503","primaryName":"Hayao Miyazaki","birthYear":"1941","deathYear":"\\N","primaryProfession":"animation_department,writer,art_department","knownForTitles":"tt0245429,tt0096283,tt0347149,tt0119698","kind":"profile_collision"}, + {"nconst":"nm0595567","primaryName":"Donald Moffat","birthYear":"1930","deathYear":"2018","primaryProfession":"actor,archive_footage","knownForTitles":"tt0084787,tt0109444,tt0086197,tt0081353","kind":"profile_collision"}, + {"nconst":"nm0597223","primaryName":"Janel Moloney","birthYear":"1969","deathYear":"\\N","primaryProfession":"actress,soundtrack,archive_footage","knownForTitles":"tt0200276,tt8134470,tt12677870,tt2699128","kind":"profile_collision"}, + {"nconst":"nm0598748","primaryName":"Felicity Montagu","birthYear":"1960","deathYear":"\\N","primaryProfession":"actress,director,soundtrack","knownForTitles":"tt0243155,tt0455538,tt0395404,tt0469021","kind":"profile_collision"}, + {"nconst":"nm0601553","primaryName":"Mandy Moore","birthYear":"1984","deathYear":"\\N","primaryProfession":"actress,producer,writer","knownForTitles":"tt0281358,tt0398286,tt0332375,tt0360139","kind":"profile_collision"}, + {"nconst":"nm0604948","primaryName":"Peter Morgan","birthYear":"1963","deathYear":"\\N","primaryProfession":"writer,producer,actor","knownForTitles":"tt0870111,tt4786824,tt0455590,tt0436697","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0606487","primaryName":"Dean Norris","birthYear":"1963","deathYear":"\\N","primaryProfession":"actor,producer,soundtrack","knownForTitles":"tt0903747,tt0103064,tt0100802,tt3704050","kind":"profile_collision"}, + {"nconst":"nm0611148","primaryName":"Wanja Mues","birthYear":"1973","deathYear":"\\N","primaryProfession":"actor,director,assistant_director","knownForTitles":"tt0253474,tt0372183,tt0121037,tt0891414","kind":"profile_collision"}, + {"nconst":"nm0613997","primaryName":"Christopher Murney","birthYear":"1943","deathYear":"\\N","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0101410,tt0091499,tt0115333,tt0072251","kind":"profile_collision"}, + {"nconst":"nm0614165","primaryName":"Cillian Murphy","birthYear":"1976","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt0411195,tt0289043,tt15398776,tt0421239","kind":"profile_collision"}, + {"nconst":"nm0614682","primaryName":"Ryan Murphy","birthYear":"1965","deathYear":"\\N","primaryProfession":"producer,writer,music_department","knownForTitles":"tt1327801,tt10161886,tt1844624,tt7562112","kind":"profile_collision"}, + {"nconst":"nm0616729","primaryName":"Harry Myers","birthYear":"1882","deathYear":"1938","primaryProfession":"actor,director,writer","knownForTitles":"tt0021749,tt1204019,tt0012067,tt0017654","kind":"profile_collision"}, + {"nconst":"nm0619684","primaryName":"Ghanshyam Nayak","birthYear":"1944","deathYear":"2021","primaryProfession":"actor,music_department","knownForTitles":"tt1708446,tt0133024,tt0374271,tt0347332","kind":"profile_collision"}, + {"nconst":"nm0619923","primaryName":"Olivier Nakache","birthYear":"1973","deathYear":"\\N","primaryProfession":"writer,producer,director","knownForTitles":"tt1675434,tt8655470,tt5699154,tt11080216","kind":"profile_collision"}, + {"nconst":"nm0619938","primaryName":"Tatsuya Nakadai","birthYear":"1932","deathYear":"2025","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0056058,tt0080979,tt0089881,tt0055233","kind":"profile_collision"}, + {"nconst":"nm0622288","primaryName":"Jeff Nathanson","birthYear":"1965","deathYear":"\\N","primaryProfession":"writer,script_department,producer","knownForTitles":"tt0264464,tt0120179,tt1790809,tt0293564","kind":"profile_collision"}, + {"nconst":"nm0625167","primaryName":"Barry Nelson","birthYear":"1917","deathYear":"2007","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0081505,tt0065377,tt0035959,tt0034172","kind":"profile_collision"}, + {"nconst":"nm0632769","primaryName":"Tomohiro Nishimura","birthYear":"1961","deathYear":"\\N","primaryProfession":"actor,sound_department,writer","knownForTitles":"tt0096283,tt0110008,tt2343539,tt0228456","kind":"profile_collision"}, + {"nconst":"nm0636435","primaryName":"Akiyuki Nosaka","birthYear":"1930","deathYear":"2015","primaryProfession":"writer,actor,archive_footage","knownForTitles":"tt0095327,tt0219359,tt0060560,tt0139864","kind":"profile_collision"}, + {"nconst":"nm0637586","primaryName":"Masako Nozawa","birthYear":"1936","deathYear":"\\N","primaryProfession":"actress,miscellaneous,soundtrack","knownForTitles":"tt2263944,tt3819668,tt0142251,tt0142235","kind":"profile_collision"}, + {"nconst":"nm0640193","primaryName":"Andrew O'Connor","birthYear":"\\N","deathYear":"\\N","primaryProfession":"producer,writer,actor","knownForTitles":"tt0387764,tt0841027,tt1800246,tt2758296","kind":"profile_collision"}, + {"nconst":"nm0640307","primaryName":"Donald O'Connor","birthYear":"1925","deathYear":"2003","primaryProfession":"actor,producer,director","knownForTitles":"tt0045152,tt0045899,tt0045592,tt0041479","kind":"profile_collision"}, + {"nconst":"nm0643000","primaryName":"Simon Oakland","birthYear":"1915","deathYear":"1983","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0054215,tt0055614,tt0062765,tt0055992","kind":"profile_collision"}, + {"nconst":"nm0643805","primaryName":"Uwe Ochsenknecht","birthYear":"1956","deathYear":"\\N","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt1885102","kind":"profile_collision"}, + {"nconst":"nm0644905","primaryName":"Oh Tae-kyung","birthYear":"1982","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt0364569,tt0107171,tt1606384,tt3118758","kind":"profile_collision"}, + {"nconst":"nm0648780","primaryName":"Yoko Ono","birthYear":"1933","deathYear":"\\N","primaryProfession":"director,actress,composer","knownForTitles":"tt14858658,tt32246771,tt9735318,tt1758830","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0656929","primaryName":"Josh Pais","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt10166622,tt7286456,tt2249007,tt0100758","kind":"profile_collision"}, + {"nconst":"nm0657333","primaryName":"Chuck Palahniuk","birthYear":"1962","deathYear":"\\N","primaryProfession":"writer,actor,producer","knownForTitles":"tt0137523,tt1024715,tt4546372,tt1773686","kind":"profile_collision"}, + {"nconst":"nm0658244","primaryName":"Geoffrey Palmer","birthYear":"1927","deathYear":"2020","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0120347,tt0838232,tt0110428,tt0119280","kind":"profile_collision"}, + {"nconst":"nm0661791","primaryName":"Park Chan-wook","birthYear":"1963","deathYear":"\\N","primaryProfession":"producer,writer,director","knownForTitles":"tt4016934,tt0364569,tt0762073,tt12477480","kind":"profile_collision"}, + {"nconst":"nm0661825","primaryName":"Grace Park","birthYear":"1974","deathYear":"\\N","primaryProfession":"actress,archive_footage","knownForTitles":"tt1600194,tt0407362,tt0314979,tt0165929","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0668845","primaryName":"Maxine Peake","birthYear":"1974","deathYear":"\\N","primaryProfession":"actress,director,writer","knownForTitles":"tt2980516,tt31514146,tt3814808,tt0468515","kind":"profile_collision"}, + {"nconst":"nm0669254","primaryName":"Daniel Zacapa","birthYear":"1951","deathYear":"\\N","primaryProfession":"actor,producer","knownForTitles":"tt1836195,tt0236493,tt0114369,tt0108037","kind":"profile_collision"}, + {"nconst":"nm0672225","primaryName":"Bob Penny","birthYear":"1935","deathYear":"2022","primaryProfession":"actor","knownForTitles":"tt0095647,tt0109830,tt0104952,tt0256415","kind":"profile_collision"}, + {"nconst":"nm0675490","primaryName":"Nehemiah Persoff","birthYear":"1919","deathYear":"2022","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0090633,tt0053291,tt0096320,tt0051207","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0677758","primaryName":"Sandro Petraglia","birthYear":"1947","deathYear":"\\N","primaryProfession":"writer,director,assistant_director","knownForTitles":"tt0346336,tt0770829,tt0418110,tt0104663","kind":"profile_collision"}, + {"nconst":"nm0680846","primaryName":"Todd Phillips","birthYear":"1970","deathYear":"\\N","primaryProfession":"producer,director,writer","knownForTitles":"tt7286456,tt1231583,tt0302886,tt11315808","kind":"profile_collision"}, + {"nconst":"nm0682960","primaryName":"Andreas Pietschmann","birthYear":"1969","deathYear":"\\N","primaryProfession":"actor,miscellaneous,writer","knownForTitles":"tt5753856,tt9319668,tt3146360,tt15341198","kind":"profile_collision"}, + {"nconst":"nm0683379","primaryName":"Mitch Pileggi","birthYear":"1952","deathYear":"\\N","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0103772,tt0443701,tt0106179,tt0098320","kind":"profile_collision"}, + {"nconst":"nm0684500","primaryName":"Dominique Pinon","birthYear":"1955","deathYear":"\\N","primaryProfession":"actor,music_department,miscellaneous","knownForTitles":"tt0101700,tt0118583,tt0211915,tt0112682","kind":"profile_collision"}, + {"nconst":"nm0703522","primaryName":"Pearce Quigley","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,miscellaneous,soundtrack","knownForTitles":"tt1023114,tt1182350,tt1212419,tt0366777","kind":"profile_collision"}, + {"nconst":"nm0710020","primaryName":"Joe Ranft","birthYear":"1960","deathYear":"2005","primaryProfession":"writer,actor,miscellaneous","knownForTitles":"tt0092695,tt0317219,tt0114709,tt0120363","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0710829","primaryName":"Anthony Rapp","birthYear":"1971","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt0294870,tt0106677,tt0268978,tt0092513","kind":"profile_collision"}, + {"nconst":"nm0714698","primaryName":"Lance Reddick","birthYear":"1962","deathYear":"2023","primaryProfession":"actor,producer,soundtrack","knownForTitles":"tt2911666,tt4425200,tt3502248,tt2334879","kind":"profile_collision"}, + {"nconst":"nm0717709","primaryName":"Kelly Reilly","birthYear":"1977","deathYear":"\\N","primaryProfession":"actress,producer,archive_footage","knownForTitles":"tt0414387,tt1020530,tt1907668,tt0988045","kind":"profile_collision"}, + {"nconst":"nm0724245","primaryName":"Michael Richards","birthYear":"1949","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt0098904,tt0098546,tt0100419,tt0109068","kind":"profile_collision"}, + {"nconst":"nm0728132","primaryName":"Leon Rippy","birthYear":"1949","deathYear":"\\N","primaryProfession":"actor,archive_footage","knownForTitles":"tt0187393,tt0271367,tt0348914,tt0111282","kind":"profile_collision"}, + {"nconst":"nm0728795","primaryName":"Paul Ritter","birthYear":"1966","deathYear":"2021","primaryProfession":"actor,soundtrack","knownForTitles":"tt0830515,tt0367959,tt1844923,tt0375920","kind":"profile_collision"}, + {"nconst":"nm0728812","primaryName":"Thelma Ritter","birthYear":"1902","deathYear":"1969","primaryProfession":"actress,soundtrack,archive_footage","knownForTitles":"tt0042192,tt0047396,tt0043792,tt0046187","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0733153","primaryName":"Tony Robinson","birthYear":"1946","deathYear":"\\N","primaryProfession":"producer,actor,writer","knownForTitles":"tt0108961,tt0096642,tt0096548,tt0212579","kind":"profile_collision"}, + {"nconst":"nm0739683","primaryName":"Erwin Rommel","birthYear":"1891","deathYear":"1944","primaryProfession":"miscellaneous,archive_footage","knownForTitles":"tt2457532,tt0035803,tt0120933,tt4634466","kind":"profile_collision"}, + {"nconst":"nm0741103","primaryName":"Misty Rosas","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,miscellaneous,stunts","knownForTitles":"tt12162902,tt8111088,tt1951264,tt0338526","kind":"profile_collision"}, + {"nconst":"nm0744834","primaryName":"Eli Roth","birthYear":"\\N","deathYear":"\\N","primaryProfession":"director,writer,actor","knownForTitles":"tt36893729,tt1448754,tt0361748,tt0450278","kind":"profile_collision"}, + {"nconst":"nm0745310","primaryName":"Bryce Papenbrook","birthYear":"1986","deathYear":"\\N","primaryProfession":"actor,miscellaneous,sound_department","knownForTitles":"tt2560140,tt1799631,tt2580046,tt1034314","kind":"profile_collision"}, + {"nconst":"nm0745751","primaryName":"Jonathan Roumie","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,producer,location_management","knownForTitles":"tt32306991,tt5622316,tt30787627,tt10098448","kind":"profile_collision"}, + {"nconst":"nm0746583","primaryName":"Nicholas Rowe","birthYear":"1966","deathYear":"\\N","primaryProfession":"actor,archive_footage","knownForTitles":"tt14728854,tt15565872,tt11646832,tt5936448","kind":"profile_collision"}, + {"nconst":"nm0747420","primaryName":"Andre Royo","birthYear":"1968","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt1512235,tt1714206,tt1564368,tt1999995","kind":"profile_collision"}, + {"nconst":"nm0751648","primaryName":"Joe Russo","birthYear":"1971","deathYear":"\\N","primaryProfession":"producer,director,writer","knownForTitles":"tt4154796,tt6710474,tt4154756,tt1843866","kind":"profile_collision"}, + {"nconst":"nm0753480","primaryName":"Daisuke Ryû","birthYear":"1957","deathYear":"2021","primaryProfession":"actor,archive_footage","knownForTitles":"tt0080979,tt0089881,tt0230780,tt0164707","kind":"profile_collision"}, + {"nconst":"nm0755133","primaryName":"Andrew Sachs","birthYear":"1930","deathYear":"2016","primaryProfession":"actor,writer,soundtrack","knownForTitles":"tt0072500,tt0082517,tt0219454,tt0075696","kind":"profile_collision"}, + {"nconst":"nm0759757","primaryName":"Aldo Sambrell","birthYear":"1931","deathYear":"2010","primaryProfession":"actor,director,writer","knownForTitles":"tt0059578,tt0060196,tt0070893,tt0099558","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0761836","primaryName":"William Sanderson","birthYear":"1944","deathYear":"\\N","primaryProfession":"actor,archive_footage","knownForTitles":"tt0083658,tt0116830,tt0348914,tt0844441","kind":"profile_collision"}, + {"nconst":"nm0766120","primaryName":"Brooke Satchwell","birthYear":"1980","deathYear":"\\N","primaryProfession":"actress,producer,archive_footage","knownForTitles":"tt0088580,tt10648342,tt13589004,tt1132600","kind":"profile_collision"}, + {"nconst":"nm0782968","primaryName":"Hubert Selby Jr.","birthYear":"1928","deathYear":"2004","primaryProfession":"writer,actor","knownForTitles":"tt0180093,tt0289944,tt0120081,tt0089384","kind":"profile_collision"}, + {"nconst":"nm0785227","primaryName":"Andy Serkis","birthYear":"1964","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt3450958,tt1318514,tt2103281,tt0167261","kind":"profile_collision"}, + {"nconst":"nm0786641","primaryName":"Brent Sexton","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,producer","knownForTitles":"tt0316465,tt0408790,tt1082807,tt1175491","kind":"profile_collision"}, + {"nconst":"nm0791877","primaryName":"Suzanne Shepherd","birthYear":"1934","deathYear":"2023","primaryProfession":"actress,archive_footage","knownForTitles":"tt0119558,tt0098554,tt0099685,tt0095690","kind":"profile_collision"}, + {"nconst":"nm0793782","primaryName":"Shin Goo","birthYear":"1936","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt0140825,tt0294252,tt11498038,tt0464651","kind":"profile_collision"}, + {"nconst":"nm0794002","primaryName":"Yoshiko Shinohara","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress","knownForTitles":"tt0095327,tt0078772,tt0496467,tt0182601","kind":"profile_collision"}, + {"nconst":"nm0795975","primaryName":"Joe Shuster","birthYear":"1914","deathYear":"1992","primaryProfession":"writer,miscellaneous,art_department","knownForTitles":"tt0078346,tt0770828,tt5950044,tt0086393","kind":"profile_collision"}, + {"nconst":"nm0802107","primaryName":"Dara Singh Randhawa","birthYear":"1928","deathYear":"2012","primaryProfession":"actor,director,producer","knownForTitles":"tt0347304,tt0213300,tt0213108,tt0158417","kind":"profile_collision"}, + {"nconst":"nm0812220","primaryName":"André Sogliuzzo","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,sound_department,miscellaneous","knownForTitles":"tt1055369,tt0128853,tt0338348,tt0491117","kind":"profile_collision"}, + {"nconst":"nm0823563","primaryName":"Mike Starr","birthYear":"1950","deathYear":"\\N","primaryProfession":"actor,producer,soundtrack","knownForTitles":"tt0109707,tt0109686,tt0098554,tt0100150","kind":"profile_collision"}, + {"nconst":"nm0825010","primaryName":"Joseph Stefano","birthYear":"1922","deathYear":"2006","primaryProfession":"miscellaneous,writer,producer","knownForTitles":"tt0054215,tt0155975,tt0056777,tt0092455","kind":"profile_collision"}, + {"nconst":"nm0827307","primaryName":"Bob Stephenson","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt11834150,tt4925292,tt1637706,tt0137523","kind":"profile_collision"}, + {"nconst":"nm0829032","primaryName":"Ray Stevenson","birthYear":"1964","deathYear":"2023","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt1509767,tt0450314,tt1416801,tt0800369","kind":"profile_collision"}, + {"nconst":"nm0833185","primaryName":"Sonny Strait","birthYear":"1965","deathYear":"\\N","primaryProfession":"actor,miscellaneous,sound_department","knownForTitles":"tt3819668,tt2263944,tt1409055,tt0214341","kind":"profile_collision"}, + {"nconst":"nm0834989","primaryName":"Jeremy Strong","birthYear":"1978","deathYear":"\\N","primaryProfession":"actor,production_department,producer","knownForTitles":"tt8368368,tt1596363,tt1070874,tt1872194","kind":"profile_collision"}, + {"nconst":"nm0836071","primaryName":"Wes Studi","birthYear":"1947","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt0104691,tt0113277,tt0132347,tt0118956","kind":"profile_collision"}, + {"nconst":"nm0847223","primaryName":"Isao Takahata","birthYear":"1935","deathYear":"2018","primaryProfession":"director,assistant_director,writer","knownForTitles":"tt2576852,tt0095327,tt0102587,tt0110008","kind":"profile_collision"}, + {"nconst":"nm0848801","primaryName":"Yukari Tamura","birthYear":"1976","deathYear":"\\N","primaryProfession":"actress,music_department,composer","knownForTitles":"tt1910272,tt2553376,tt21423786,tt0824043","kind":"profile_collision"}, + {"nconst":"nm0850733","primaryName":"Genndy Tartakovsky","birthYear":"1970","deathYear":"\\N","primaryProfession":"producer,writer,director","knownForTitles":"tt0278238,tt10332508,tt0361243,tt5220122","kind":"profile_collision"}, + {"nconst":"nm0853299","primaryName":"Vaughn Taylor","birthYear":"1911","deathYear":"1983","primaryProfession":"actor,archive_footage","knownForTitles":"tt0054215,tt0074597,tt0051459,tt0065446","kind":"profile_collision"}, + {"nconst":"nm0855564","primaryName":"Lee Tergesen","birthYear":"1965","deathYear":"\\N","primaryProfession":"actor,producer,soundtrack","knownForTitles":"tt0118421,tt0995832,tt0105793,tt0340855","kind":"profile_collision"}, + {"nconst":"nm0856012","primaryName":"John Terry","birthYear":"1950","deathYear":"\\N","primaryProfession":"actor,archive_footage","knownForTitles":"tt0093058,tt0093428,tt0105046,tt0443706","kind":"profile_collision"}, + {"nconst":"nm0860724","primaryName":"Sophie Thompson","birthYear":"1962","deathYear":"\\N","primaryProfession":"actress,soundtrack,archive_footage","knownForTitles":"tt0280707,tt0116191,tt0109831,tt0879870","kind":"profile_collision"}, + {"nconst":"nm0861075","primaryName":"R.H. Thomson","birthYear":"1947","deathYear":"\\N","primaryProfession":"actor,stunts,soundtrack","knownForTitles":"tt1352824,tt0084117,tt0083201,tt0157704","kind":"profile_collision"}, + {"nconst":"nm0862916","primaryName":"Tommy Tiernan","birthYear":"1969","deathYear":"\\N","primaryProfession":"actor,writer,director","knownForTitles":"tt5198068,tt0199314,tt11997646,tt1804497","kind":"profile_collision"}, + {"nconst":"nm0862932","primaryName":"Jacob Tierney","birthYear":"1979","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt35495073,tt1295072,tt4647692,tt0339827","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0866058","primaryName":"J.R.R. Tolkien","birthYear":"1892","deathYear":"1973","primaryProfession":"writer,miscellaneous,soundtrack","knownForTitles":"tt0120737,tt0167260,tt0167261,tt0903624","kind":"profile_collision"}, + {"nconst":"nm0868153","primaryName":"Giuseppe Tornatore","birthYear":"1956","deathYear":"\\N","primaryProfession":"director,writer,actor","knownForTitles":"tt1924396,tt0095765,tt0120731,tt0213847","kind":"profile_collision"}, + {"nconst":"nm0868219","primaryName":"Guillermo del Toro","birthYear":"1964","deathYear":"\\N","primaryProfession":"writer,producer,director","knownForTitles":"tt0457430,tt0167190,tt1488589,tt5580390","kind":"profile_collision"}, + {"nconst":"nm0871287","primaryName":"Henry Travers","birthYear":"1874","deathYear":"1965","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0038650,tt0036342,tt0024184,tt0033373","kind":"profile_collision"}, + {"nconst":"nm0872370","primaryName":"Frederick Treves","birthYear":"1925","deathYear":"2012","primaryProfession":"actor,archive_footage","knownForTitles":"tt0080678,tt0424463,tt0092360,tt0078351","kind":"profile_collision"}, + {"nconst":"nm0872910","primaryName":"Jasmine Trinca","birthYear":"1981","deathYear":"\\N","primaryProfession":"actress,director,writer","knownForTitles":"tt2515034,tt0208990,tt0346336,tt6306400","kind":"profile_collision"}, + {"nconst":"nm0874339","primaryName":"Donald Trump","birthYear":"1946","deathYear":"\\N","primaryProfession":"producer,actor,writer","knownForTitles":"tt0364782,tt0104431,tt0313737,tt0120533","kind":"profile_collision"}, + {"nconst":"nm0875362","primaryName":"Yôko Tsukasa","birthYear":"1934","deathYear":"\\N","primaryProfession":"actress,soundtrack,archive_footage","knownForTitles":"tt0055630,tt0410164,tt0060508,tt0052579","kind":"profile_collision"}, + {"nconst":"nm0875477","primaryName":"Keiko Tsushima","birthYear":"1926","deathYear":"2012","primaryProfession":"actress,script_department,soundtrack","knownForTitles":"tt0047478,tt0348003,tt0073918,tt0164078","kind":"profile_collision"}, + {"nconst":"nm0877244","primaryName":"James Turley","birthYear":"1929","deathYear":"2016","primaryProfession":"actor,assistant_director,stunts","knownForTitles":"tt0096684,tt0052520,tt0091281,tt0067258","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0878349","primaryName":"Joe Tuttle","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt5290382,tt0048845,tt12677870,tt7491982","kind":"profile_collision"}, + {"nconst":"nm0882581","primaryName":"Kenji Utsumi","birthYear":"1937","deathYear":"2013","primaryProfession":"actor,miscellaneous,soundtrack","knownForTitles":"tt2263944,tt0142371,tt0365498,tt0462422","kind":"profile_collision"}, + {"nconst":"nm0893257","primaryName":"Milo Ventimiglia","birthYear":"1977","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt0813715,tt1034032,tt5555260,tt0964539","kind":"profile_collision"}, + {"nconst":"nm0897845","primaryName":"Soledad Villamil","birthYear":"1969","deathYear":"\\N","primaryProfession":"actress,soundtrack,archive_footage","knownForTitles":"tt1305806,tt0210843,tt0378453,tt0204110","kind":"profile_collision"}, + {"nconst":"nm0905154","primaryName":"Lana Wachowski","birthYear":"1965","deathYear":"\\N","primaryProfession":"writer,producer,director","knownForTitles":"tt0133093,tt0115736,tt1617661,tt1371111","kind":"profile_collision"}, + {"nconst":"nm0908824","primaryName":"Randall Wallace","birthYear":"1949","deathYear":"\\N","primaryProfession":"writer,producer,director","knownForTitles":"tt0277434,tt0213149,tt0112573,tt1028576","kind":"profile_collision"}, + {"nconst":"nm0915208","primaryName":"Naomi Watts","birthYear":"1968","deathYear":"\\N","primaryProfession":"actress,producer,soundtrack","knownForTitles":"tt0166924,tt0360717,tt1649419,tt2562232","kind":"profile_collision"}, + {"nconst":"nm0916073","primaryName":"Danny Webb","birthYear":"1958","deathYear":"\\N","primaryProfession":"actor,stunts,archive_footage","knownForTitles":"tt0103644,tt0102797,tt1893256,tt0985699","kind":"profile_collision"}, + {"nconst":"nm0922035","primaryName":"Dominic West","birthYear":"1969","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt0306414,tt0299658,tt0450314,tt0356618","kind":"profile_collision"}, + {"nconst":"nm0924154","primaryName":"Shea Whigham","birthYear":"1969","deathYear":"\\N","primaryProfession":"actor,producer,archive_footage","knownForTitles":"tt1675192,tt0477139,tt2024469,tt1800241","kind":"profile_collision"}, + {"nconst":"nm0925418","primaryName":"Ruth White","birthYear":"1914","deathYear":"1969","primaryProfession":"actress,soundtrack","knownForTitles":"tt0056592,tt0064665,tt0061747,tt0062794","kind":"profile_collision"}, + {"nconst":"nm0926235","primaryName":"James Whitmore","birthYear":"1921","deathYear":"2009","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0111161,tt0047573,tt0073053,tt0041163","kind":"profile_collision"}, + {"nconst":"nm0931404","primaryName":"Olivia Williams","birthYear":"1968","deathYear":"\\N","primaryProfession":"actress,soundtrack,archive_footage","knownForTitles":"tt1139328,tt1174732,tt0128445,tt0167404","kind":"profile_collision"}, + {"nconst":"nm0932112","primaryName":"Mykelti Williamson","birthYear":"1957","deathYear":"\\N","primaryProfession":"actor,director,writer","knownForTitles":"tt0109830,tt4094724,tt2671706,tt0118880","kind":"profile_collision"}, + {"nconst":"nm0932302","primaryName":"Dave Willis","birthYear":"1970","deathYear":"\\N","primaryProfession":"writer,actor,producer","knownForTitles":"tt0297494,tt0457146,tt0455326,tt1486217","kind":"profile_collision"}, + {"nconst":"nm0933988","primaryName":"Rainn Wilson","birthYear":"1966","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt0386676,tt2490326,tt1512235,tt0465624","kind":"profile_collision"}, + {"nconst":"nm0934014","primaryName":"Richard Wilson","birthYear":"1936","deathYear":"\\N","primaryProfession":"actor,director,miscellaneous","knownForTitles":"tt0098882,tt0120483,tt0087892,tt0377981","kind":"profile_collision"}, + {"nconst":"nm0934318","primaryName":"Anna Wilson-Jones","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,producer","knownForTitles":"tt5137338,tt2085059,tt1789074,tt8740790","kind":"profile_collision"}, + {"nconst":"nm0943978","primaryName":"Keenan Wynn","birthYear":"1916","deathYear":"1986","primaryProfession":"actor,stunts,soundtrack","knownForTitles":"tt0057012,tt0062138,tt0078087,tt0038420","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm0945322","primaryName":"Kappei Yamaguchi","birthYear":"1965","deathYear":"\\N","primaryProfession":"actor,music_department,miscellaneous","knownForTitles":"tt0388629,tt0877057,tt0290223,tt0366621","kind":"profile_collision"}, + {"nconst":"nm0950784","primaryName":"Masayuki Yui","birthYear":"1947","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt0089881,tt0080979,tt0100998,tt0243609","kind":"profile_collision"}, + {"nconst":"nm0951520","primaryName":"Jonathan Zaccaï","birthYear":"1970","deathYear":"\\N","primaryProfession":"actor,director,writer","knownForTitles":"tt1226334,tt0955308,tt4063800,tt11703710","kind":"profile_collision"}, + {"nconst":"nm0957909","primaryName":"Ayelet Zurer","birthYear":"1969","deathYear":"\\N","primaryProfession":"actress,producer,archive_footage","knownForTitles":"tt18923754,tt0808151,tt0770828,tt0408306","kind":"profile_collision"}, + {"nconst":"nm0971135","primaryName":"Craig Parkinson","birthYear":"1976","deathYear":"\\N","primaryProfession":"actor,archive_footage","knownForTitles":"tt1341167,tt1548850,tt0421082,tt0437954","kind":"profile_collision"}, + {"nconst":"nm0997448","primaryName":"Penelope Markopoulou","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress","knownForTitles":"tt6280810,tt14395312,tt28693459,tt0270176","kind":"profile_collision"}, + {"nconst":"nm0999118","primaryName":"Michael Sinterniklaas","birthYear":"1972","deathYear":"\\N","primaryProfession":"actor,miscellaneous,producer","knownForTitles":"tt5311514,tt0417373,tt0318913,tt1474276","kind":"profile_collision"}, + {"nconst":"nm1002609","primaryName":"Nicholas Braun","birthYear":"1988","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt7660850,tt1292566,tt0405325,tt1659337","kind":"profile_collision"}, + {"nconst":"nm10040186","primaryName":"Asante Blackk","birthYear":"2001","deathYear":"\\N","primaryProfession":"actor,producer","knownForTitles":"tt5555260,tt7137906,tt12313074,tt7645334","kind":"profile_collision"}, + {"nconst":"nm1005180","primaryName":"Matt Wolpert","birthYear":"\\N","deathYear":"\\N","primaryProfession":"writer,producer,miscellaneous","knownForTitles":"tt7772588,tt2802850,tt2788432","kind":"profile_collision"}, + {"nconst":"nm1010540","primaryName":"Terence Winter","birthYear":"1960","deathYear":"\\N","primaryProfession":"producer,writer,actor","knownForTitles":"tt0141842,tt0993846,tt0979432,tt0430308","kind":"profile_collision"}, + {"nconst":"nm10406290","primaryName":"Conor McKenna","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt35495073","kind":"profile_collision"}, + {"nconst":"nm1056790","primaryName":"Nicholas Aaron","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt0185906,tt32278481,tt0379557,tt11771270","kind":"profile_collision"}, + {"nconst":"nm1064352","primaryName":"Tracy Reed","birthYear":"1941","deathYear":"2012","primaryProfession":"actress,archive_footage","knownForTitles":"tt0057012,tt0058586,tt0061452,tt0063962","kind":"profile_collision"}, + {"nconst":"nm1069587","primaryName":"Darshan Kumaar","birthYear":"1986","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt3742284,tt9544034,tt11045422,tt10811166","kind":"profile_collision"}, + {"nconst":"nm10729513","primaryName":"Candice van Litsenborgh","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,writer,producer","knownForTitles":"tt11737520,tt33058344,tt39371050,tt27072067","kind":"profile_collision"}, + {"nconst":"nm1080019","primaryName":"Takayuki Sugô","birthYear":"1952","deathYear":"\\N","primaryProfession":"actor,miscellaneous,archive_sound","knownForTitles":"tt3295046,tt2388184,tt3513498,tt2496120","kind":"profile_collision"}, + {"nconst":"nm1080418","primaryName":"Doug Allan","birthYear":"1951","deathYear":"2026","primaryProfession":"cinematographer,camera_department,assistant_director","knownForTitles":"tt0296310,tt1806234,tt1762300,tt0300880","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm1086543","primaryName":"Amanda Seyfried","birthYear":"1985","deathYear":"\\N","primaryProfession":"actress,producer,soundtrack","knownForTitles":"tt1707386,tt0795421,tt0377092,tt0989757","kind":"profile_collision"}, + {"nconst":"nm10916931","primaryName":"Elle Chapman","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,art_department,art_director","knownForTitles":"tt33204276,tt7405458,tt1844624","kind":"profile_collision"}, + {"nconst":"nm11005835","primaryName":"Megan Stalter","birthYear":"1990","deathYear":"\\N","primaryProfession":"actress,writer,producer","knownForTitles":"tt11815682,tt21108842,tt10999738,tt21335356","kind":"profile_collision"}, + {"nconst":"nm1101677","primaryName":"Jun Fukuyama","birthYear":"1978","deathYear":"\\N","primaryProfession":"actor,music_department,art_department","knownForTitles":"tt0994314,tt3837246,tt3944082,tt3215154","kind":"profile_collision"}, + {"nconst":"nm1102891","primaryName":"Kristen Schaal","birthYear":"1978","deathYear":"\\N","primaryProfession":"actress,miscellaneous,writer","knownForTitles":"tt0427152,tt1985966,tt3398228,tt0477051","kind":"profile_collision"}, + {"nconst":"nm11062620","primaryName":"Sukumar Tudu","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt23849204,tt35855020,tt27163202,tt27996020","kind":"profile_collision"}, + {"nconst":"nm11070988","primaryName":"Liz Schack","birthYear":"\\N","deathYear":"\\N","primaryProfession":"assistant_director,miscellaneous,producer","knownForTitles":"tt37885038,tt12181902,tt8284230,tt27201401","kind":"profile_collision"}, + {"nconst":"nm11170246","primaryName":"Mahender Bisht","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,director","knownForTitles":"tt13510660,tt33559171,tt9680440,tt27235410","kind":"profile_collision"}, + {"nconst":"nm1126340","primaryName":"Ryûnosuke Kamiki","birthYear":"1993","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt23289160,tt5311514,tt1474276,tt0245429","kind":"profile_collision"}, + {"nconst":"nm1128050","primaryName":"Chris Addison","birthYear":"1971","deathYear":"\\N","primaryProfession":"director,actor,writer","knownForTitles":"tt0459159,tt1226774,tt0463827,tt1759761","kind":"profile_collision"}, + {"nconst":"nm11287356","primaryName":"Tre Mosley","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,writer,composer","knownForTitles":"tt10332508,tt22004662,tt10492672,tt8545540","kind":"profile_collision"}, + {"nconst":"nm1130251","primaryName":"Bráulio Mantovani","birthYear":"1963","deathYear":"\\N","primaryProfession":"writer,producer,script_department","knownForTitles":"tt1555149,tt0861739,tt0317248,tt0857355","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm11413442","primaryName":"Anthony Pavone","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt37287335,tt15408560,tt36583300,tt12597948","kind":"profile_collision"}, + {"nconst":"nm1142392","primaryName":"Rafael Pettersson","birthYear":"1976","deathYear":"\\N","primaryProfession":"actor,director,writer","knownForTitles":"tt1733785,tt0465974,tt0997023,tt2071609","kind":"profile_collision"}, + {"nconst":"nm1148550","primaryName":"Ava DuVernay","birthYear":"1972","deathYear":"\\N","primaryProfession":"writer,producer,miscellaneous","knownForTitles":"tt4419214,tt1020072,tt7137906,tt1211890","kind":"profile_collision"}, + {"nconst":"nm1165110","primaryName":"Chris Hemsworth","birthYear":"1983","deathYear":"\\N","primaryProfession":"actor,producer,soundtrack","knownForTitles":"tt0848228,tt3501632,tt1735898,tt10648342","kind":"profile_collision"}, + {"nconst":"nm1176985","primaryName":"Dave Bautista","birthYear":"1969","deathYear":"\\N","primaryProfession":"actor,producer,miscellaneous","knownForTitles":"tt2015381,tt1856101,tt3896198,tt1411250","kind":"profile_collision"}, + {"nconst":"nm1179578","primaryName":"Joel Johnstone","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt5788792,tt12887536,tt3530726,tt1870479","kind":"profile_collision"}, + {"nconst":"nm1179580","primaryName":"Seu Jorge","birthYear":"1970","deathYear":"\\N","primaryProfession":"music_artist,music_department,actor","knownForTitles":"tt7825208,tt0362270,tt1555149,tt0317248","kind":"profile_collision"}, + {"nconst":"nm12036313","primaryName":"Mabel Li","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,archive_footage","knownForTitles":"tt21132302,tt13515614,tt35836656,tt10970762","kind":"profile_collision"}, + {"nconst":"nm1208167","primaryName":"Diane Kruger","birthYear":"1976","deathYear":"\\N","primaryProfession":"actress,producer,miscellaneous","knownForTitles":"tt0361748,tt5723272,tt0368891,tt1401152","kind":"profile_collision"}, + {"nconst":"nm1209966","primaryName":"Oscar Isaac","birthYear":"1979","deathYear":"\\N","primaryProfession":"actor,producer,soundtrack","knownForTitles":"tt0470752,tt2042568,tt2937898,tt1312221","kind":"profile_collision"}, + {"nconst":"nm1214435","primaryName":"Charlie Cox","birthYear":"1982","deathYear":"\\N","primaryProfession":"actor,producer,archive_footage","knownForTitles":"tt3322312,tt2980516,tt10872600,tt0486655","kind":"profile_collision"}, + {"nconst":"nm12174956","primaryName":"Im Sung-jae","birthYear":"1987","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt20600022,tt11535228,tt24640580,tt38958590","kind":"profile_collision"}, + {"nconst":"nm1226341","primaryName":"Alberto Guerra","birthYear":"1982","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt15837600,tt8714904,tt6981430,tt33253070","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm1227481","primaryName":"Veronica Falcón","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,director,writer","knownForTitles":"tt5071412,tt2077823,tt0870154,tt32612507","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm1227825","primaryName":"Dorte Warnøe Høgh","birthYear":"\\N","deathYear":"\\N","primaryProfession":"writer,script_department,director","knownForTitles":"tt1333640,tt10834220,tt2025899,tt0328844","kind":"profile_collision"}, + {"nconst":"nm1229640","primaryName":"Hoon Lee","birthYear":"1973","deathYear":"\\N","primaryProfession":"actor,writer,archive_footage","knownForTitles":"tt5743796,tt2017109,tt3473640,tt3502248","kind":"profile_collision"}, + {"nconst":"nm1235366","primaryName":"Bret McKenzie","birthYear":"1976","deathYear":"\\N","primaryProfession":"actor,writer,composer","knownForTitles":"tt0863046,tt1204342,tt2281587,tt1985019","kind":"profile_collision"}, + {"nconst":"nm12794521","primaryName":"Mitchell Robertson","birthYear":"1998","deathYear":"\\N","primaryProfession":"actor,writer,director","knownForTitles":"tt32767294,tt30242198,tt13431512,tt13610344","kind":"profile_collision"}, + {"nconst":"nm1279638","primaryName":"Noah Hawley","birthYear":"1967","deathYear":"\\N","primaryProfession":"writer,producer,director","knownForTitles":"tt2802850,tt13623632,tt5114356,tt4756228","kind":"profile_collision"}, + {"nconst":"nm1310525","primaryName":"Lee Sun-kyun","birthYear":"1975","deathYear":"2023","primaryProfession":"actor,manager,soundtrack","knownForTitles":"tt6751668,tt3697626,tt1515205,tt2181460","kind":"profile_collision"}, + {"nconst":"nm1315809","primaryName":"Stephanie Sheh","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,miscellaneous,casting_director","knownForTitles":"tt5311514,tt0434665,tt3717532,tt0988824","kind":"profile_collision"}, + {"nconst":"nm1321655","primaryName":"Christopher Markus","birthYear":"1969","deathYear":"\\N","primaryProfession":"writer,producer,script_department","knownForTitles":"tt4154796,tt7766378,tt4154756,tt0458339","kind":"profile_collision"}, + {"nconst":"nm1321656","primaryName":"Stephen McFeely","birthYear":"1970","deathYear":"\\N","primaryProfession":"writer,producer,script_department","knownForTitles":"tt4154796,tt7766378,tt0458339,tt0363771","kind":"profile_collision"}, + {"nconst":"nm1334512","primaryName":"Ravi Khanvilkar","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,music_department,soundtrack","knownForTitles":"tt1934231,tt1395054,tt0986264,tt1091229","kind":"profile_collision"}, + {"nconst":"nm1334869","primaryName":"Logan Marshall-Green","birthYear":"1976","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt2400463,tt1314655,tt6499752,tt2250912","kind":"profile_collision"}, + {"nconst":"nm13443877","primaryName":"Nebi Tolga Yilmaz","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt21308718,tt28075973,tt13675832,tt9355244","kind":"profile_collision"}, + {"nconst":"nm13597133","primaryName":"Akshit Grover","birthYear":"\\N","deathYear":"\\N","primaryProfession":"producer,actor,assistant_director","knownForTitles":"tt7927936,tt8809646,tt22185582,tt15151786","kind":"profile_collision"}, + {"nconst":"nm13720608","primaryName":"Red Tennant","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt34611082,tt4928814,tt0096555","kind":"profile_collision"}, + {"nconst":"nm1392160","primaryName":"Claudio von Planta","birthYear":"1962","deathYear":"\\N","primaryProfession":"cinematographer,director,camera_department","knownForTitles":"tt10575718,tt2262173,tt3006246,tt7426120","kind":"profile_collision"}, + {"nconst":"nm14126734","primaryName":"Jeena Platon","birthYear":"2017","deathYear":"\\N","primaryProfession":"actress","knownForTitles":"tt8421350,tt23148340,tt5489746,tt36721210","kind":"profile_collision"}, + {"nconst":"nm1437925","primaryName":"Omi Vaidya","birthYear":"1982","deathYear":"\\N","primaryProfession":"actor,writer,editor","knownForTitles":"tt1187043,tt1090195,tt11154196,tt30489972","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm14380726","primaryName":"Fatih Aker","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt13675832","kind":"profile_collision"}, + {"nconst":"nm1486911","primaryName":"Shahab Hosseini","birthYear":"1974","deathYear":"\\N","primaryProfession":"actor,director,producer","knownForTitles":"tt1832382,tt1360860,tt5186714,tt22182170","kind":"profile_collision"}, + {"nconst":"nm1488529","primaryName":"Ahmet Mümtaz Taylan","birthYear":"1965","deathYear":"\\N","primaryProfession":"actor,composer,soundtrack","knownForTitles":"tt1831164,tt1827487,tt7748244,tt5927420","kind":"profile_collision"}, + {"nconst":"nm1506981","primaryName":"Bashir Salahuddin","birthYear":"1976","deathYear":"\\N","primaryProfession":"writer,actor,producer","knownForTitles":"tt2334871,tt8310486,tt9272514,tt1745960","kind":"profile_collision"}, + {"nconst":"nm1512156","primaryName":"Kate Higgins","birthYear":"1969","deathYear":"\\N","primaryProfession":"actress,miscellaneous,music_department","knownForTitles":"tt5848272,tt3124992,tt5834262,tt3717532","kind":"profile_collision"}, + {"nconst":"nm1515989","primaryName":"Mark Proksch","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt7908628,tt3032476,tt0386676,tt1780441","kind":"profile_collision"}, + {"nconst":"nm1519739","primaryName":"Nika King","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,producer,writer","knownForTitles":"tt8772296,tt4971144,tt4507442,tt1378167","kind":"profile_collision"}, + {"nconst":"nm1537825","primaryName":"Sam Heughan","birthYear":"1980","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt3006802,tt1083448,tt0401019,tt0390197","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm1543989","primaryName":"Aml Ameen","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt1790864,tt13659918,tt0435680,tt11804152","kind":"profile_collision"}, + {"nconst":"nm1555488","primaryName":"Jessy Hodges","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,producer,writer","knownForTitles":"tt5348176,tt35946742,tt9686380,tt8324422","kind":"profile_collision"}, + {"nconst":"nm1569276","primaryName":"Chadwick Boseman","birthYear":"1976","deathYear":"2020","primaryProfession":"actor,producer,writer","knownForTitles":"tt1825683,tt3498820,tt2473602,tt4154756","kind":"profile_collision"}, + {"nconst":"nm1580911","primaryName":"Brian Baumgartner","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt0386676,tt0369436,tt0762114,tt0840149","kind":"profile_collision"}, + {"nconst":"nm1631435","primaryName":"Aimee Teegarden","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,producer,soundtrack","knownForTitles":"tt0758745,tt5519574,tt0498381,tt2657262","kind":"profile_collision"}, + {"nconst":"nm1637637","primaryName":"David W. Collins","birthYear":"1975","deathYear":"\\N","primaryProfession":"sound_department,actor,miscellaneous","knownForTitles":"tt8111088,tt20600980,tt36594331,tt1024923","kind":"profile_collision"}, + {"nconst":"nm1648520","primaryName":"Katie Leung","birthYear":"1987","deathYear":"\\N","primaryProfession":"actress,archive_footage","knownForTitles":"tt0373889,tt0330373,tt1201607,tt0926084","kind":"profile_collision"}, + {"nconst":"nm1659819","primaryName":"Jamie McPherson","birthYear":"\\N","deathYear":"\\N","primaryProfession":"cinematographer,camera_department,producer","knownForTitles":"tt0318912,tt3068194,tt1806234,tt1762300","kind":"profile_collision"}, + {"nconst":"nm1663252","primaryName":"Chris Chalk","birthYear":"1977","deathYear":"\\N","primaryProfession":"actor,director,writer","knownForTitles":"tt19244304,tt2077823,tt26693313,tt7137906","kind":"profile_collision"}, + {"nconst":"nm1683003","primaryName":"Hiro Shimono","birthYear":"1980","deathYear":"\\N","primaryProfession":"actor,soundtrack,archive_sound","knownForTitles":"tt0364863,tt11032374,tt33175825,tt32820897","kind":"profile_collision"}, + {"nconst":"nm1683768","primaryName":"Beau Garrett","birthYear":"1982","deathYear":"\\N","primaryProfession":"actress,soundtrack,archive_footage","knownForTitles":"tt1104001,tt0486576,tt0454970,tt2101383","kind":"profile_collision"}, + {"nconst":"nm1697606","primaryName":"Yûichi Nakamura","birthYear":"1980","deathYear":"\\N","primaryProfession":"actor,miscellaneous,soundtrack","knownForTitles":"tt6264654,tt1951264,tt14331144,tt3295046","kind":"profile_collision"}, + {"nconst":"nm1700426","primaryName":"Martyn Colbeck","birthYear":"\\N","deathYear":"\\N","primaryProfession":"camera_department,cinematographer,director","knownForTitles":"tt0795176,tt1762300,tt14389492,tt2230619","kind":"profile_collision"}, + {"nconst":"nm1725469","primaryName":"Florian Zeller","birthYear":"1979","deathYear":"\\N","primaryProfession":"writer,producer,director","knownForTitles":"tt10272386,tt14458442","kind":"profile_collision"}, + {"nconst":"nm1727134","primaryName":"Hüseyin Avni Danyal","birthYear":"1962","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt7920978,tt1807950,tt31064918,tt2869736","kind":"profile_collision"}, + {"nconst":"nm1745019","primaryName":"Maggie Siff","birthYear":"1974","deathYear":"\\N","primaryProfession":"actress,producer,soundtrack","knownForTitles":"tt0465580,tt1151359,tt2304933,tt1124373","kind":"profile_collision"}, + {"nconst":"nm1753818","primaryName":"Nick Shakoour","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,producer,miscellaneous","knownForTitles":"tt5622316,tt3489236,tt1600194,tt8975856","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm1784515","primaryName":"Jacky Ido","birthYear":"1977","deathYear":"\\N","primaryProfession":"actor,miscellaneous,director","knownForTitles":"tt30494226,tt0361748,tt3027506,tt4396862","kind":"profile_collision"}, + {"nconst":"nm1800339","primaryName":"Nalan Kuruçim","birthYear":"1971","deathYear":"\\N","primaryProfession":"actress","knownForTitles":"tt1831164,tt12140804,tt9124428,tt13231544","kind":"profile_collision"}, + {"nconst":"nm1819973","primaryName":"Ross Duffer","birthYear":"1984","deathYear":"\\N","primaryProfession":"writer,producer,director","knownForTitles":"tt4574334,tt2131532,tt0443696,tt2618986","kind":"profile_collision"}, + {"nconst":"nm1825214","primaryName":"John Mulaney","birthYear":"1982","deathYear":"\\N","primaryProfession":"writer,actor,producer","knownForTitles":"tt4633694,tt3513500,tt4677934,tt8271714","kind":"profile_collision"}, + {"nconst":"nm18295187","primaryName":"Graham Hendrix","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt31137273","kind":"profile_collision"}, + {"nconst":"nm1837590","primaryName":"Aaron Staton","birthYear":"1980","deathYear":"\\N","primaryProfession":"actor,writer","knownForTitles":"tt1764429,tt0804503,tt0489237,tt0426931","kind":"profile_collision"}, + {"nconst":"nm1862473","primaryName":"Chris Niosi","birthYear":"1988","deathYear":"\\N","primaryProfession":"actor,animation_department,writer","knownForTitles":"tt2146268,tt7303948,tt2140395,tt7197684","kind":"profile_collision"}, + {"nconst":"nm1872617","primaryName":"Katie Krentz","birthYear":"\\N","deathYear":"\\N","primaryProfession":"miscellaneous,producer,production_department","knownForTitles":"tt3061046,tt3718778,tt6790714,tt6114826","kind":"profile_collision"}, + {"nconst":"nm1877169","primaryName":"Myf Warhurst","birthYear":"1974","deathYear":"\\N","primaryProfession":"actress,writer,producer","knownForTitles":"tt7214082,tt2152910,tt6392144,tt32328599","kind":"profile_collision"}, + {"nconst":"nm1892960","primaryName":"Cengiz Bozkurt","birthYear":"1964","deathYear":"\\N","primaryProfession":"actor,soundtrack,casting_director","knownForTitles":"tt1831164,tt22855966,tt7944260,tt13231544","kind":"profile_collision"}, + {"nconst":"nm1934428","primaryName":"Sarita Joshi","birthYear":"1941","deathYear":"\\N","primaryProfession":"actress","knownForTitles":"tt23849204,tt4662064,tt20872936,tt10098288","kind":"profile_collision"}, + {"nconst":"nm1960813","primaryName":"Tony Napoli","birthYear":"1979","deathYear":"\\N","primaryProfession":"actor,stunts,producer","knownForTitles":"tt5944124,tt7235466,tt8702242,tt6037102","kind":"profile_collision"}, + {"nconst":"nm2031358","primaryName":"Lamorne Morris","birthYear":"1983","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt1826940,tt2802850,tt2704998,tt1634106","kind":"profile_collision"}, + {"nconst":"nm2055254","primaryName":"Sabrina Jalees","birthYear":"\\N","deathYear":"\\N","primaryProfession":"writer,actress,producer","knownForTitles":"tt5460226,tt7658402,tt16300138,tt5083928","kind":"profile_collision"}, + {"nconst":"nm2086079","primaryName":"Hiromu Arakawa","birthYear":"1973","deathYear":"\\N","primaryProfession":"writer,animation_department,miscellaneous","knownForTitles":"tt0485323,tt1355642,tt5607028,tt0444640","kind":"profile_collision"}, + {"nconst":"nm2105585","primaryName":"Tobias Lindholm","birthYear":"1977","deathYear":"\\N","primaryProfession":"writer,director,producer","knownForTitles":"tt10288566,tt2106476,tt2216240,tt3830162","kind":"profile_collision"}, + {"nconst":"nm2106637","primaryName":"Aziz Ansari","birthYear":"1983","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt1266020,tt4635276,tt27543578,tt0848537","kind":"profile_collision"}, + {"nconst":"nm2146022","primaryName":"Kôki Uchiyama","birthYear":"1990","deathYear":"\\N","primaryProfession":"actor,miscellaneous,soundtrack","knownForTitles":"tt2122656,tt1929675,tt5626028,tt1214085","kind":"profile_collision"}, + {"nconst":"nm2175486","primaryName":"Ryan Barger","birthYear":"\\N","deathYear":"\\N","primaryProfession":"editor,actor,visual_effects","knownForTitles":"tt1524150,tt6957316,tt3530232,tt5111552","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm2194189","primaryName":"Courtney A. Kemp","birthYear":"1977","deathYear":"\\N","primaryProfession":"writer,producer,miscellaneous","knownForTitles":"tt3281796,tt1442462,tt36022742,tt10732104","kind":"profile_collision"}, + {"nconst":"nm2196900","primaryName":"Janie Haddad Tompkins","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,director,writer","knownForTitles":"tt11815682,tt13798316,tt1710308,tt5755238","kind":"profile_collision"}, + {"nconst":"nm2215791","primaryName":"Juhi Parmar","birthYear":"1980","deathYear":"\\N","primaryProfession":"actress,archive_footage","knownForTitles":"tt8595766,tt1868745,tt2016894,tt8437668","kind":"profile_collision"}, + {"nconst":"nm2244205","primaryName":"Léa Seydoux","birthYear":"1985","deathYear":"\\N","primaryProfession":"actress,miscellaneous,soundtrack","knownForTitles":"tt2278871,tt2379713,tt2382320,tt1605783","kind":"profile_collision"}, + {"nconst":"nm2299231","primaryName":"Kira Buckland","birthYear":"1987","deathYear":"\\N","primaryProfession":"actress,miscellaneous,casting_director","knownForTitles":"tt2359704,tt9335498,tt5238626,tt11585486","kind":"profile_collision"}, + {"nconst":"nm2301950","primaryName":"Dakota Blue Richards","birthYear":"1994","deathYear":"\\N","primaryProfession":"actress,writer","knownForTitles":"tt0385752,tt0840196,tt2701582","kind":"profile_collision"}, + {"nconst":"nm2341751","primaryName":"Russell Harvard","birthYear":"1981","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt0469494,tt10192406,tt1094666,tt2802850","kind":"profile_collision"}, + {"nconst":"nm2353862","primaryName":"Dev Patel","birthYear":"1990","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt1010048,tt9214772,tt3741834,tt9243804","kind":"profile_collision"}, + {"nconst":"nm2358709","primaryName":"Nathan Fielder","birthYear":"1983","deathYear":"\\N","primaryProfession":"writer,actor,producer","knownForTitles":"tt13623608,tt10802170,tt2297757,tt8679236","kind":"profile_collision"}, + {"nconst":"nm2436722","primaryName":"Amber Nash","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,producer","knownForTitles":"tt1486217,tt4158110,tt21194586,tt15358446","kind":"profile_collision"}, + {"nconst":"nm2466457","primaryName":"Ryan Ridley","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt2861424,tt26584495,tt11358390,tt2876854","kind":"profile_collision"}, + {"nconst":"nm2493744","primaryName":"Hemant Kher","birthYear":"1977","deathYear":"\\N","primaryProfession":"writer,actor,director","knownForTitles":"tt12392504,tt20872936,tt35665851,tt16449766","kind":"profile_collision"}, + {"nconst":"nm2592482","primaryName":"Scott Nicholson","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,stunts,miscellaneous","knownForTitles":"tt7660850,tt0112864,tt0993846,tt0498399","kind":"profile_collision"}, + {"nconst":"nm2601399","primaryName":"Charles Bagli","birthYear":"\\N","deathYear":"\\N","primaryProfession":"\\N","knownForTitles":"tt4299972,tt0992930,tt9726390,tt4781664","kind":"profile_collision"}, + {"nconst":"nm2618951","primaryName":"Benjamin Hollingsworth","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,producer,archive_footage","knownForTitles":"tt9077530,tt4452630,tt5719748,tt1285309","kind":"profile_collision"}, + {"nconst":"nm2705651","primaryName":"Baris Serma","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt1534360,tt0855729,tt0949686","kind":"profile_collision"}, + {"nconst":"nm2728757","primaryName":"Stephen Rider","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt1517260,tt1327773,tt3322312,tt1599348","kind":"profile_collision"}, + {"nconst":"nm2739851","primaryName":"Ross Marquand","birthYear":"1981","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt1520211,tt4154756,tt6741278,tt10168312","kind":"profile_collision"}, + {"nconst":"nm2747851","primaryName":"Sukhwinder Chahal","birthYear":"1969","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt8291224,tt2377938,tt2658126,tt9680440","kind":"profile_collision"}, + {"nconst":"nm2796745","primaryName":"Adam Devine","birthYear":"1983","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt1981677,tt1610527,tt2452244,tt2823054","kind":"profile_collision"}, + {"nconst":"nm2832695","primaryName":"Deborah Ann Woll","birthYear":"1985","deathYear":"\\N","primaryProfession":"actress,writer,producer","knownForTitles":"tt0844441,tt5886046,tt1886493,tt3322312","kind":"profile_collision"}, + {"nconst":"nm2837894","primaryName":"Robbie Daymond","birthYear":"1982","deathYear":"\\N","primaryProfession":"actor,miscellaneous,sound_department","knownForTitles":"tt4834232,tt33039855,tt26453303,tt12343534","kind":"profile_collision"}, + {"nconst":"nm2858333","primaryName":"Justin Doescher","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,stunts,producer","knownForTitles":"tt0499097,tt4921338,tt6911418,tt5852918","kind":"profile_collision"}, + {"nconst":"nm2871845","primaryName":"Jacob Stringer","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt0469494","kind":"profile_collision"}, + {"nconst":"nm2887354","primaryName":"Girija Oak","birthYear":"1987","deathYear":"\\N","primaryProfession":"actress","knownForTitles":"tt15354916,tt0986264,tt31702041,tt8047762","kind":"profile_collision"}, + {"nconst":"nm2915105","primaryName":"Billy Magnussen","birthYear":"1985","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt11655566,tt2704998,tt1596363,tt30923123","kind":"profile_collision"}, + {"nconst":"nm2925304","primaryName":"Christina Chong","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,director,writer","knownForTitles":"tt1634122,tt12327578,tt0436992,tt1361336","kind":"profile_collision"}, + {"nconst":"nm2930503","primaryName":"Jack Reynor","birthYear":"1992","deathYear":"\\N","primaryProfession":"actor,director,writer","knownForTitles":"tt8291284,tt2109248,tt8772262,tt3544112","kind":"profile_collision"}, + {"nconst":"nm2945137","primaryName":"Nick Mohammed","birthYear":"1980","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt3659388,tt2112096,tt4827986,tt1473832","kind":"profile_collision"}, + {"nconst":"nm2969015","primaryName":"Lena Hall","birthYear":"1980","deathYear":"\\N","primaryProfession":"actress,soundtrack,music_artist","knownForTitles":"tt30459041,tt6156584,tt6150942,tt1723816","kind":"profile_collision"}, + {"nconst":"nm2975962","primaryName":"Alberto Ammann","birthYear":"1978","deathYear":"\\N","primaryProfession":"actor,producer,miscellaneous","knownForTitles":"tt1242422,tt2707408,tt1715336,tt22964884","kind":"profile_collision"}, + {"nconst":"nm2976800","primaryName":"Isa Briones","birthYear":"1999","deathYear":"\\N","primaryProfession":"actress,soundtrack,archive_footage","knownForTitles":"tt31938062,tt8806524,tt17720272,tt2788432","kind":"profile_collision"}, + {"nconst":"nm3016166","primaryName":"Robert Emms","birthYear":"1986","deathYear":"\\N","primaryProfession":"actor,composer,producer","knownForTitles":"tt7366338,tt9253284,tt1568911,tt3428912","kind":"profile_collision"}, + {"nconst":"nm3038143","primaryName":"Emily Atack","birthYear":"1989","deathYear":"\\N","primaryProfession":"actress,writer,camera_department","knownForTitles":"tt3038708,tt4423984,tt1772422,tt2175669","kind":"profile_collision"}, + {"nconst":"nm3086712","primaryName":"Piotr Michael","birthYear":"1988","deathYear":"\\N","primaryProfession":"actor,miscellaneous,writer","knownForTitles":"tt26443597,tt32580624,tt37146909,tt20674124","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm3091498","primaryName":"Lara Pulver","birthYear":"1980","deathYear":"\\N","primaryProfession":"actress,soundtrack,archive_footage","knownForTitles":"tt31510819,tt1475582,tt21636214,tt7631146","kind":"profile_collision"}, + {"nconst":"nm3119556","primaryName":"Sunita Rajwar","birthYear":"1969","deathYear":"\\N","primaryProfession":"actress,writer,assistant_director","knownForTitles":"tt12004706,tt10530900,tt27510174,tt8108202","kind":"profile_collision"}, + {"nconst":"nm3147751","primaryName":"LaKeith Stanfield","birthYear":"1991","deathYear":"\\N","primaryProfession":"actor,producer,soundtrack","knownForTitles":"tt5688932,tt2370248,tt8946378,tt1020072","kind":"profile_collision"}, + {"nconst":"nm3198781","primaryName":"Ben Aldridge","birthYear":"1985","deathYear":"\\N","primaryProfession":"actor,producer,soundtrack","knownForTitles":"tt15679400,tt7775720,tt13610872,tt5687612","kind":"profile_collision"}, + {"nconst":"nm3220898","primaryName":"Saba Azad","birthYear":"1990","deathYear":"\\N","primaryProfession":"actress,music_department,soundtrack","knownForTitles":"tt13868972,tt6540996,tt2057441,tt3447364","kind":"profile_collision"}, + {"nconst":"nm3222518","primaryName":"Sachet Engineer","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt0986264","kind":"profile_collision"}, + {"nconst":"nm3345234","primaryName":"David Carlyle","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt9140342,tt7493974,tt1533010","kind":"profile_collision"}, + {"nconst":"nm3348178","primaryName":"Geeta Agrawal Sharma","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,producer","knownForTitles":"tt21626284,tt23849204,tt13818368,tt28037987","kind":"profile_collision"}, + {"nconst":"nm3361199","primaryName":"Carly Chaikin","birthYear":"1990","deathYear":"\\N","primaryProfession":"actress,writer,producer","knownForTitles":"tt4158110,tt1741256,tt1294226,tt8427140","kind":"profile_collision"}, + {"nconst":"nm3402242","primaryName":"Donald Sales","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,choreographer,miscellaneous","knownForTitles":"tt2463208,tt11337908,tt16288838,tt7608248","kind":"profile_collision"}, + {"nconst":"nm3556828","primaryName":"Meg Washington","birthYear":"\\N","deathYear":"\\N","primaryProfession":"writer,composer,actress","knownForTitles":"tt7678620","kind":"profile_collision"}, + {"nconst":"nm3629668","primaryName":"Dalila Bela","birthYear":"2001","deathYear":"\\N","primaryProfession":"actress,soundtrack,music_artist","knownForTitles":"tt5421602,tt3900614,tt1843230,tt2023453","kind":"profile_collision"}, + {"nconst":"nm3633421","primaryName":"Sameer Rajda","birthYear":"1963","deathYear":"\\N","primaryProfession":"actor,writer","knownForTitles":"tt2283748,tt6748128,tt0154081,tt1339313","kind":"profile_collision"}, + {"nconst":"nm3634704","primaryName":"Marco D'Amore","birthYear":"1981","deathYear":"\\N","primaryProfession":"actor,director,writer","knownForTitles":"tt2049116,tt9048786,tt17495990,tt4517700","kind":"profile_collision"}, + {"nconst":"nm3665668","primaryName":"Sarp Akkaya","birthYear":"1980","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt10431500,tt3698408,tt2543258,tt2118669","kind":"profile_collision"}, + {"nconst":"nm3687902","primaryName":"Antonia Thomas","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,producer,writer","knownForTitles":"tt6470478,tt4051832,tt1548850,tt2481198","kind":"profile_collision"}, + {"nconst":"nm3726790","primaryName":"Mahdi Cocci","birthYear":"1980","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt8851668,tt30827810,tt10857160,tt11743610","kind":"profile_collision"}, + {"nconst":"nm3785071","primaryName":"Esben Dalgaard","birthYear":"1976","deathYear":"\\N","primaryProfession":"actor,writer,podcaster","knownForTitles":"tt10834220,tt10375972,tt7290748,tt3638488","kind":"profile_collision"}, + {"nconst":"nm3822030","primaryName":"Cristiana Dell'Anna","birthYear":"1985","deathYear":"\\N","primaryProfession":"actress,writer,producer","knownForTitles":"tt14351082,tt13276352,tt9526392,tt2049116","kind":"profile_collision"}, + {"nconst":"nm3849670","primaryName":"Faye Marsay","birthYear":"1986","deathYear":"\\N","primaryProfession":"actress,archive_footage","knownForTitles":"tt3169706,tt0944947,tt14369780,tt4555426","kind":"profile_collision"}, + {"nconst":"nm4002765","primaryName":"Faisal Rashid","birthYear":"1991","deathYear":"\\N","primaryProfession":"actor,producer","knownForTitles":"tt12392504,tt1334470,tt15128068,tt1871312","kind":"profile_collision"}, + {"nconst":"nm4043618","primaryName":"Tom Holland","birthYear":"1996","deathYear":"\\N","primaryProfession":"actor,producer,miscellaneous","knownForTitles":"tt2250912,tt6320628,tt3498820,tt1649419","kind":"profile_collision"}, + {"nconst":"nm4053358","primaryName":"Glenda MacInnis","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,producer","knownForTitles":"tt33041431,tt35826715,tt3283594,tt11055882","kind":"profile_collision"}, + {"nconst":"nm4095573","primaryName":"Emma Brennand","birthYear":"\\N","deathYear":"\\N","primaryProfession":"miscellaneous,producer,director","knownForTitles":"tt28445317,tt17405750,tt18750552,tt8779788","kind":"profile_collision"}, + {"nconst":"nm4129969","primaryName":"Andrija Kuzmanovic","birthYear":"1984","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt29318030,tt8737152,tt1634013,tt2160915","kind":"profile_collision"}, + {"nconst":"nm4232585","primaryName":"Griffin Burns","birthYear":"1987","deathYear":"\\N","primaryProfession":"actor,sound_department,miscellaneous","knownForTitles":"tt13292830,tt33130884,tt32820897,tt11585486","kind":"profile_collision"}, + {"nconst":"nm4245240","primaryName":"Fatih Artman","birthYear":"1988","deathYear":"\\N","primaryProfession":"actor,archive_footage","knownForTitles":"tt7439220,tt1795096,tt3283714,tt7642818","kind":"profile_collision"}, + {"nconst":"nm4260661","primaryName":"Sarah Dugdale","birthYear":"1995","deathYear":"\\N","primaryProfession":"actress","knownForTitles":"tt9077530,tt8110640,tt9165642,tt4864624","kind":"profile_collision"}, + {"nconst":"nm4263213","primaryName":"John Bradley","birthYear":"1988","deathYear":"\\N","primaryProfession":"actor,soundtrack,archive_footage","knownForTitles":"tt0944947,tt5834426,tt10223460,tt3458254","kind":"profile_collision"}, + {"nconst":"nm4297610","primaryName":"Kimia Hosseini","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress","knownForTitles":"tt1832382,tt5460508,tt16911980,tt3605138","kind":"profile_collision"}, + {"nconst":"nm4425051","primaryName":"Jack Quaid","birthYear":"1992","deathYear":"\\N","primaryProfession":"actor,writer,producer","knownForTitles":"tt1392170,tt29603959,tt26584495,tt11245972","kind":"profile_collision"}, + {"nconst":"nm4439231","primaryName":"Asami Seto","birthYear":"1993","deathYear":"\\N","primaryProfession":"actress,music_department,art_department","knownForTitles":"tt4272866,tt8993398,tt12343534,tt2176885","kind":"profile_collision"}, + {"nconst":"nm4439921","primaryName":"Von Lewis","birthYear":"1987","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt6966692,tt4465100,tt1490785,tt1754284","kind":"profile_collision"}, + {"nconst":"nm4482922","primaryName":"Sunny Hinduja","birthYear":"1990","deathYear":"\\N","primaryProfession":"actor,director,writer","knownForTitles":"tt14392248,tt41069741,tt9544034,tt28227737","kind":"profile_collision"}, + {"nconst":"nm4523607","primaryName":"Zarrin Darnell-Martin","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,actress,writer","knownForTitles":"tt10813940,tt10970762,tt1895587,tt10642244","kind":"profile_collision"}, + {"nconst":"nm4531936","primaryName":"Masha Cima","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,producer","knownForTitles":"tt7718110,tt3501074,tt1723816,tt5592230","kind":"profile_collision"}, + {"nconst":"nm4594069","primaryName":"Gideon Adlon","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,producer","knownForTitles":"tt2531344,tt5952594","kind":"profile_collision"}, + {"nconst":"nm4597034","primaryName":"Eray Eserol","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,art_director,casting_director","knownForTitles":"tt1795096,tt3283714,tt21095396,tt2010914","kind":"profile_collision"}, + {"nconst":"nm4641403","primaryName":"Thomas McNamara","birthYear":"1993","deathYear":"\\N","primaryProfession":"actor,miscellaneous,writer","knownForTitles":"tt10802170,tt15739916,tt0364845,tt13623136","kind":"profile_collision"}, + {"nconst":"nm4704928","primaryName":"Marc Rissmann","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,miscellaneous,director","knownForTitles":"tt0944947,tt1740299,tt13991232,tt0899043","kind":"profile_collision"}, + {"nconst":"nm5049751","primaryName":"Michaela Jaé (MJ) Rodriguez","birthYear":"1991","deathYear":"\\N","primaryProfession":"actress,miscellaneous,soundtrack","knownForTitles":"tt5090568,tt7562112,tt14271498,tt8721424","kind":"profile_collision"}, + {"nconst":"nm5105119","primaryName":"Ross Anderson","birthYear":"1987","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt8364368,tt1809398,tt2884018,tt2923780","kind":"profile_collision"}, + {"nconst":"nm5157662","primaryName":"Lulu Wilson","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,producer,animation_department","knownForTitles":"tt6763664,tt37209937,tt20916568,tt5140878","kind":"profile_collision"}, + {"nconst":"nm5211886","primaryName":"Jill Harris","birthYear":"1994","deathYear":"\\N","primaryProfession":"actress,miscellaneous,assistant_director","knownForTitles":"tt5862798,tt7441658,tt5839732,tt15433166","kind":"profile_collision"}, + {"nconst":"nm5224688","primaryName":"Laura Nirider","birthYear":"\\N","deathYear":"\\N","primaryProfession":"archive_footage","knownForTitles":"tt2130321,tt5189670,tt0103396","kind":"profile_collision"}, + {"nconst":"nm5318271","primaryName":"Cynthy Wu","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress","knownForTitles":"tt7772588,tt14403178,tt6877772,tt1691916","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm5358492","primaryName":"Kemp Powers","birthYear":"\\N","deathYear":"\\N","primaryProfession":"writer,director,producer","knownForTitles":"tt10612922,tt2948372,tt9362722,tt5700106","kind":"profile_collision"}, + {"nconst":"nm5511912","primaryName":"Salimata Kamate","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress","knownForTitles":"tt1675434,tt2800240,tt23546622,tt6556670","kind":"profile_collision"}, + {"nconst":"nm5551047","primaryName":"Kim Won-seok","birthYear":"\\N","deathYear":"\\N","primaryProfession":"director,writer","knownForTitles":"tt2745682,tt26471411,tt4240730,tt5332206","kind":"profile_collision"}, + {"nconst":"nm5584344","primaryName":"Yahya Abdul-Mateen II","birthYear":"1986","deathYear":"\\N","primaryProfession":"actor,producer,archive_footage","knownForTitles":"tt1477834,tt4592410","kind":"profile_collision"}, + {"nconst":"nm6016511","primaryName":"Finn Wolfhard","birthYear":"2002","deathYear":"\\N","primaryProfession":"actor,director,writer","knownForTitles":"tt1396484,tt4513678,tt4574334,tt1488589","kind":"profile_collision"}, + {"nconst":"nm6196619","primaryName":"Callan Potter","birthYear":"1998","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt5582392,tt35495073,tt6049106,tt21431644","kind":"profile_collision"}, + {"nconst":"nm6366417","primaryName":"Jefferson White","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,producer,director","knownForTitles":"tt4236770,tt17279496,tt11818818,tt5198890","kind":"profile_collision"}, + {"nconst":"nm6381704","primaryName":"RJ Walker","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,camera_department,miscellaneous","knownForTitles":"tt4288182,tt9064792,tt37094850,tt3468798","kind":"profile_collision"}, + {"nconst":"nm6449658","primaryName":"Shivankit Singh Parihar","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,writer,assistant_director","knownForTitles":"tt22185582,tt7665182,tt14392248,tt9422974","kind":"profile_collision"}, + {"nconst":"nm6564737","primaryName":"Joe Keery","birthYear":"1992","deathYear":"\\N","primaryProfession":"actor,composer,soundtrack","knownForTitles":"tt4574334,tt6264654,tt8879928,tt11394332","kind":"profile_collision"}, + {"nconst":"nm6631562","primaryName":"Genneya Walton","birthYear":"1999","deathYear":"\\N","primaryProfession":"actress","knownForTitles":"tt18923754,tt10062292,tt21328106,tt10311562","kind":"profile_collision"}, + {"nconst":"nm6771561","primaryName":"Lee Dong-hwi","birthYear":"1985","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt4016934,tt10530176,tt17329616,tt30485422","kind":"profile_collision"}, + {"nconst":"nm6875639","primaryName":"Sameer Saxena","birthYear":"1980","deathYear":"\\N","primaryProfession":"producer,writer,director","knownForTitles":"tt8595766,tt19072562,tt31183656,tt6005644","kind":"profile_collision"}, + {"nconst":"nm6955079","primaryName":"Steven Canals","birthYear":"1980","deathYear":"\\N","primaryProfession":"writer,producer,director","knownForTitles":"tt7562112,tt14903834,tt5210998,tt10166602","kind":"profile_collision"}, + {"nconst":"nm7051533","primaryName":"Alexa Demie","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,director","knownForTitles":"tt8772296,tt8652728,tt5613484","kind":"profile_collision"}, + {"nconst":"nm7054048","primaryName":"Lee Hyeri","birthYear":"1994","deathYear":"\\N","primaryProfession":"actress","knownForTitles":"tt35683421,tt5182866,tt29419864,tt22872644","kind":"profile_collision"}, + {"nconst":"nm7083517","primaryName":"Mallorie Rodak","birthYear":"1987","deathYear":"\\N","primaryProfession":"actress,miscellaneous","knownForTitles":"tt22248376,tt1528406,tt15399640,tt9054364","kind":"profile_collision"}, + {"nconst":"nm7159176","primaryName":"Debrah Lee Charatan","birthYear":"\\N","deathYear":"\\N","primaryProfession":"archive_footage","knownForTitles":"\\N","kind":"profile_collision"}, + {"nconst":"nm7583837","primaryName":"Abby Trott","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,sound_department,miscellaneous","knownForTitles":"tt7042146,tt9335498,tt5238626,tt5370130","kind":"profile_collision"}, + {"nconst":"nm7609875","primaryName":"Naomi Ackie","birthYear":"1991","deathYear":"\\N","primaryProfession":"actress,producer,soundtrack","knownForTitles":"tt14858658,tt12299608,tt4291600,tt32843349","kind":"profile_collision"}, + {"nconst":"nm7650310","primaryName":"John Griffin","birthYear":"\\N","deathYear":"\\N","primaryProfession":"writer,producer,actor","knownForTitles":"tt5264838,tt9813792,tt2583620","kind":"profile_collision"}, + {"nconst":"nm7831367","primaryName":"Cooper Tomlinson","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,producer,writer","knownForTitles":"tt37287335,tt38120758,tt34991493,tt22075376","kind":"profile_collision"}, + {"nconst":"nm7919715","primaryName":"Faithe Herman","birthYear":"2007","deathYear":"\\N","primaryProfession":"actress,archive_footage","knownForTitles":"tt0448115,tt10151854,tt5555260,tt11372418","kind":"profile_collision"}, + {"nconst":"nm7946031","primaryName":"Kıvanç Kılınç","birthYear":"1982","deathYear":"\\N","primaryProfession":"actor,writer","knownForTitles":"tt13675832,tt6345486,tt0791612,tt2356860","kind":"profile_collision"}, + {"nconst":"nm7947860","primaryName":"Kim Jung-hyun","birthYear":"1990","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt7020608,tt5209264,tt10850932,tt25699926","kind":"profile_collision"}, + {"nconst":"nm8037342","primaryName":"Lukita Maxwell","birthYear":"2001","deathYear":"\\N","primaryProfession":"actress","knownForTitles":"tt15677150,tt26657236,tt11454722,tt18375360","kind":"profile_collision"}, + {"nconst":"nm8228340","primaryName":"Liv Symone","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress","knownForTitles":"tt11761176,tt11378946,tt8080122","kind":"profile_collision"}, + {"nconst":"nm8258018","primaryName":"Cha Eun-woo","birthYear":"1997","deathYear":"\\N","primaryProfession":"actor,writer,soundtrack","knownForTitles":"tt8585954,tt14166656,tt29006388,tt17494686","kind":"canonicalization_of_uncertain_alias_or_profile"}, + {"nconst":"nm8311745","primaryName":"Jasmeet Singh Bhatia","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor,writer,director","knownForTitles":"tt6328940,tt6108090,tt32379268,tt13387102","kind":"profile_collision"}, + {"nconst":"nm8341039","primaryName":"Paxton Singleton","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt6763664,tt0460681,tt5486670,tt6550978","kind":"profile_collision"}, + {"nconst":"nm8360867","primaryName":"Indya Moore","birthYear":"1995","deathYear":"\\N","primaryProfession":"actress,writer,producer","knownForTitles":"tt9844522,tt8722346,tt9663764,tt7562112","kind":"profile_collision"}, + {"nconst":"nm8388409","primaryName":"Sky Alexis","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,miscellaneous","knownForTitles":"tt28066777,tt1488589,tt4729430,tt10687464","kind":"profile_collision"}, + {"nconst":"nm8621588","primaryName":"Luis Rodríguez","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt0059578,tt0085487,tt0059016,tt0044491","kind":"profile_collision"}, + {"nconst":"nm8784315","primaryName":"Vijay Kumar Dogra","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt23849204,tt4934950,tt5764096,tt4169250","kind":"profile_collision"}, + {"nconst":"nm9458718","primaryName":"Moses Ingram","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actress,writer,miscellaneous","knownForTitles":"tt10095582,tt10048342,tt12392556,tt7697412","kind":"profile_collision"}, + {"nconst":"nm9862860","primaryName":"Boluwatife Treasure Bankole","birthYear":"\\N","deathYear":"\\N","primaryProfession":"actor","knownForTitles":"tt8267604","kind":"profile_collision"}, + {"nconst":"nm9925449","primaryName":"Revathi Pillai","birthYear":"2002","deathYear":"\\N","primaryProfession":"actress","knownForTitles":"tt22001978,tt8595766,tt11854694,tt9432978","kind":"profile_collision"} + ] +} diff --git a/sites/imdb/seed_data.py b/sites/imdb/seed_data.py index c4f6e2fe..0feb21b1 100644 --- a/sites/imdb/seed_data.py +++ b/sites/imdb/seed_data.py @@ -34,7 +34,7 @@ import json import re import shutil -from datetime import datetime +from datetime import date, datetime from pathlib import Path BASE_DIR = Path(__file__).resolve().parent @@ -157,6 +157,7 @@ def _strip_year(h1): TT_FROM_URL = re.compile(r'/title/(tt\d+)') +NM_FROM_URL = re.compile(r'/name/(nm\d+)(?:[/#?]|$)') def _ld_tt_id(ld): @@ -167,6 +168,48 @@ def _ld_tt_id(ld): return m.group(1) if m else None +def _ld_nm_id(ld): + """Return the exact Person identity, or None for missing/malformed URLs.""" + url = (ld or {}).get('url') + match = NM_FROM_URL.search(url) if isinstance(url, str) else None + return match.group(1) if match else None + + +MONTH_NUMBERS = {name: number for number, name in enumerate(( + 'January', 'February', 'March', 'April', 'May', 'June', 'July', + 'August', 'September', 'October', 'November', 'December'), 1)} +RELEASE_DATE_RE = re.compile( + r'^(?:Release date\s*\|\s*)?(' + + '|'.join(MONTH_NUMBERS) + + r')\s+(\d{1,2}),\s+(\d{4})(?=\s|[|(]|$)') + + +def _parse_release_date(value): + """Extract an existing complete date; never invent a missing day/year.""" + text = _u(value) + try: + if re.fullmatch(r'\d{4}-\d{2}-\d{2}', text): + return date.fromisoformat(text).isoformat() + match = RELEASE_DATE_RE.match(text) + if match: + month, day, year = match.groups() + return date(int(year), MONTH_NUMBERS[month], int(day)).isoformat() + except ValueError: + pass + return '' + + +def _release_date_from_scrape(ld, details): + published = _u((ld or {}).get('datePublished')) + if re.fullmatch(r'\d{4}-\d{2}-\d{2}', published): + parsed = _parse_release_date(published) + if parsed: + return parsed + details = details or {} + return (_parse_release_date(details.get('releasedate')) + or _parse_release_date(details.get('releaseDate'))) + + def _normalize_genre(name, name_to_genre): key = (name or '').strip() if not key: @@ -418,6 +461,7 @@ def seed_all(db, Title, Person, Genre, Credit, Review, UserRating, # 3) Persons (load first so credits link cleanly) --------------------- nm_to_person = {} skipped_garbage = 0 + skipped_person_identity = 0 for f in sorted(SCRAPED.glob('name_*.json')): nm_id = f.stem.removeprefix('name_') try: @@ -431,6 +475,11 @@ def seed_all(db, Title, Person, Genre, Credit, Review, UserRating, skipped_garbage += 1 continue ld = d.get('ld') or {} + # A filename is the requested identity, not proof of the page returned. + # Fail closed for absent/malformed canonical URLs as well as redirects. + if _ld_nm_id(ld) != nm_id: + skipped_person_identity += 1 + continue # Prefer h1 (stripped of year + (I)/(II) disambig) over ld.name. name = _strip_year(h1) or _u(ld.get('name')) or '' if not name: @@ -473,7 +522,8 @@ def seed_all(db, Title, Person, Genre, Credit, Review, UserRating, known_for_json=json.dumps(known_for)) db.session.add(p) nm_to_person[nm_id] = p - print(f"[seed] persons loaded={len(nm_to_person)}, garbage_skipped={skipped_garbage}", flush=True) + print(f"[seed] persons loaded={len(nm_to_person)}, garbage_skipped={skipped_garbage}, " + f"identity_skipped={skipped_person_identity}", flush=True) db.session.flush() # 4) Titles + credits -------------------------------------------------- @@ -528,13 +578,7 @@ def seed_all(db, Title, Person, Genre, Credit, Review, UserRating, bo_ww = _find_money(details, 'cumulativeworldwidegross', 'worldwidegross') bo_open = _find_money(details, 'openingweekenddomestic', 'openingweekend') budget = _find_money(details, 'budget') - release_date = '' - if details.get('releasedate'): - release_date = _u(details['releasedate'])[:60] - elif details.get('releaseDate'): - release_date = _u(details['releaseDate'])[:60] - elif ld.get('datePublished'): - release_date = ld['datePublished'] + release_date = _release_date_from_scrape(ld, details) poster_path = _copy_image(f'{tt_id}.jpg', f'{tt_id}.jpg') if (SCRAPED / 'images' / f'{tt_id}.jpg').exists() else '' tagline = _u(d.get('tagline')) diff --git a/sites/imdb/tests/test_seed_data.py b/sites/imdb/tests/test_seed_data.py new file mode 100644 index 00000000..d7311d13 --- /dev/null +++ b/sites/imdb/tests/test_seed_data.py @@ -0,0 +1,142 @@ +import hashlib +import json +from pathlib import Path +import sqlite3 +import sys +import tempfile +from types import SimpleNamespace +import unittest +from unittest.mock import Mock, patch + +sys.path.insert(0, str(Path(__file__).resolve().parents[1])) + +from migrate_seed import migrate_seed +from seed_data import _ld_nm_id, _parse_release_date, _release_date_from_scrape +import seed_data + + +class SourceParsingTests(unittest.TestCase): + def test_seed_rejects_wrong_missing_and_malformed_person_identity(self): + with tempfile.TemporaryDirectory() as directory: + scraped = Path(directory) + for nm_id, url in ( + ('nm1165110', 'https://www.imdb.com/name/nm1165110/'), + ('nm0000245', 'https://www.imdb.com/name/nm1165110/'), + ('nm0000001', ''), + ('nm0000002', 'https://www.imdb.com/name/nm0000002wrong/')): + (scraped / f'name_{nm_id}.json').write_text(json.dumps( + {'h1': 'Chris Hemsworth', 'ld': {'url': url}})) + database = Mock() + database.session.query.return_value.count.return_value = 0 + person = Mock(side_effect=lambda **values: SimpleNamespace(**values, credits=[])) + models = [Mock() for _ in range(8)] + with patch.object(seed_data, 'SCRAPED', scraped), patch('builtins.print'): + seed_data.seed_all(database, models[0], person, *models[1:]) + self.assertEqual(person.call_count, 1) + self.assertEqual(person.call_args.kwargs['nm_id'], 'nm1165110') + + def test_person_canonical_url_is_an_exact_identity(self): + self.assertEqual(_ld_nm_id({'url': 'https://www.imdb.com/name/nm1165110/'}), 'nm1165110') + self.assertNotEqual(_ld_nm_id({'url': 'https://www.imdb.com/name/nm0000245/'}), 'nm1165110') + for url in ('', '/title/tt1165110/', '/name/nm1165110garbage/', 42): + with self.subTest(url=url): + self.assertIsNone(_ld_nm_id({'url': url})) + self.assertIsNone(_ld_nm_id({})) + + def test_complete_dates_only_and_structured_source_wins(self): + self.assertEqual(_parse_release_date('2008-07-18'), '2008-07-18') + self.assertEqual(_parse_release_date('Release date | July 18, 2008 (United States)'), '2008-07-18') + self.assertEqual(_parse_release_date('September 1, 2000 (Italy)'), '2000-09-01') + self.assertEqual(_release_date_from_scrape( + {'datePublished': '2008-07-14'}, {'releasedate': 'July 18, 2008 (United States)'}), '2008-07-14') + self.assertEqual(_release_date_from_scrape( + {'datePublished': '2008-02-30'}, {'releaseDate': 'July 18, 2008'}), '2008-07-18') + for value in ('2008', '2008-07', 'Release date | July 18, 20', + 'Release date | February 30, 2008', '2008-07-180', 'Unknown'): + with self.subTest(value=value): + self.assertEqual(_parse_release_date(value), '') + + +class SeedMigrationTests(unittest.TestCase): + def setUp(self): + self.temp = tempfile.TemporaryDirectory() + self.addCleanup(self.temp.cleanup) + self.db_path = Path(self.temp.name) / 'imdb.db' + with sqlite3.connect(self.db_path) as connection: + connection.executescript(''' + CREATE TABLE persons (id INTEGER PRIMARY KEY, nm_id TEXT UNIQUE, + name TEXT, birth_year INTEGER, death_year INTEGER, + birth_place TEXT, bio TEXT, primary_profession TEXT, + photo_path TEXT, known_for_json TEXT); + CREATE TABLE titles (id INTEGER PRIMARY KEY, tt_id TEXT, + primary_title TEXT, release_date TEXT, rating_avg REAL); + CREATE TABLE credits (id INTEGER PRIMARY KEY, title_id INTEGER, + person_id INTEGER, character TEXT); + CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT); + CREATE TABLE user_ratings (id INTEGER PRIMARY KEY, user_id INTEGER, + title_id INTEGER, rating INTEGER); + INSERT INTO persons VALUES (1, 'nm1165110', 'Robin Williams', 1951, 2014, + 'unverified place', 'unverified biography', 'Actor', 'nm1165110.jpg', '["tt0000001"]'); + INSERT INTO persons VALUES (2, 'nm0850696', 'Matt Tarses', 1966, NULL, + '', 'retain biography', 'Producer', 'retain.jpg', '[]'); + INSERT INTO persons VALUES (3, 'nm0001855', 'Tom Wilson(LXXXVI)', NULL, NULL, + '', 'retain variant', 'Actor', 'variant.jpg', '[]'); + INSERT INTO titles VALUES (1, 'tt4154796', 'Avengers: Endgame', + 'Release date | April 26, 2019 (United States)', 8.4); + INSERT INTO titles VALUES (2, 'tt0000002', 'Partial source', 'Release date | May 2, 20', 5.0); + INSERT INTO credits VALUES (1, 1, 1, 'Thor'); + INSERT INTO users VALUES (1, 'seed user'); + INSERT INTO user_ratings VALUES (1, 1, 1, 8); + ''') + self.manifest = Path(self.temp.name) / 'corrections.json' + self.manifest.write_text(json.dumps({ + 'schema_version': 1, + 'source_seed': {'sha256': hashlib.sha256(self.db_path.read_bytes()).hexdigest()}, + 'people': [{'nconst': 'nm1165110', 'primaryName': 'Chris Hemsworth', + 'birthYear': '1983', 'deathYear': '\\N', + 'primaryProfession': 'actor,producer,soundtrack', + 'knownForTitles': 'tt4154796,tt0800369', + 'kind': 'profile_collision'}], + 'birth_year_corrections': [{'nconst': 'nm0850696', 'birthYear': '1968'}], + })) + + def rows(self, table): + with sqlite3.connect(self.db_path) as connection: + return connection.execute(f'SELECT * FROM {table} ORDER BY id').fetchall() + + def test_migration_preserves_relationships_and_unrelated_state(self): + protected = {table: self.rows(table) for table in ('credits', 'users', 'user_ratings')} + old_people = self.rows('persons') + old_titles = self.rows('titles') + result = migrate_seed(self.db_path, self.manifest) + for table, rows in protected.items(): + self.assertEqual(self.rows(table), rows) + people = self.rows('persons') + self.assertEqual(people[0], (1, 'nm1165110', 'Chris Hemsworth', 1983, None, + '', '', 'Actor, Producer, Soundtrack', '', + '["tt4154796", "tt0800369"]')) + self.assertEqual(people[1], old_people[1][:3] + (1968,) + old_people[1][4:]) + self.assertEqual(people[2], old_people[2]) + self.assertEqual(self.rows('titles')[0], old_titles[0][:3] + ('2019-04-26',) + old_titles[0][4:]) + self.assertEqual(self.rows('titles')[1], old_titles[1]) + self.assertEqual(result['changed_rows'], {'persons': 2, 'titles': 1}) + self.assertEqual(result['protected_tables_unchanged'], ['credits', 'user_ratings', 'users']) + + def test_second_migration_is_byte_identical(self): + migrate_seed(self.db_path, self.manifest) + before = self.db_path.read_bytes() + result = migrate_seed(self.db_path, self.manifest) + self.assertEqual(result['changed_rows'], {}) + self.assertEqual(self.db_path.read_bytes(), before) + + def test_unexpected_source_is_rejected_without_writes(self): + with sqlite3.connect(self.db_path) as connection: + connection.execute("UPDATE users SET name='different state'") + before = self.db_path.read_bytes() + with self.assertRaisesRegex(ValueError, 'source seed'): + migrate_seed(self.db_path, self.manifest) + self.assertEqual(self.db_path.read_bytes(), before) + + +if __name__ == '__main__': + unittest.main() From 085d5235459a2e44fc4da0c44d84ab7f76c197da Mon Sep 17 00:00:00 2001 From: JackJin <1037461232@qq.com> Date: Tue, 8 Sep 2026 09:55:11 +0800 Subject: [PATCH 03/17] fix(imdb): distinguish title years from regional release dates --- .assets-revision | 2 +- sites/imdb/docs/seed-provenance.md | 47 +++++++++++++++++++---- sites/imdb/migrate_seed.py | 30 ++++++++++++--- sites/imdb/seed_corrections.json | 44 ++++++++++++++++++++- sites/imdb/tests/test_seed_data.py | 61 ++++++++++++++++++++++++++++-- 5 files changed, 165 insertions(+), 19 deletions(-) diff --git a/.assets-revision b/.assets-revision index 06d2404e..3c83fded 100644 --- a/.assets-revision +++ b/.assets-revision @@ -5,4 +5,4 @@ # is a git revision (branch name like `main`, a tag, or a specific commit # sha). Override at runtime with the ASSETS_REVISION env var. repo: ChilleD/WebHarbor -revision: 4d5709e171d7c40fc742727adfa98b04b9023039 +revision: e70f49d8b6d0f32c940688e8e53e7c558f57a788 diff --git a/sites/imdb/docs/seed-provenance.md b/sites/imdb/docs/seed-provenance.md index 1ee96aa7..bcc13e62 100644 --- a/sites/imdb/docs/seed-provenance.md +++ b/sites/imdb/docs/seed-provenance.md @@ -8,8 +8,9 @@ scraped profile. Missing, malformed and mismatching identities are skipped. The existing title canonical-URL check remains in place. The contributor's title catalog, credit relationships, image files and user -state are retained. `migrate_seed.py` is an offline asset migration; it is not -called during app startup or reset. +state are retained, with two sourced title-year corrections described below. +`migrate_seed.py` is an offline asset migration; it is not called during app +startup or reset. ## Sources and scope @@ -61,9 +62,28 @@ contain a complete, valid date. The migration normalizes 390 existing dates without supplying new facts. The two year-only values remain unchanged: `tt0994314` (2008) and `tt33041431` (2027). +Two title years are corrected by exact `tconst`, using the official IMDb title +metadata observed through the search index on September 8, 2026: + +| Title | Previous `year` | Canonical `year` | Preserved regional `release_date` | +|---|---|---|---| +| [Memento](https://www.imdb.com/title/tt0209144/) | 2001 | 2000 | 2001-05-25 | +| [Schindler's List](https://www.imdb.com/title/tt0108052/) | 1994 | 1993 | 1994-02-04 | + +The Schindler's List page separately lists its United States release on +February 4, 1994. A regional release date can have a later year than the +canonical title year. These two corrections change only `titles.year`; the +regional dates and all other fields stay unchanged. The manifest records the +before/after values, source URLs, observation date and source access method. +Each `source_record_sha256` hashes the manifest's canonical JSON source record +(UTF-8, sorted keys, compact separators), not an unavailable full webpage. +No broader title-year correction or rating/gross refresh is included. + ## Reproduction and validation -After extracting the original asset revision into the checkout: +For byte-identical reproduction of the latest candidate, extract the +[previous reviewer asset revision](https://huggingface.co/datasets/ChilleD/WebHarbor/tree/4d5709e171d7c40fc742727adfa98b04b9023039) +into the checkout, then run: ```bash python3 sites/imdb/migrate_seed.py --report /tmp/imdb-migration-first.json @@ -71,6 +91,13 @@ python3 sites/imdb/migrate_seed.py --report /tmp/imdb-migration-second.json python3 -m unittest discover -s sites/imdb/tests -p test_seed_data.py ``` +That input seed SHA256 is +`27558f13a9dd3b003435463ceaad8538e2b6f9fc5095c3bd6831666fecaab5d9`. +The original contributor revision is also a supported input and produces the +same logical database. Its single-transaction history gives different SQLite +file bytes from the previous-candidate path, so those two output hashes are +not claimed to match. + The migration refuses to modify an unexpected source seed. Its transaction checks the complete logical diff before committing. A completed migration performs no writes on subsequent runs. Reports contain table/row hashes and @@ -78,19 +105,23 @@ changed field names, not user values or old biographies. Verified locally with Python 3.11.3 / SQLite 3.40.1: -- All six targeted tests pass: canonical identity rejection/import, complete +- All nine targeted tests pass: canonical identity rejection/import, complete date parsing and precedence, preserved relationships/state, byte-identical - second migration, and rejection of a modified source. + second migration, rejection of a modified source, both supported migration + paths, and rejection of an unexpected title-year value. - 691 person rows change: 689 selected profiles and two birth years. -- 390 title rows change only in `release_date`. +- From the original seed, 390 title rows normalize `release_date`; two of those + rows also correct `year`. From the previous reviewer candidate, exactly two + `titles.year` values change and the complete remaining database is identical. - An independent comparison against the original seed confirms all other title/person fields and all credits, genres, news, reviews, ratings, users, watchlists and title/genre relationships are unchanged. -- Second migration: zero changed rows and identical file SHA256. +- Second migration: zero changed rows and identical file SHA256. Repeating + from the same previous-candidate input produces identical output bytes. - Original archive and the checkout's runtime database are unchanged. Candidate seed SHA256: -`27558f13a9dd3b003435463ceaad8538e2b6f9fc5095c3bd6831666fecaab5d9`. +`69f849b9c61fb71349958fdbedc301162881e3a171eb65098c2e5f6623b82471`. These are source and migration checks. Container reset, browser behavior, visual comparison and task execution are separate validation steps. The diff --git a/sites/imdb/migrate_seed.py b/sites/imdb/migrate_seed.py index cca05140..7a058203 100644 --- a/sites/imdb/migrate_seed.py +++ b/sites/imdb/migrate_seed.py @@ -1,8 +1,8 @@ """Apply the sourced IMDb corrections once, before packaging the HF seed. This is an offline asset migration, never a runtime/reset hook. It preserves -identifiers, relationships and user state. Only the original source seed can -be changed; a fully corrected seed is an exact byte-preserving no-op. +identifiers, relationships and user state. Only explicitly hashed source seeds +can be changed; a fully corrected seed is an exact byte-preserving no-op. """ import argparse from collections import Counter @@ -74,10 +74,28 @@ def _prepare_updates(connection, manifest): if current[field] != value} if changes: updates.append(('persons', current['id'], nm_id, changes)) - for row_id, tt_id, original in connection.execute('SELECT id,tt_id,release_date FROM titles'): + title_years = {} + for record in manifest.get('title_year_corrections', []): + tt_id = record['tconst'] + if (not re.fullmatch(r'tt\d+', tt_id) or tt_id in title_years + or type(record['before']) is not int or type(record['after']) is not int): + raise ValueError('Invalid or duplicate title-year correction') + title_years[tt_id] = record + for row_id, tt_id, original, year in connection.execute('SELECT id,tt_id,release_date,year FROM titles'): + changes = {} parsed = _parse_release_date(original) if parsed and parsed != original: - updates.append(('titles', row_id, tt_id, {'release_date': parsed})) + changes['release_date'] = parsed + correction = title_years.pop(tt_id, None) + if correction: + if year not in (correction['before'], correction['after']): + raise ValueError(f'Unexpected title year for correction: {tt_id}') + if year != correction['after']: + changes['year'] = correction['after'] + if changes: + updates.append(('titles', row_id, tt_id, changes)) + if title_years: + raise ValueError('Correction title missing from source seed') return updates @@ -117,7 +135,9 @@ def migrate_seed(database, manifest_path=MANIFEST): with closing(sqlite3.connect(database.as_uri() + '?mode=rw', uri=True)) as connection: before = _snapshot(connection) updates = _prepare_updates(connection, manifest) - if updates and before_bytes != manifest['source_seed']['sha256']: + accepted_sources = {manifest['source_seed']['sha256']} + accepted_sources.update(source['sha256'] for source in manifest.get('additional_source_seeds', [])) + if updates and before_bytes not in accepted_sources: raise ValueError('Refusing to change an unexpected source seed') if updates: try: diff --git a/sites/imdb/seed_corrections.json b/sites/imdb/seed_corrections.json index 69ac4565..2296fa97 100644 --- a/sites/imdb/seed_corrections.json +++ b/sites/imdb/seed_corrections.json @@ -8,6 +8,47 @@ "member": "imdb/instance_seed/imdb.db", "sha256": "f9f1431142d528c3126663a452dc12df0a8cd952f49b0b0be5fb807fd8bb5abf" }, + "additional_source_seeds": [ + { + "repository": "ChilleD/WebHarbor", + "revision": "4d5709e171d7c40fc742727adfa98b04b9023039", + "archive": "imdb.tar.gz", + "archive_sha256": "80fbfed63f66312e2a0c853972d17652c4ada8b2790cda8c4d7286ee667cb9b2", + "member": "imdb/instance_seed/imdb.db", + "sha256": "27558f13a9dd3b003435463ceaad8538e2b6f9fc5095c3bd6831666fecaab5d9", + "description": "Previously reviewed profile/date correction candidate; only two title.year changes remain." + } + ], + "title_year_corrections": [ + { + "tconst": "tt0209144", + "title": "Memento", + "before": 2001, + "after": 2000, + "preserved_release_date": "2001-05-25", + "source": { + "url": "https://www.imdb.com/title/tt0209144/", + "observed_on": "2026-09-08", + "access": "official IMDb title search index; not a direct page screenshot", + "fact": "Memento (2000)" + }, + "source_record_sha256": "c3e03479dc79666e3072f9277fcdb1a99c38b98a61657baef7ca02f715f5e984" + }, + { + "tconst": "tt0108052", + "title": "Schindler's List", + "before": 1994, + "after": 1993, + "preserved_release_date": "1994-02-04", + "source": { + "url": "https://www.imdb.com/title/tt0108052/", + "observed_on": "2026-09-08", + "access": "official IMDb title search index; not a direct page screenshot", + "fact": "Schindler's List (1993); United States release February 4, 1994" + }, + "source_record_sha256": "13e7607b15a0900d449fa60d03d4d3ee70838f3bc1091ad835689fa6c048c17c" + } + ], "official_source": { "description_url": "https://data.imdb.com/non-commercial-datasets/", "url": "https://datasets.imdbws.com/name.basics.tsv.gz", @@ -24,7 +65,8 @@ "profile_collision": 642, "canonicalization_of_uncertain_alias_or_profile": 47, "same_identity_birth_year_only": 2, - "policy": "Match exact nconst only. Correct selected profile facts; remove unverifiable biography, birthplace, and portrait links. Preserve format/diacritic variants and source-missing identities. Convert only existing complete release dates to ISO; retain unknown/partial dates." + "exact_title_canonical_year_only": 2, + "policy": "Match exact nconst only. Correct selected profile facts; remove unverifiable biography, birthplace, and portrait links. Preserve format/diacritic variants and source-missing identities. Convert only existing complete release dates to ISO; retain unknown/partial dates. Correct the two explicitly sourced canonical title years while preserving regional release dates." }, "birth_year_corrections": [ { diff --git a/sites/imdb/tests/test_seed_data.py b/sites/imdb/tests/test_seed_data.py index d7311d13..55f162b0 100644 --- a/sites/imdb/tests/test_seed_data.py +++ b/sites/imdb/tests/test_seed_data.py @@ -69,7 +69,7 @@ def setUp(self): birth_place TEXT, bio TEXT, primary_profession TEXT, photo_path TEXT, known_for_json TEXT); CREATE TABLE titles (id INTEGER PRIMARY KEY, tt_id TEXT, - primary_title TEXT, release_date TEXT, rating_avg REAL); + primary_title TEXT, release_date TEXT, rating_avg REAL, year INTEGER); CREATE TABLE credits (id INTEGER PRIMARY KEY, title_id INTEGER, person_id INTEGER, character TEXT); CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT); @@ -82,8 +82,10 @@ def setUp(self): INSERT INTO persons VALUES (3, 'nm0001855', 'Tom Wilson(LXXXVI)', NULL, NULL, '', 'retain variant', 'Actor', 'variant.jpg', '[]'); INSERT INTO titles VALUES (1, 'tt4154796', 'Avengers: Endgame', - 'Release date | April 26, 2019 (United States)', 8.4); - INSERT INTO titles VALUES (2, 'tt0000002', 'Partial source', 'Release date | May 2, 20', 5.0); + 'Release date | April 26, 2019 (United States)', 8.4, 2019); + INSERT INTO titles VALUES (2, 'tt0000002', 'Partial source', 'Release date | May 2, 20', 5.0, 2020); + INSERT INTO titles VALUES (3, 'tt0209144', 'Memento', 'May 25, 2001 (United States)', 8.4, 2001); + INSERT INTO titles VALUES (4, 'tt0108052', 'Schindler''s List', 'February 4, 1994 (United States)', 9.0, 1994); INSERT INTO credits VALUES (1, 1, 1, 'Thor'); INSERT INTO users VALUES (1, 'seed user'); INSERT INTO user_ratings VALUES (1, 1, 1, 8); @@ -119,7 +121,7 @@ def test_migration_preserves_relationships_and_unrelated_state(self): self.assertEqual(people[2], old_people[2]) self.assertEqual(self.rows('titles')[0], old_titles[0][:3] + ('2019-04-26',) + old_titles[0][4:]) self.assertEqual(self.rows('titles')[1], old_titles[1]) - self.assertEqual(result['changed_rows'], {'persons': 2, 'titles': 1}) + self.assertEqual(result['changed_rows'], {'persons': 2, 'titles': 3}) self.assertEqual(result['protected_tables_unchanged'], ['credits', 'user_ratings', 'users']) def test_second_migration_is_byte_identical(self): @@ -137,6 +139,57 @@ def test_unexpected_source_is_rejected_without_writes(self): migrate_seed(self.db_path, self.manifest) self.assertEqual(self.db_path.read_bytes(), before) + def add_title_corrections(self, include_current_source=False): + manifest = json.loads(self.manifest.read_text()) + manifest['title_year_corrections'] = [ + {'tconst': 'tt0209144', 'before': 2001, 'after': 2000}, + {'tconst': 'tt0108052', 'before': 1994, 'after': 1993}, + ] + if include_current_source: + manifest['additional_source_seeds'] = [ + {'sha256': hashlib.sha256(self.db_path.read_bytes()).hexdigest()}] + self.manifest.write_text(json.dumps(manifest)) + + def test_original_source_combines_date_and_canonical_year_corrections(self): + self.add_title_corrections() + result = migrate_seed(self.db_path, self.manifest) + rows = self.rows('titles') + self.assertEqual(rows[2][3:], ('2001-05-25', 8.4, 2000)) + self.assertEqual(rows[3][3:], ('1994-02-04', 9.0, 1993)) + title_changes = {item['key']: item['fields'] for item in result['logical_diff'] + if item['table'] == 'titles'} + for identity in ('tt0209144', 'tt0108052'): + self.assertEqual(title_changes[identity], ['release_date', 'year']) + before = self.db_path.read_bytes() + self.assertEqual(migrate_seed(self.db_path, self.manifest)['changed_rows'], {}) + self.assertEqual(self.db_path.read_bytes(), before) + + def test_previous_candidate_changes_only_two_year_fields(self): + migrate_seed(self.db_path, self.manifest) + before = {table: self.rows(table) for table in + ('persons', 'titles', 'credits', 'users', 'user_ratings')} + self.add_title_corrections(include_current_source=True) + result = migrate_seed(self.db_path, self.manifest) + self.assertEqual(result['changed_rows'], {'titles': 2}) + self.assertEqual(result['changed_fields'], {'titles.year': 2}) + for table, rows in before.items(): + expected = [row[:-1] + ({3: 2000, 4: 1993}.get(row[0], row[-1]),) + for row in rows] if table == 'titles' else rows + self.assertEqual(self.rows(table), expected) + first = self.db_path.read_bytes() + self.assertEqual(migrate_seed(self.db_path, self.manifest)['changed_rows'], {}) + self.assertEqual(self.db_path.read_bytes(), first) + + def test_unexpected_title_year_is_rejected_without_writes(self): + migrate_seed(self.db_path, self.manifest) + with sqlite3.connect(self.db_path) as connection: + connection.execute("UPDATE titles SET year=2002 WHERE tt_id='tt0209144'") + self.add_title_corrections(include_current_source=True) + before = self.db_path.read_bytes() + with self.assertRaisesRegex(ValueError, 'Unexpected title year'): + migrate_seed(self.db_path, self.manifest) + self.assertEqual(self.db_path.read_bytes(), before) + if __name__ == '__main__': unittest.main() From 50bcce503637522d15bdafa533381204750f415f Mon Sep 17 00:00:00 2001 From: JackJin <1037461232@qq.com> Date: Tue, 8 Sep 2026 09:55:11 +0800 Subject: [PATCH 04/17] fix(imdb): repair interactive flows and task verification --- sites/imdb/app.py | 72 +- sites/imdb/static/css/style.css | 158 +++++ sites/imdb/tasks.jsonl | 31 +- sites/imdb/templates/account.html | 5 +- sites/imdb/templates/advanced_search.html | 2 +- sites/imdb/templates/base.html | 26 +- sites/imdb/templates/chart.html | 57 +- sites/imdb/templates/index.html | 18 +- sites/imdb/templates/login.html | 1 + sites/imdb/templates/register.html | 1 + sites/imdb/templates/title_detail.html | 20 +- sites/imdb/templates/title_write_review.html | 1 + sites/imdb/templates/watchlist.html | 3 +- sites/imdb/tests/test_answer_checks.py | 65 ++ sites/imdb/tests/test_app.py | 91 +++ sites/imdb/tests/test_boundary.py | 317 +++++++++ sites/imdb/tests/test_read_tasks.py | 560 ++++++++++++++++ sites/imdb/tests/test_state_tasks.py | 587 ++++++++++++++++ sites/imdb/tests/test_verify_entry.py | 67 ++ sites/imdb/tests/test_verify_lib.py | 285 ++++++++ sites/imdb/verify/README.md | 34 + sites/imdb/verify/answer_checks.py | 178 +++++ sites/imdb/verify/read_tasks.py | 666 +++++++++++++++++++ sites/imdb/verify/state_tasks.py | 402 +++++++++++ sites/imdb/verify/verify_0.py | 6 + sites/imdb/verify/verify_10.py | 6 + sites/imdb/verify/verify_12.py | 6 + sites/imdb/verify/verify_14.py | 6 + sites/imdb/verify/verify_15.py | 6 + sites/imdb/verify/verify_16.py | 6 + sites/imdb/verify/verify_17.py | 6 + sites/imdb/verify/verify_2.py | 6 + sites/imdb/verify/verify_3.py | 6 + sites/imdb/verify/verify_4.py | 6 + sites/imdb/verify/verify_7.py | 6 + sites/imdb/verify/verify_8.py | 6 + sites/imdb/verify/verify_9.py | 6 + sites/imdb/verify/verify_lib.py | 301 +++++++++ sites/imdb/verify/verify_main.py | 36 + 39 files changed, 3996 insertions(+), 66 deletions(-) create mode 100644 sites/imdb/tests/test_answer_checks.py create mode 100644 sites/imdb/tests/test_app.py create mode 100644 sites/imdb/tests/test_boundary.py create mode 100644 sites/imdb/tests/test_read_tasks.py create mode 100644 sites/imdb/tests/test_state_tasks.py create mode 100644 sites/imdb/tests/test_verify_entry.py create mode 100644 sites/imdb/tests/test_verify_lib.py create mode 100644 sites/imdb/verify/README.md create mode 100644 sites/imdb/verify/answer_checks.py create mode 100644 sites/imdb/verify/read_tasks.py create mode 100644 sites/imdb/verify/state_tasks.py create mode 100644 sites/imdb/verify/verify_0.py create mode 100644 sites/imdb/verify/verify_10.py create mode 100644 sites/imdb/verify/verify_12.py create mode 100644 sites/imdb/verify/verify_14.py create mode 100644 sites/imdb/verify/verify_15.py create mode 100644 sites/imdb/verify/verify_16.py create mode 100644 sites/imdb/verify/verify_17.py create mode 100644 sites/imdb/verify/verify_2.py create mode 100644 sites/imdb/verify/verify_3.py create mode 100644 sites/imdb/verify/verify_4.py create mode 100644 sites/imdb/verify/verify_7.py create mode 100644 sites/imdb/verify/verify_8.py create mode 100644 sites/imdb/verify/verify_9.py create mode 100644 sites/imdb/verify/verify_lib.py create mode 100644 sites/imdb/verify/verify_main.py diff --git a/sites/imdb/app.py b/sites/imdb/app.py index 47424414..75496969 100644 --- a/sites/imdb/app.py +++ b/sites/imdb/app.py @@ -12,10 +12,13 @@ import json import re from datetime import datetime +from urllib.parse import unquote, urlsplit, urlunsplit from flask import (Flask, render_template, request, redirect, url_for, flash, abort, jsonify) from flask_sqlalchemy import SQLAlchemy +from flask_wtf.csrf import CSRFProtect +from email_validator import EmailNotValidError, validate_email from flask_login import (LoginManager, UserMixin, login_user, logout_user, login_required, current_user) from werkzeug.security import generate_password_hash, check_password_hash @@ -33,6 +36,7 @@ os.makedirs(os.path.join(BASE_DIR, 'instance'), exist_ok=True) db = SQLAlchemy(app) +csrf = CSRFProtect(app) login_manager = LoginManager(app) login_manager.login_view = 'login' login_manager.login_message = 'Please sign in to use this feature.' @@ -420,9 +424,16 @@ def title_write_review(tt_id): if not headline or not body: flash('Headline and body are required.', 'error') return render_template('title_write_review.html', title=t) + try: + rating = int(rating) if rating else None + except ValueError: + rating = 0 + if rating is not None and not 1 <= rating <= 10: + flash('Rating must be a whole number from 1 to 10.', 'error') + return render_template('title_write_review.html', title=t) r = Review(title_id=t.id, user_id=current_user.id, headline=headline[:160], body=body, - rating=int(rating) if rating else None) + rating=rating) db.session.add(r) db.session.commit() flash('Review posted.', 'success') @@ -465,7 +476,37 @@ def title_watchlist_toggle(tt_id): db.session.add(WatchlistItem(user_id=current_user.id, title_id=t.id)) flash('Added to Watchlist.', 'success') db.session.commit() - return redirect(request.referrer or url_for('title_detail', tt_id=t.tt_id)) + return redirect(_same_origin_return(url_for('title_detail', tt_id=t.tt_id))) + + +def _same_origin_return(fallback): + """Return only a same-origin path/query, never an authority or credentials.""" + referrer = request.referrer + if not referrer: + return fallback + decoded = unquote(referrer) + if '\\' in decoded or any(ord(char) < 32 or ord(char) == 127 for char in decoded): + return fallback + try: + target = urlsplit(referrer) + current = urlsplit(request.host_url) + + def origin(parts): + if parts.scheme not in ('http', 'https') or not parts.hostname: + return None + if parts.username is not None or parts.password is not None: + return None + port = parts.port + return parts.scheme, parts.hostname, port if port is not None else (443 if parts.scheme == 'https' else 80) + + if origin(target) is None or origin(target) != origin(current): + return fallback + except ValueError: + return fallback + path = target.path or '/' + if not path.startswith('/') or unquote(path).startswith('//'): + return fallback + return urlunsplit(('', '', path, target.query, '')) @app.route('/name/') @@ -504,8 +545,8 @@ def advanced_title_search(): query = Title.query selected_genres = q.getlist('genre') title_type = q.get('title_type', '') - year_from = q.get('year_from', type=int) - year_to = q.get('year_to', type=int) + year_from = _search_year(q.get('year_from')) + year_to = _search_year(q.get('year_to')) rating_min = q.get('rating_min', type=float) sort = q.get('sort', 'popularity') if title_type: @@ -542,6 +583,18 @@ def advanced_title_search(): rating_min=rating_min, sort=sort) +def _search_year(raw): + if raw is None or not raw.strip(): + return None + try: + year = int(raw) + except ValueError: + abort(400, description='Search year must be a whole number from 1 to 9999.') + if not 1 <= year <= 9999: + abort(400, description='Search year must be a whole number from 1 to 9999.') + return year + + @app.route('/chart/top') def chart_top(): titles = (Title.query @@ -585,9 +638,9 @@ def chart_boxoffice(): .order_by(desc(Title.box_office_us)) .limit(50).all()) return render_template('chart.html', titles=titles, - chart_name='Top Box Office (US)', + chart_name='Domestic box office', chart_slug='boxoffice', - description='Highest US domestic gross.') + description='Titles in this catalog, ranked by cumulative US & Canada gross.') @app.route('/genre/') @@ -639,6 +692,11 @@ def register(): if not email or not name or len(pw) < 6: flash('Email, name and a 6+ character password are required.', 'error') return render_template('register.html') + try: + validate_email(email, check_deliverability=False) + except EmailNotValidError: + flash('Enter a valid email address.', 'error') + return render_template('register.html') if User.query.filter_by(email=email).first(): flash('Account with that email already exists.', 'error') return render_template('register.html') @@ -669,7 +727,7 @@ def login(): return render_template('login.html') -@app.route('/logout') +@app.route('/logout', methods=['POST']) @login_required def logout(): logout_user() diff --git a/sites/imdb/static/css/style.css b/sites/imdb/static/css/style.css index fcd7a7bd..05ce9c06 100644 --- a/sites/imdb/static/css/style.css +++ b/sites/imdb/static/css/style.css @@ -234,3 +234,161 @@ h3 { font-size: 16px; margin: 16px 0 6px; } padding: 18px 0; font-size: 12px; } .footer a { color: var(--imdb-yellow); } + +/* IMDb navigation and shared layout. Keep all media local to the catalog. */ +body { font-family: Roboto, Helvetica, Arial, sans-serif; line-height: 1.5; } +.container { max-width: 1280px; padding-left: 24px; padding-right: 24px; } +main.container { padding-top: 32px; padding-bottom: 60px; } +.topbar { padding: 0; } +.topbar .nav { min-height: 56px; gap: 16px; padding-left: 12px; padding-right: 12px; } +.brand { flex: 0 0 64px; height: 32px; padding: 0 4px; text-align: center; font-family: Impact, 'Arial Narrow', sans-serif; font-size: 25px; line-height: 32px; letter-spacing: -1px; } +.primary-nav { flex: none; } +.primary-nav .menu { padding: 0; } +.menu summary { list-style: none; padding: 8px; border-radius: 4px; font-size: 14px; font-weight: 600; white-space: nowrap; cursor: pointer; } +.menu summary::-webkit-details-marker { display: none; } +.menu summary span { margin-right: 4px; font-size: 18px; } +.menu summary:hover, .menu[open] summary { background: #333; } +.primary-nav .dropdown { display: none; background: #1f1f1f; border-color: #444; box-shadow: 0 8px 20px #0006; border-radius: 4px; } +.primary-nav .menu:hover .dropdown, .primary-nav .menu:focus-within .dropdown { display: none; } +.primary-nav .menu[open] .dropdown { display: block; } +.primary-nav .dropdown a { color: #fff; padding: 10px 16px; } +.primary-nav .dropdown a:hover { background: #333; } +.search { max-width: none; min-width: 0; height: 32px; } +.search select { max-width: 90px; border-right: 1px solid #bbb; background: white; padding: 4px 8px; } +.search input { min-width: 0; padding: 4px 8px; background: white; } +.search button { padding: 3px 10px; background: white; color: #666; } +.search button svg { display: block; } +.user-area { align-items: center; gap: 18px; flex: none; font-size: 14px; white-space: nowrap; } +.user-area .nav-watchlist { border-left: 2px solid #444; padding-left: 18px; } +a:focus-visible, button:focus-visible, summary:focus-visible { outline: 2px solid #5799ef; outline-offset: 3px; } +h1 { font-size: 36px; font-weight: 400; line-height: 1.15; } +h2 { font-size: 22px; line-height: 1.2; font-weight: 600; border-bottom: 0; border-left: 4px solid var(--imdb-yellow); padding: 0 0 0 10px; } +.row-head h2 { border-bottom: 0; } +.row-head { gap: 16px; } +.eyebrow { font-size: 12px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; } +.card-grid { gap: 16px; } +.card { padding: 0 0 16px; overflow: hidden; border-radius: 8px; } +.card .poster { display: block; border-radius: 0; margin-bottom: 12px; } +.card-title, .card-meta { padding: 0 12px; } +.card-title { font-size: 16px; font-weight: 400; } +.card-meta { font-size: 14px; } + +/* The offline home preserves the available catalog; it does not invent trailers. */ +.home-page { --imdb-bg: #000; --imdb-fg: #fff; --imdb-fg-muted: #aaa; --imdb-panel: #1a1a1a; --imdb-border: #333; --imdb-link: #5799ef; } +.home-page .hero { padding-top: 12px; } +.home-page .hero h1 { font-size: 28px; font-weight: 500; color: var(--imdb-yellow); } +.home-page .hero .lede { margin-top: 8px; } +.home-page .card-grid { display: grid; grid-auto-flow: column; grid-auto-columns: calc((100% - 80px) / 6); grid-template-columns: none; overflow-x: auto; padding-bottom: 12px; scroll-snap-type: x proximity; } +.home-page .card { scroll-snap-align: start; } +.home-page .row { margin-top: 32px; } +.home-page .row-head h2 { margin-top: 12px; } +.watchlist-prompt { margin-top: 36px; } +.watchlist-prompt p { text-align: center; margin: 32px 0 18px; } +.watchlist-prompt .btn { display: block; width: max-content; margin: 0 auto 48px; border-radius: 24px; padding: 8px 30px; background: #1a1a1a; color: #5799ef; } + +/* Poster list mirrors the chart's visual hierarchy without exposing detail-only task facts. */ +.chart-head { padding-top: 16px; } +.chart-head .muted { margin-top: 8px; } +.chart-layout { display: grid; grid-template-columns: minmax(0, 2.15fr) minmax(230px, 1fr); gap: 48px; } +.chart-count { margin: 22px 0; } +.chart-list { list-style: none; padding: 0; margin: 0; } +.chart-item { min-height: 118px; display: flex; align-items: center; gap: 12px; padding: 8px; border-radius: 12px; } +.chart-item:nth-child(odd) { background: #f8f8f8; } +.chart-poster-link { flex: 0 0 72px; } +.chart-poster { display: block; width: 72px; height: 106px; object-fit: cover; border-radius: 8px; } +.chart-item-content { flex: 1; min-width: 0; } +.chart-rank { display: inline-block; background: #3864b7; border-radius: 3px; padding: 0 10px; color: white; font-size: 14px; font-weight: 700; } +.chart-title { display: block; border: 0; padding: 0; margin: 4px 0; font-size: 16px; line-height: 1.3; } +.chart-title a { color: #222; } +.chart-meta, .chart-rating, .chart-gross { font-size: 14px; } +.chart-meta { color: #666; } +.chart-watchlist { flex: none; } +.chart-explore h2 { display: block; margin-top: 24px; } +.chart-explore h3 { font-size: 22px; margin-top: 36px; } +.chart-explore > a { display: flex; justify-content: space-between; gap: 8px; padding: 24px 16px; margin-top: 8px; border: 1px solid #ddd; border-radius: 12px; color: #222; } + +/* Title overview uses the existing poster and synopsis, with the source's dark header. */ +.title-overview { background: #1f1f1f; color: #fff; margin: -32px -24px 24px; padding: 16px 24px 28px; } +.title-jumps { display: flex; justify-content: flex-end; gap: 16px; font-size: 14px; margin-bottom: 16px; } +.title-jumps a { color: #fff; } +.title-detail .title-head { align-items: flex-start; margin-bottom: 20px; } +.title-head h1 { font-size: 48px; font-weight: 300; } +.title-overview .title-sub, .title-overview .rating-label, .title-overview .rating-votes, .title-overview .small, .title-overview .tagline { color: #bbb; } +.title-overview .pill { color: #fff; border-color: #777; font-size: 14px; padding: 3px 12px; } +.title-overview .rating-label { font-size: 12px; letter-spacing: 1.5px; } +.title-overview-body { display: grid; grid-template-columns: minmax(160px, 280px) minmax(0, 1fr); gap: 24px; } +.title-poster { float: none; width: 100%; max-width: 280px; border-radius: 8px; margin: 0; } +.title-synopsis { max-width: 700px; } +.title-synopsis .plot { margin-top: 0; } +.title-synopsis .plot-full { color: #fff; } +.title-synopsis .plot h2 { margin-top: 16px; } +.title-overview .rank-badge, .title-overview .popularity-badge { background: transparent; color: #ccc; padding: 0; } +.cast-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; } +.cast-card { display: flow-root; padding: 8px 0; background: transparent; min-height: 84px; } +.cast-photo { width: 80px; height: 80px; border-radius: 50%; margin-right: 16px; } +.cast-card .character { font-size: 14px; margin-top: 4px; } +.cast-card a { font-weight: 600; color: #222; } +.metadata { grid-template-columns: minmax(170px, 32%) 1fr; } +.metadata dt, .metadata dd { border-bottom: 1px solid #eee; padding: 8px 0; } +.user-actions { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; } +.user-actions form { margin: 0; } +.filters input[type=checkbox], .filters input[type=radio] { width: auto; } +.filters fieldset { min-width: 0; } +.review-card { border-left: 0; border: 1px solid #ddd; border-radius: 12px; background: #fff; padding: 20px; } +.footer { clear: both; text-align: center; background: #000; color: #aaa; padding: 40px 0; } +.footer-links { display: flex; flex-wrap: wrap; justify-content: center; gap: 16px 28px; margin-bottom: 28px; font-size: 14px; } +.footer-links a { color: #fff; } + +@media (max-width: 900px) { + .topbar .nav { flex-wrap: wrap; gap: 10px; padding-top: 12px; padding-bottom: 12px; } + .primary-nav { order: -1; } + .user-area { margin-left: auto; } + .search { order: 3; flex-basis: 100%; } + .chart-layout { grid-template-columns: minmax(0, 1fr); } + .chart-explore { border-top: 1px solid #ddd; } + .home-page .card-grid { grid-auto-columns: calc((100% - 48px) / 4); } + .title-head h1 { font-size: 36px; } + .title-overview-body { grid-template-columns: 200px minmax(0, 1fr); } +} +@media (max-width: 600px) { + .container { padding-left: 16px; padding-right: 16px; } + main.container { padding-top: 24px; } + .topbar .nav { gap: 6px; } + .menu summary { font-size: 0; padding-left: 4px; } + .menu summary span { font-size: 21px; margin: 0; } + .user-area { gap: 12px; font-size: 13px; } + .user-area .nav-watchlist { display: none; } + h1 { font-size: 30px; } + .row-head { align-items: baseline; } + .row-head h2 { font-size: 20px; } + .see-all { font-size: 12px; } + .home-page .card-grid { grid-auto-columns: 155px; } + .card-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } + .chart-head { padding-top: 4px; } + .chart-item { gap: 10px; flex-wrap: wrap; } + .chart-watchlist { margin-left: 82px; } + .title-overview { margin: -24px -16px 24px; padding: 16px; } + .title-jumps { justify-content: flex-start; gap: 12px; flex-wrap: wrap; font-size: 12px; } + .title-detail .title-head { display: block; } + .title-head h1 { font-size: 32px; } + .title-head-right { margin-top: 16px; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; } + .title-head-right .rating-box { text-align: left; } + .title-overview-body { grid-template-columns: 112px minmax(0, 1fr); gap: 16px; } + .title-synopsis { font-size: 14px; } + .title-synopsis .plot h2 { font-size: 18px; margin-top: 0; } + .tagline { display: none; } + .cast-grid { grid-template-columns: 1fr; gap: 12px; } + .metadata { grid-template-columns: minmax(110px, 44%) 1fr; gap: 0 12px; font-size: 14px; } + .metadata dd { overflow-wrap: anywhere; } + .filters { grid-template-columns: minmax(0, 1fr); } + .review-card header { gap: 12px; } + .review-rating { flex: none; } + .chart-table, .credits-table { font-size: 13px; } + .chart-table th, .chart-table td, .credits-table td { padding: 8px 4px; overflow-wrap: anywhere; } + .person-photo { width: 100px; } + .form { width: 100%; } +} + +.logout-form { margin: 0; } +.logout-form button { font: inherit; border: 0; padding: 0; background: transparent; color: #fff; cursor: pointer; } +.logout-form button:hover { color: var(--imdb-yellow); } diff --git a/sites/imdb/tasks.jsonl b/sites/imdb/tasks.jsonl index 7ae9a5dc..c0c2a0be 100644 --- a/sites/imdb/tasks.jsonl +++ b/sites/imdb/tasks.jsonl @@ -1,18 +1,13 @@ -{"web_name": "IMDb", "id": "IMDb--0", "ques": "Open the IMDb Top 250 movies chart. Which film is ranked #1, and what is its IMDb rating?", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} -{"web_name": "IMDb", "id": "IMDb--1", "ques": "On the IMDb Top 250 chart, identify the third-ranked movie and its release year.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} -{"web_name": "IMDb", "id": "IMDb--2", "ques": "Open the Top Box Office chart on IMDb. Pick the movie ranked first in that chart and report its production budget (visible only on the title's detail page).", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} -{"web_name": "IMDb", "id": "IMDb--3", "ques": "Visit the IMDb page for The Shawshank Redemption (1994). What is its runtime in minutes and its MPAA rating?", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} -{"web_name": "IMDb", "id": "IMDb--4", "ques": "On IMDb, open The Godfather (1972). Who directed it, and what was the film's worldwide gross?", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} -{"web_name": "IMDb", "id": "IMDb--5", "ques": "Visit The Dark Knight (2008) reviews page on IMDb sorted by most helpful. Report the headline and author of the top featured review.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} -{"web_name": "IMDb", "id": "IMDb--6", "ques": "Search IMDb for the name 'Christopher Nolan'. Open his profile and report his professional roles as listed under his name.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} -{"web_name": "IMDb", "id": "IMDb--7", "ques": "Find Christopher Nolan's filmography on IMDb. Among the movies he directed in the database, identify the one with the highest IMDb rating and report its title, release year, and IMDb rating.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} -{"web_name": "IMDb", "id": "IMDb--8", "ques": "Open the IMDb page for The Dark Knight (2008). Who is billed first in the cast, and what character do they play?", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} -{"web_name": "IMDb", "id": "IMDb--9", "ques": "Use IMDb's advanced title search to find Drama movies with an IMDb rating of at least 8.5, sorted by rating. Report the top three titles.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} -{"web_name": "IMDb", "id": "IMDb--10", "ques": "Use IMDb's advanced title search to find Crime movies released between 1990 and 1999 with IMDb rating of at least 8.5, sorted by rating. Open the top result and report its director and its worldwide gross.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} -{"web_name": "IMDb", "id": "IMDb--11", "ques": "Open the advanced title search page on IMDb. How many distinct genre options does the genre filter offer?", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} -{"web_name": "IMDb", "id": "IMDb--12", "ques": "Browse the Crime genre on IMDb. Report the title and year of the highest-rated crime title in the listing.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} -{"web_name": "IMDb", "id": "IMDb--13", "ques": "Open the IMDb News page. Find a story that mentions Christopher Nolan or one of his films and report the headline and publication date.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} -{"web_name": "IMDb", "id": "IMDb--14", "ques": "Compare The Dark Knight (2008) and Inception (2010) on IMDb. Which one has the higher IMDb rating, and which one had the larger worldwide gross?", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} -{"web_name": "IMDb", "id": "IMDb--15", "ques": "Sign in to IMDb as bob.c@test.com (password TestPass123!). Bob's Watchlist contains several TV series, including a few in the science-fiction / fantasy genre. Remove one of the science-fiction / fantasy shows from his Watchlist. The Watchlist holds more than one such show, so ask the user which one to remove before acting.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} -{"web_name": "IMDb", "id": "IMDb--16", "ques": "Sign in to IMDb as carol.d@test.com (password TestPass123!). Carol's Watchlist contains multiple crime films. Pick one of her crime watchlist titles and set her personal IMDb rating for it to 8 out of 10. Since more than one crime title qualifies, ask the user to choose which one before submitting the rating.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} -{"web_name": "IMDb", "id": "IMDb--17", "ques": "Sign in to IMDb as alice.j@test.com (password TestPass123!). Open the page for Interstellar (2014) and submit a written review with the headline 'Brilliant sci-fi epic' along with a 1-10 rating of 10. Confirm afterwards that the new review appears on Interstellar's user reviews page.", "web": "http://localhost:40019/", "upstream_url": "https://www.imdb.com/"} +{"web_name": "IMDb", "id": "IMDb--0", "ques": "Open the IMDb Top 250 Movies chart and identify the films ranked #1 and #3. For each film, report its title, runtime in minutes, and MPAA classification from its title information. Which of the two has the longer runtime?", "web": "http://localhost:40021/", "upstream_url": "https://www.imdb.com/", "verifier_path": "sites/imdb/verify/verify_0.py", "judge_rubric": "Confirm both movie-chart ranks; read and correctly bind each runtime and MPAA classification to its movie; identify the longer runtime. Either order of visiting the two titles is valid. Relevant navigation must belong to this run's local mirror; the exact homepage route or search wording is not an extra requirement. Equivalent wording and monetary units at the displayed precision are valid. This is a read-only task: business data must be unchanged."} +{"web_name": "IMDb", "id": "IMDb--2", "ques": "Open Domestic box office on the mirror. Identify the first-ranked movie by cumulative US & Canada gross among the titles in this catalog, and report its title and the production budget displayed on its title page.", "web": "http://localhost:40021/", "upstream_url": "https://www.imdb.com/", "verifier_path": "sites/imdb/verify/verify_2.py", "judge_rubric": "Use the catalog cumulative-domestic-gross chart, identify its first movie, and read that same movie's production budget from title details. This is not the live IMDb weekend chart. Relevant navigation must belong to this run's local mirror; the exact homepage route or search wording is not an extra requirement. Equivalent wording and monetary units at the displayed precision are valid. This is a read-only task: business data must be unchanged."} +{"web_name": "IMDb", "id": "IMDb--3", "ques": "Visit The Shawshank Redemption (1994) on IMDb. Report the production budget and the Opening weekend US & Canada gross displayed in its title details, keeping the two amounts clearly labeled.", "web": "http://localhost:40021/", "upstream_url": "https://www.imdb.com/", "verifier_path": "sites/imdb/verify/verify_3.py", "judge_rubric": "Read the correct title details and distinguish Budget from Opening weekend US & Canada. Both labeled amounts must match the displayed precision or equivalent exact amounts. Relevant navigation must belong to this run's local mirror; the exact homepage route or search wording is not an extra requirement. Equivalent wording and monetary units at the displayed precision are valid. This is a read-only task: business data must be unchanged."} +{"web_name": "IMDb", "id": "IMDb--4", "ques": "On IMDb, open The Godfather (1972). Who directed it, and what worldwide gross is displayed on its title page?", "web": "http://localhost:40021/", "upstream_url": "https://www.imdb.com/", "verifier_path": "sites/imdb/verify/verify_4.py", "judge_rubric": "Read the correct film's director credit or credits and worldwide gross. Full credits and title-detail director links are both valid. Relevant navigation must belong to this run's local mirror; the exact homepage route or search wording is not an extra requirement. Equivalent wording and monetary units at the displayed precision are valid. This is a read-only task: business data must be unchanged."} +{"web_name": "IMDb", "id": "IMDb--7", "ques": "Open Christopher Nolan's profile. Among the movies shown in the Director section of this mirror's filmography, identify the highest IMDb rating and report the corresponding movie title, release year, and rating. If movies tie for the highest rating, report all of them.", "web": "http://localhost:40021/", "upstream_url": "https://www.imdb.com/", "verifier_path": "sites/imdb/verify/verify_7.py", "judge_rubric": "Use the Director filmography on the correct person profile as the candidate set, considering only movies in this catalog. Compare their ratings and report all highest-rating ties with title, year and rating. Ratings may be obtained from any relevant on-site listing or details. Relevant navigation must belong to this run's local mirror; the exact homepage route or search wording is not an extra requirement. Equivalent wording and monetary units at the displayed precision are valid. This is a read-only task: business data must be unchanged."} +{"web_name": "IMDb", "id": "IMDb--8", "ques": "On The Dark Knight (2008), identify the first-billed cast member and the character they play. Then open that actor's profile and report the birth year displayed there.", "web": "http://localhost:40021/", "upstream_url": "https://www.imdb.com/", "verifier_path": "sites/imdb/verify/verify_8.py", "judge_rubric": "Identify the first-billed actor and character from the correct title's cast or full credits, and read that same actor's birth year on their profile. Relevant navigation must belong to this run's local mirror; the exact homepage route or search wording is not an extra requirement. Equivalent wording and monetary units at the displayed precision are valid. This is a read-only task: business data must be unchanged."} +{"web_name": "IMDb", "id": "IMDb--9", "ques": "Use Advanced title search with Type set to Movie, Genre set to Drama, a minimum IMDb rating of 8.5, and Sort by set to IMDb rating. Report three highest-rated matching titles in descending rating order. Order within a tie does not matter; if several titles tie at the third-place cutoff, any three-title set containing all higher-rated titles is acceptable.", "web": "http://localhost:40021/", "upstream_url": "https://www.imdb.com/", "verifier_path": "sites/imdb/verify/verify_9.py", "judge_rubric": "Submit the specified movie, Drama, minimum-rating and rating-order filters in Advanced title search. Report exactly three qualifying titles, retaining all titles above the third-place rating cutoff; either order or selection within the cutoff tie is valid. Results-page answers are valid. Relevant navigation must belong to this run's local mirror; the exact homepage route or search wording is not an extra requirement. Equivalent wording and monetary units at the displayed precision are valid. This is a read-only task: business data must be unchanged."} +{"web_name": "IMDb", "id": "IMDb--10", "ques": "Use Advanced title search for Movies in the Crime genre released from 1990 through 1999, with a minimum IMDb rating of 8.5, sorted by IMDb rating. For the highest-rated result, report the title, director or directors, and displayed worldwide gross. If results tie for the highest rating, report those details for every tied movie.", "web": "http://localhost:40021/", "upstream_url": "https://www.imdb.com/", "verifier_path": "sites/imdb/verify/verify_10.py", "judge_rubric": "Submit all specified Advanced title search constraints with inclusive year bounds. Read director and worldwide gross for every highest-rating tie in those results, with values bound to the correct titles. Relevant navigation must belong to this run's local mirror; the exact homepage route or search wording is not an extra requirement. Equivalent wording and monetary units at the displayed precision are valid. This is a read-only task: business data must be unchanged."} +{"web_name": "IMDb", "id": "IMDb--12", "ques": "Open the Crime genre page. Identify the highest-rated movie and the highest-rated TV series among its titles. Report each title, start year, and IMDb rating, and say which group has the higher top rating or whether they are tied. Report all titles tied for the highest rating within either group; you may use other on-site pages to check title type and details.", "web": "http://localhost:40021/", "upstream_url": "https://www.imdb.com/", "verifier_path": "sites/imdb/verify/verify_12.py", "judge_rubric": "Visit Crime genre, distinguish movie and TV-series membership, and compare the two highest-rating groups. Report all within-group ties, including title, start year and rating. On-site type checks through search or title pages are valid. Relevant navigation must belong to this run's local mirror; the exact homepage route or search wording is not an extra requirement. Equivalent wording and monetary units at the displayed precision are valid. This is a read-only task: business data must be unchanged."} +{"web_name": "IMDb", "id": "IMDb--14", "ques": "Compare The Dark Knight (2008) and Inception (2010) on IMDb. Report each film's displayed IMDb rating and worldwide gross, then identify which film has the higher rating and which has the larger worldwide gross, stating a tie if applicable.", "web": "http://localhost:40021/", "upstream_url": "https://www.imdb.com/", "verifier_path": "sites/imdb/verify/verify_14.py", "judge_rubric": "Read both named films, bind each displayed rating and worldwide amount correctly, and identify the higher rating and larger worldwide gross. Either navigation order is valid. Relevant navigation must belong to this run's local mirror; the exact homepage route or search wording is not an extra requirement. Equivalent wording and monetary units at the displayed precision are valid. This is a read-only task: business data must be unchanged."} +{"web_name": "IMDb", "id": "IMDb--15", "ques": "Sign in as bob.c@test.com (password TestPass123!). From Bob's Watchlist, consider only TV series tagged Sci-Fi or Fantasy (either genre qualifies). Remove the qualifying series with the earliest start year; break any year tie by title in alphabetical order. Remove only that series. Report its title, start year, qualifying genre or genres, and confirm that it is no longer in Bob's Watchlist.", "web": "http://localhost:40021/", "upstream_url": "https://www.imdb.com/", "verifier_path": "sites/imdb/verify/verify_15.py", "judge_rubric": "Select from Bob's initial Watchlist using the specified type, either genre, earliest-year and title tie-break rules. Remove exactly that item and no other business state; both watchlist and title-page removal controls are valid. Confirm its absence afterwards and report title, year and qualifying genres. Relevant navigation must belong to this run's local mirror; the exact homepage route or search wording is not an extra requirement. Equivalent wording and monetary units at the displayed precision are valid. "} +{"web_name": "IMDb", "id": "IMDb--16", "ques": "Sign in as carol.d@test.com (password TestPass123!). Among the Crime movies in Carol's Watchlist whose current personal rating is not 8/10 (unrated movies qualify), select the most recently released movie; break any year tie by title in alphabetical order. Set Carol's personal rating for only that movie to 8/10. Report its title and release year, and confirm the 8/10 rating on My ratings.", "web": "http://localhost:40021/", "upstream_url": "https://www.imdb.com/", "verifier_path": "sites/imdb/verify/verify_16.py", "judge_rubric": "Select from Carol's initial Crime-movie Watchlist using her initial personal ratings, latest year and title tie-break. Insert or update exactly her selected personal rating to 8; do not change other ratings, reviews, watchlist entries or global title ratings. Confirm it on My ratings and report title and year. Relevant navigation must belong to this run's local mirror; the exact homepage route or search wording is not an extra requirement. Equivalent wording and monetary units at the displayed precision are valid. "} +{"web_name": "IMDb", "id": "IMDb--17", "ques": "Sign in to IMDb as alice.j@test.com (password TestPass123!). Open the page for Interstellar (2014) and submit a written review with the headline 'Brilliant sci-fi epic' along with a 1-10 rating of 10. Confirm afterwards that the new review appears on Interstellar's user reviews page.", "web": "http://localhost:40021/", "upstream_url": "https://www.imdb.com/", "verifier_path": "sites/imdb/verify/verify_17.py", "judge_rubric": "Create exactly one new review by the specified synthetic account for the specified movie with the requested exact headline, review rating 10 and any nonempty review body. Verify it appears on that movie's reviews page. Any review-list sort is valid; a separate personal-rating write is not required. Other business state must remain unchanged. Relevant navigation must belong to this run's local mirror; the exact homepage route or search wording is not an extra requirement. Equivalent wording and monetary units at the displayed precision are valid. "} diff --git a/sites/imdb/templates/account.html b/sites/imdb/templates/account.html index 469f0a56..d0e12130 100644 --- a/sites/imdb/templates/account.html +++ b/sites/imdb/templates/account.html @@ -8,5 +8,8 @@

Your account

  • Your ratings — {{ rating_count }} rating{{ 's' if rating_count != 1 }}
  • Reviews you have written: {{ review_count }}
  • -

    Sign out

    +
    + + +
    {% endblock %} diff --git a/sites/imdb/templates/advanced_search.html b/sites/imdb/templates/advanced_search.html index 4bf2d736..a07c5e1e 100644 --- a/sites/imdb/templates/advanced_search.html +++ b/sites/imdb/templates/advanced_search.html @@ -50,7 +50,7 @@

    {{ results|length }} result{{ 's' if results|length != 1 }}

    ({{ t.year }}) · {{ '%.1f'|format(t.rating_avg) }} · {{ t.num_votes|compact_votes }} votes · - {{ t.runtime_min }}m · + {% if t.runtime_min %}{{ t.runtime_min }}m ·{% endif %} {% for g in t.genres %}{{ g.name }}{{ ', ' if not loop.last }}{% endfor %}

    {{ t.plot_short }}

    diff --git a/sites/imdb/templates/base.html b/sites/imdb/templates/base.html index 2f4fff7e..bdb0a93a 100644 --- a/sites/imdb/templates/base.html +++ b/sites/imdb/templates/base.html @@ -6,22 +6,22 @@ - +
    + + + +

    Top cast

    {% if cast %}
      @@ -85,7 +97,7 @@

      Top cast

      {% endif %}
    -
    +

    Box office & details

    - ', 1)[0] + self.assertLess(favorites.index('Second release'), favorites.index('Synthetic title')) + def assert_unchanged(self, before): after = self.snapshot() self.assertEqual([name for name in before if before[name] != after[name]], []) diff --git a/sites/imdb/tests/test_homepage_seed.py b/sites/imdb/tests/test_homepage_seed.py new file mode 100644 index 00000000..0353e065 --- /dev/null +++ b/sites/imdb/tests/test_homepage_seed.py @@ -0,0 +1,226 @@ +"""Build-time snapshot import: catalog preservation and byte-stable re-import.""" +import importlib.util +import json +from pathlib import Path +import plistlib +import sqlite3 +import tempfile +import unittest +from copy import deepcopy + +spec = importlib.util.spec_from_file_location( + 'imdb_homepage_seed', Path(__file__).resolve().parents[1] / 'seed_homepage.py') +seed = importlib.util.module_from_spec(spec) +spec.loader.exec_module(seed) + +feature_spec = importlib.util.spec_from_file_location( + 'imdb_feature_seed', Path(__file__).resolve().parents[1] / 'seed_feature.py') +feature_seed = importlib.util.module_from_spec(feature_spec) +feature_spec.loader.exec_module(feature_seed) + + +class HomepageSeedTests(unittest.TestCase): + def test_feature_snapshot_import_is_sourced_local_and_idempotent(self): + with tempfile.TemporaryDirectory() as temp: + root = Path(temp) + database = root / 'imdb.db' + static = root / 'static' + poster = static / 'images/home/source.jpg' + poster.parent.mkdir(parents=True) + poster.write_bytes(b'source-image') + snapshot = root / 'feature.json' + snapshot.write_text(json.dumps({ + 'feature_id': 'featured-today-1', + 'source_url': 'https://www.imdb.com/most-anticipated/this-month/', + 'observed_at': '2026-09-12T01:02:03Z', + 'page_title': 'Source feature', + 'page_subtitle': 'Source description', + 'hero_image_path': 'images/home/source.jpg', + 'hero_image_sha256': feature_seed.digest(b'source-image'), + 'items': [{ + 'position': 1, + 'source_id': 'tt1234567', + 'title': 'Source title', + 'source_url': 'https://www.imdb.com/title/tt1234567/', + 'poster_path': 'images/home/source.jpg', + 'poster_sha256': feature_seed.digest(b'source-image'), + 'release_context': 'In theaters September 12', + 'description': 'Observed description.', + 'featuring': ['Source Person'], + }], + })) + with sqlite3.connect(database) as con: + con.execute('CREATE TABLE titles (id INTEGER PRIMARY KEY, name TEXT)') + con.execute("INSERT INTO titles VALUES (1, 'Preserved')") + con.execute('''CREATE TABLE home_features ( + id VARCHAR(80) PRIMARY KEY, kind VARCHAR(30) NOT NULL, + position INTEGER NOT NULL, heading TEXT NOT NULL, subtitle TEXT, + image_path TEXT, poster_path TEXT, source_url TEXT NOT NULL, + captured_at VARCHAR(40) NOT NULL, payload JSON NOT NULL)''') + con.execute('''INSERT INTO home_features VALUES + ('featured-today-1','editorial',1,'Old heading','Old subtitle','','', + 'https://www.imdb.com/','2026-09-10','{"type":"list"}')''') + result = feature_seed.import_snapshot(snapshot, database, static) + self.assertEqual(result['items'], 1) + self.assertEqual(result['protected_tables_unchanged'], ['titles']) + with sqlite3.connect(database) as con: + self.assertEqual(con.execute('SELECT * FROM titles').fetchall(), [(1, 'Preserved')]) + payload = json.loads(con.execute( + "SELECT payload FROM home_features WHERE id='featured-today-1'").fetchone()[0]) + self.assertEqual(payload['items'][0]['title'], 'Source title') + self.assertNotIn('poster_source_url', payload['items'][0]) + before = database.read_bytes() + feature_seed.import_snapshot(snapshot, database, static) + self.assertEqual(database.read_bytes(), before) + + def test_feature_snapshot_rejects_external_or_missing_media(self): + base = { + 'feature_id': 'featured-today-1', + 'source_url': 'https://www.imdb.com/most-anticipated/this-month/', + 'observed_at': '2026-09-12T01:02:03Z', + 'page_title': 'Source feature', + 'page_subtitle': 'Source description', + 'hero_image_path': 'images/home/missing.jpg', + 'hero_image_sha256': '0' * 64, + 'items': [], + } + with tempfile.TemporaryDirectory() as temp: + root = Path(temp) + database = root / 'imdb.db' + with sqlite3.connect(database) as con: + con.execute('''CREATE TABLE home_features ( + id VARCHAR(80) PRIMARY KEY, kind VARCHAR(30) NOT NULL, + position INTEGER NOT NULL, heading TEXT NOT NULL, subtitle TEXT, + image_path TEXT, poster_path TEXT, source_url TEXT NOT NULL, + captured_at VARCHAR(40) NOT NULL, payload JSON NOT NULL)''') + con.execute('''INSERT INTO home_features VALUES + ('featured-today-1','editorial',1,'Old','','','', + 'https://www.imdb.com/','2026-09-10','{}')''') + snapshot = root / 'feature.json' + snapshot.write_text(json.dumps(base)) + with self.assertRaisesRegex(ValueError, 'media'): + feature_seed.import_snapshot(snapshot, database, root / 'static') + invalid = dict(base, source_url='https://example.com/not-imdb') + snapshot.write_text(json.dumps(invalid)) + with self.assertRaisesRegex(ValueError, 'IMDb'): + feature_seed.import_snapshot(snapshot, database, root / 'static') + + def test_starmeter_keeps_observed_rank_and_optional_fields(self): + props = {'pageData': {'chartNames': {'edges': [ + {'currentRank': 7, 'node': {'id': 'nm123', 'nameText': {'text': 'Source Person'}, + 'primaryImage': {'url': 'https://m.media-amazon.com/a.jpg'}, + 'professions': [{'profession': {'text': 'Actor'}}], + 'knownForV2': {'credits': [{'title': {'id': 'tt123', + 'titleText': {'text': 'Source Film'}}}]}}}, + {'currentRank': 2, 'node': {'id': 'nm456', 'nameText': {'text': 'Another Person'}}}, + ]}}} + entries = seed.starmeter_entries(props) + self.assertEqual([entry['rank'] for entry in entries], [7, 2]) + self.assertEqual(entries[0]['professions'], ['Actor']) + self.assertEqual(entries[0]['known_for'], ['Source Film']) + self.assertEqual(entries[1]['image'], '') + self.assertEqual(entries[1]['professions'], []) + self.assertNotIn('rank_change', entries[1], 'Do not fabricate chart movements') + invalid = deepcopy(props) + invalid['pageData']['chartNames']['edges'][1]['currentRank'] = 7 + with self.assertRaisesRegex(ValueError, 'rank'): + seed.starmeter_entries(invalid) + invalid = deepcopy(props) + del invalid['pageData']['chartNames']['edges'][0]['currentRank'] + with self.assertRaises(ValueError): + seed.starmeter_entries(invalid) + + def test_chart_only_archive_preserves_homepage_and_is_idempotent(self): + props = {'requestContext': {'timestamp': '2026-09-10T15:18:46Z'}, + 'pageData': {'chartNames': {'edges': [ + {'currentRank': 3, 'node': {'id': 'nm123', + 'nameText': {'text': 'Source Person'}}}]}}} + html = '' + with tempfile.TemporaryDirectory() as temp: + root = Path(temp) + archive = root / 'source.webarchive' + archive.write_bytes(plistlib.dumps({'WebMainResource': { + 'WebResourceURL': 'https://www.imdb.com/chart/starmeter/', + 'WebResourceData': html.encode()}})) + database = root / 'imdb.db' + with sqlite3.connect(database) as con: + con.execute('CREATE TABLE titles (id INTEGER PRIMARY KEY, name TEXT)') + con.execute("INSERT INTO titles VALUES (1, 'Preserved')") + result = seed.import_archive(archive, database, root / 'static') + self.assertEqual(result['features'], 1) + with sqlite3.connect(database) as con: + self.assertEqual(con.execute('SELECT kind,position FROM home_features').fetchall(), [('starmeter', 3)]) + con.execute("INSERT INTO home_features VALUES ('topic-1','topic',1,'Preserved','','','','https://www.imdb.com/','2026-09-10','{}')") + before = database.read_bytes() + seed.import_archive(archive, database, root / 'static') + self.assertEqual(database.read_bytes(), before) + + def test_import_preserves_catalog_and_second_import_preserves_bytes(self): + props = { + 'requestContext': {'timestamp': '2026-09-10T13:37:06Z'}, + 'cmsContext': {'transformedPlacements': { + 'pill-1': {'transformedArguments': { + 'displayTitle': 'Source topic', 'linkTargetUrl': '/source-topic/'}}}}, + 'pageQueryData': {'data': {'news': {'edges': []}}}, + } + html = '' + with tempfile.TemporaryDirectory() as temp: + root = Path(temp) + archive = root / 'source.webarchive' + archive.write_bytes(plistlib.dumps({'WebMainResource': { + 'WebResourceURL': 'https://www.imdb.com/', + 'WebResourceData': html.encode()}})) + database = root / 'imdb.db' + with sqlite3.connect(database) as con: + con.execute('CREATE TABLE titles (id INTEGER PRIMARY KEY, name TEXT)') + con.execute('INSERT INTO titles VALUES (1, ?)', ('Original title',)) + result = seed.import_archive(archive, database, root / 'static') + self.assertEqual(result['features'], 1) + before = database.read_bytes() + seed.import_archive(archive, database, root / 'static') + self.assertEqual(database.read_bytes(), before) + with sqlite3.connect(database) as con: + self.assertEqual(con.execute('SELECT * FROM titles').fetchall(), [(1, 'Original title')]) + self.assertEqual(con.execute('SELECT heading FROM home_features').fetchall(), [('Source topic',)]) + con.execute("INSERT INTO home_features VALUES ('birthday-nm1', 'birthday', 1, 'Person', '', '', '', 'https://www.imdb.com/name/nm1/', '2026-09-10', '{}')") + before = database.read_bytes() + seed.import_archive(archive, database, root / 'static') + self.assertEqual(database.read_bytes(), before, 'An unloaded archive must preserve prior loaded collections') + + def test_episode_labels_are_taken_from_the_source(self): + page = seed.SourcePage('') + self.assertEqual(page.episodes, [{'number': 3, 'rating': '7.9', 'title': 'Do You Reject Satan?'}]) + + def test_episode_details_keep_their_own_media_plot_and_identity(self): + page = seed.SourcePage('''
    + +
    • S2.E3
    • Thu, Sep 3, 2026
    +

    Third & Final

    +

    Actual source plot.

    ''') + self.assertEqual(page.episode_details, [{'image': 'https://m.media-amazon.com/still.jpg', + 'info': 'S2.E3 Thu, Sep 3, 2026 ', 'title': 'Third & Final ', + 'plot': 'Actual source plot. ', 'source_path': '/title/tt123/'}]) + + def test_loaded_cards_keep_optional_source_fields_optional(self): + page = seed.SourcePage(''' +
    +
    + Example & Co + 7.4
    +
    + Future show + New: Season 1 +
    Wed, Sep 16
    + ''') + self.assertEqual(page.service, 'PRIME VIDEO') + self.assertEqual([c['kind'] for c in page.cards], ['streaming', 'tv_schedule', 'birthday']) + self.assertEqual(page.cards[0]['heading'], 'Example & Co') + self.assertEqual(page.cards[0]['source_path'], '/title/tt123/') + self.assertEqual(page.cards[1]['episode_path'], '/title/tt789/') + self.assertEqual(page.cards[1]['rating'], '') + self.assertEqual(page.cards[2]['age'], '') + + +if __name__ == '__main__': + unittest.main() From fba88dd6385ee4029cd49851a86f642da6b3d774 Mon Sep 17 00:00:00 2001 From: JackJin <1037461232@qq.com> Date: Sat, 12 Sep 2026 23:48:23 +0800 Subject: [PATCH 17/17] docs(imdb): finalize review report for maintainer handoff Refresh review-reports/PR-33-IMDB.md to the fixed candidate (code 1c8a1eb, HF PR #57 revision f9ddfd25): drop the superseded HF pin and Owner-pending text, record the formal 20-task blind review and reconciliation, the fixed-candidate engineering and guided impact regression, Owner visual acceptance, known limitations and the maintainer handoff order. Add public summaries and current-candidate screenshots under review-reports/assets/pr33-imdb/ and mark the historical probe summaries as superseded. Docs-only: no application, task, verifier, seed or asset bytes change. --- review-reports/PR-33-IMDB.md | 559 ++++++++++-------- .../candidate-regression-1c8a1eb-summary.json | 333 +++++++++++ review-reports/assets/pr33-imdb/evidence.json | 36 ++ .../formal-blind-review-1c8a1eb-summary.json | 197 ++++++ .../pr33-imdb/independent-review-summary.json | 1 + .../reconciliation-1c8a1eb-summary.json | 213 +++++++ .../assets/pr33-imdb/round4-feature-1440.jpg | Bin 0 -> 134450 bytes .../pr33-imdb/round4-feature-detail-1440.jpg | Bin 0 -> 73333 bytes .../assets/pr33-imdb/round4-home-1440.jpg | Bin 0 -> 139162 bytes .../assets/pr33-imdb/round4-home-390.jpg | Bin 0 -> 85052 bytes ...-expansion-independent-review-summary.json | 1 + .../pr33-imdb/task-expansion-summary.json | 12 +- 12 files changed, 1109 insertions(+), 243 deletions(-) create mode 100644 review-reports/assets/pr33-imdb/candidate-regression-1c8a1eb-summary.json create mode 100644 review-reports/assets/pr33-imdb/formal-blind-review-1c8a1eb-summary.json create mode 100644 review-reports/assets/pr33-imdb/reconciliation-1c8a1eb-summary.json create mode 100644 review-reports/assets/pr33-imdb/round4-feature-1440.jpg create mode 100644 review-reports/assets/pr33-imdb/round4-feature-detail-1440.jpg create mode 100644 review-reports/assets/pr33-imdb/round4-home-1440.jpg create mode 100644 review-reports/assets/pr33-imdb/round4-home-390.jpg diff --git a/review-reports/PR-33-IMDB.md b/review-reports/PR-33-IMDB.md index 943d38d8..9235a939 100644 --- a/review-reports/PR-33-IMDB.md +++ b/review-reports/PR-33-IMDB.md @@ -1,263 +1,313 @@ # IMDb reviewer validation -Status: **work in progress; not ready for merge**. Twenty distinct task candidates remain after quality review. All twenty have complete sealed UI runs, deterministic PASS and independent frozen-run PASS evidence. Owner visual acceptance remains pending, so the formal review gates stay sequential and this PR remains Draft. A local unit test, deterministic verdict, blind run-completion verdict or asset hash check does not imply visual acceptance. +Status: **ready for maintainer review; nothing is merged.** The reviewed candidate is +the fixed pair below. Twenty accepted tasks each have a complete sealed UI run, +deterministic PASS, and an independent frozen-run PASS from a formal 20-task blind +review of this candidate; the Owner accepted the expanded visual result on 2026-09-12 +after comparing it with live IMDb. This report revision is a docs-only commit on top +of the implementation fixed point; only files under `review-reports/` change. This review preserves [@hqhq1025's original IMDb contribution, PR #33](https://github.com/aiming-lab/WebHarbor/pull/33) -and its commit history. The reviewer branch integrates main at `36004932bdf82afbe36dc14e00f66841eccf9946`, including -OSU, Rotten Tomatoes, Compass and Walmart Careers, and appends IMDb at **40024** -(25 registered sites). +and its commit history. The reviewer branch integrates `main` at +`36004932bdf82afbe36dc14e00f66841eccf9946`, including OSU, Rotten Tomatoes, Compass and +Walmart Careers, and appends IMDb at **40024** (25 registered sites). -## Asset and source corrections - -The [reviewer asset PR #57](https://huggingface.co/datasets/ChilleD/WebHarbor/discussions/57) -adds only `imdb.tar.gz` relative to the current asset main. It remains open and -unmerged. The code pin uses its remotely verified union commit -`c2791ad0bd9a55c74046c6407566301b17348f50`: all 28 files from asset main -`18e64e4d230794f990199f3327432d26db36866f` are byte-identical, and the -reviewed IMDb archive is preserved as the sole additional file. +## Fixed candidate -| Artifact | SHA256 | +| Item | Value | |---|---| -| IMDb archive (27,385,423 bytes) | `5199d6d2601d070e09b235a149855435f8bb121c768ee5ab36fd6118bf830b74` | -| Corrected IMDb seed | `69f849b9c61fb71349958fdbedc301162881e3a171eb65098c2e5f6623b82471` | - -An independently downloaded copy at that commit matches the local archive, -including every member hash. Relative to the original IMDb archive, only -`instance_seed/imdb.db` changes; every original image and cache file is retained. - -The original loader accepted unrelated profile payloads under a requested -person ID. It now checks the canonical IMDb identity. The asset migration -uses exact official `nconst` records to correct 642 corroborated profile -collisions and canonicalize 47 uncertain alias/profile records, plus two -independently supported birth years. It also normalizes 390 complete release -dates without inventing missing dates. Memento and Schindler’s List now use -their canonical title years, while preserving their later regional release dates. -Credits, identifiers, synthetic users, -reviews, ratings and watchlists are preserved. - -For 689 affected profiles, unsupported biography, birthplace and portrait -links are cleared; replacement text or portraits have not been generated. -This is a source-coverage limitation. It does not mean that every retained -image file was individually proven wrong. See the +| Implementation fixed point (code) | `1c8a1eba19c084e202ecbab5977280701b9068c2` | +| Base | `36004932bdf82afbe36dc14e00f66841eccf9946` (`main`) | +| HF asset PR | [ChilleD/WebHarbor #57](https://huggingface.co/datasets/ChilleD/WebHarbor/discussions/57), open, no conflicting files reported | +| Pinned HF revision (`.assets-revision`) | `f9ddfd2596229f2610418d57fc88c3051e1056bb` (`refs/pr/57`) | +| `imdb.tar.gz` | 39,111,545 bytes, SHA256 `0663d30fe90ed2a0659dfe78ecf7ab1718970f565a64c6855a2c6aaadc606513` | +| Seed `instance_seed/imdb.db` | SHA256 `9d843c5388ecbc0d5265ac316cdaee915f8b203121b5a5330d207af5fb6206b0` | +| `sites/imdb/tasks.jsonl` | SHA256 `36214b6cf168c726d60e1ea0662ddfbfce6fa5dc77c804812460d1c38da545d8`, 20 rows | +| Local immutable check image | `sha256:edf9bbbd019813665fc169e39174db70c11969dcf182260f04d8f81636802dad` | + +HF PR #57 lineage: `4d5709e` (first reviewer seed) → `e70f49d` (title-year +corrections) → `c2791ad` (union with asset main `18e64e4d`) → `f9ddfd25` (homepage and +editorial media plus the updated seed). Only `imdb.tar.gz` changes at `f9ddfd25` +relative to `c2791ad`; every other dataset path is byte-identical. The archive was +independently re-downloaded through the official HF client and matched the local +candidate on archive, seed and all 4,536 members (247 members added, none removed, +all pre-existing image/cache hashes unchanged). Asset main has since advanced to +`ad6f424f` with two unrelated archives (`fedex.tar.gz`, `webmd_doctor.tar.gz`); PR #57 +still adds only `imdb.tar.gz` and reports no conflicts. + +## Asset and source corrections + +The original loader accepted unrelated profile payloads under a requested person ID. +It now checks the canonical IMDb identity. The asset migration uses exact official +`nconst` records to correct 642 corroborated profile collisions and canonicalize 47 +uncertain alias/profile records, plus two independently supported birth years. It also +normalizes 390 complete release dates without inventing missing dates. Memento and +Schindler's List use their canonical title years while preserving their later regional +release dates. Credits, identifiers, synthetic users, reviews, ratings and watchlists +are preserved. + +For 689 affected profiles, unsupported biography, birthplace and portrait links are +cleared; replacement text or portraits have not been generated. This is a +source-coverage limitation and does not mean that every retained image file was +individually proven wrong. See the [source provenance and reproducible migration](../sites/imdb/docs/seed-provenance.md). The original [asset PR #23](https://huggingface.co/datasets/ChilleD/WebHarbor/discussions/23) -is linked to this candidate; maintainers should coordinate the two so that -the old seed is not reintroduced. +is linked to this candidate; maintainers should coordinate the two so that the old seed +is not reintroduced. + +IMDb's live ratings, box-office totals and front-page content change. This mirror +contains a fixed catalog; current source observations and historical values are +distinguished. The local **Domestic box office** page explicitly ranks catalog titles by +cumulative US & Canada gross and is not represented as IMDb's dated weekend chart. Test +users, watchlists, personal ratings and user reviews are synthetic benchmark state. + +## Homepage and editorial expansion + +The homepage now separates sourced editorial content from the benchmark catalog. A +separate `home_features` table holds 219 source rows captured from the logged-out IMDb +homepage on 2026-09-10 after lazy-loaded sections appeared: nine trailer artwork +previews, eight editorial previews, four topic links, one episode spotlight with eight +episode scores, five news previews, 25 streaming titles, 37 TV-schedule cards, 30 +birthdays and the captured top-100 STARmeter. The +[What to Watch in September](../sites/imdb/docs/most-anticipated-2026-09-12.json) +editorial route was observed separately on 2026-09-12 (17 entries) and has a local +detail route per entry. All media is served locally; the importers validate official +source URLs and local file hashes and are build-time tools, not boot or reset hooks. +Sources, capture times and hashes are recorded in +[`homepage-sources.json`](../sites/imdb/docs/homepage-sources.json), +[`starmeter-sources.json`](../sites/imdb/docs/starmeter-sources.json) and the +[homepage snapshot notes](../sites/imdb/docs/homepage-snapshot.md), which also list +the remaining fidelity gaps (no trailer video files, editorial destinations show the +sourced preview only, no episode pages, no live showtimes/ticketing/playback, offline +information pages for app/commercial/social destinations). + +Browser checks on the fixed candidate (Chromium, 1440×900 and 390×844): homepage and +`/feature/featured-today-1` returned HTTP 200 with no horizontal overflow; the feature +page rendered all 17 entries with locally bundled images; all 17 detail routes returned +200 with no overflow. Anonymous headless Chromium receives IMDb's 403, so the source +comparison relies on the Owner's browser session and the frozen source fields rather +than a new automated source capture. + +| View | Candidate (2026-09-12) | +|---|---| +| Home, 1440 wide, top of page | ![Candidate home](assets/pr33-imdb/round4-home-1440.jpg) | +| Feature route, 1440 wide, top of page | ![Candidate feature](assets/pr33-imdb/round4-feature-1440.jpg) | +| Feature detail, 1440×900 | ![Candidate feature detail](assets/pr33-imdb/round4-feature-detail-1440.jpg) | +| Home, 390 wide, top of page | ![Candidate home 390](assets/pr33-imdb/round4-home-390.jpg) | -IMDb's live ratings, box-office totals and front-page content can change. -This mirror contains a fixed catalog; current source observations and -historical values must be distinguished. The local **Domestic box office** -page explicitly ranks catalog titles by cumulative US & Canada gross. It is -not represented as IMDb's dated weekend chart. Test users, watchlists, -personal ratings and user reviews are synthetic benchmark state. +The earlier 2026-09-08 source/before/candidate comparison is retained below for the +pre-expansion state. [Capture purposes and hashes](assets/pr33-imdb/evidence.json) +identify every included image. ## Task and scoring scope -The candidate retains original IDs `0, 2, 7, 9, 10, 12, 14, 15, 16, 17` -and retires `1, 3, 4, 5, 6, 8, 11, 13`. Earlier retirements cover duplicate/shallow -lookups with answers exposed on cards, a count of static filter options, and -helpfulness selection where the seed has only one review. The final quality pass -also removes tasks 3 and 4 because the first matching title detail exposes every -requested value, and task 8 because its actor/character/birth-year combination -has a stable common-knowledge shortcut. An extra same-page anchor click or a -required profile visit does not remove those design problems. All corresponding -site features and original frozen executions remain intact. - -To meet the owner's minimum of twenty without restoring those weak tasks, the candidate adds IDs `18–27`. Six are read-only relations or calculations: constrained pair optimization, role-bound filmography intersection, full-filmography aggregation, cross-account set subtraction, duplicate-review grouping and calendar-interval comparison. Four are stateful: multi-item Watchlist qualification, cross-account recommendation transfer, new-account queue persistence and a review-derived personal-rating reconciliation. They are different capabilities rather than name or number substitutions. No prompt contains its answer. +The candidate retains original IDs `0, 2, 7, 9, 10, 12, 14, 15, 16, 17` and retires +`1, 3, 4, 5, 6, 8, 11, 13`. Earlier retirements cover duplicate/shallow lookups with +answers exposed on cards, a count of static filter options, and helpfulness selection +where the seed has only one review. The final quality pass also removes tasks 3 and 4 +because the first matching title detail exposes every requested value, and task 8 +because its actor/character/birth-year combination has a stable common-knowledge +shortcut. All corresponding site features and original frozen executions remain intact. + +To meet the Owner's minimum of twenty without restoring those weak tasks, the candidate +adds IDs `18–27`. Six are read-only relations or calculations: constrained pair +optimization, role-bound filmography intersection, full-filmography aggregation, +cross-account set subtraction, duplicate-review grouping and calendar-interval +comparison. Four are stateful: multi-item Watchlist qualification, cross-account +recommendation transfer, new-account queue persistence and a review-derived +personal-rating reconciliation. No prompt contains its answer, and no dated +editorial-page task was added merely to reach 21. The revisions add needed detail lookups, specify movie/TV scope, define ties, -distinguish monetary fields, and replace the two requests for an external -human's choice with deterministic selection from each synthetic user's -initial watchlist. Questions, English rubrics and verifier entry points are kept in -one-to-one correspondence; expected answers are not placed in task rows. - -The verifiers derive expected entities and values from the before snapshot. -Read-only tasks compare every business table. Stateful tasks permit only -the specified row change and require local UI action and subsequent page -evidence. Alternative entry routes and equivalent displayed monetary units -are supported. Exact model prose is not required. - -The [verifier interface](../sites/imdb/verify/README.md) runs offline with the -standard library. Synthetic tests cover ambiguous ties, entity/field binding, -failed or foreign navigation, wrong account/target, no-op changes, additional -writes and legitimate alternatives. The repository's native -`eval_judge.py --verifier True` has also been exercised with a synthetic -positive and a foreign-origin negative; both produced the expected verdicts. -These fixtures are not browser trajectories. - -For the expansion, the task file and verifier routing remain one-to-one at twenty IDs. The full IMDb suite passes **289 tests** using the browser candidate's pinned Flask dependency versions. Focused expansion tests pass **115/115**, including wrong owner, partial result, extra write, arbitrary credential placeholder, incorrect grouping and field-binding negatives. Safe recorder placeholders `[SUPPLIED PASSWORD]` and `[REDACTED]` are accepted only when the snapshot password hash matches the task-supplied credential and the same-origin login/register transition succeeds. +distinguish monetary fields, and replace the two requests for an external human's +choice with deterministic selection from each synthetic user's initial watchlist. +Questions, English rubrics and verifier entry points are kept in one-to-one +correspondence; expected answers are not placed in task rows. + +The verifiers derive expected entities and values from the before snapshot. Read-only +tasks compare every business table. Stateful tasks permit only the specified row change +and require local UI action and subsequent page evidence. Alternative entry routes and +equivalent displayed monetary units are supported. Exact model prose is not required. + +The [verifier interface](../sites/imdb/verify/README.md) runs offline with the standard +library. Synthetic tests cover ambiguous ties, entity/field binding, failed or foreign +navigation, wrong account/target, no-op changes, additional writes and legitimate +alternatives. The repository's native `eval_judge.py --verifier True` has also been +exercised with a synthetic positive and a foreign-origin negative; both produced the +expected verdicts. These fixtures are not browser trajectories. Safe recorder +placeholders `[SUPPLIED PASSWORD]` and `[REDACTED]` are accepted only when the snapshot +password hash matches the task-supplied credential and the same-origin login/register +transition succeeds. ## UI and functional review -The navigation now has an accessible click/keyboard menu and usable search; -home cards use the dark palette, charts show poster/rank rows, and title details -use a dark overview with a separate facts section. Desktop and 390px layouts -were checked in a real browser. Checked pages had no broken images or page-width -overflow; these checks do not establish full source fidelity. - -The original contribution lacks trailer/Up next/editorial media, streaming and -showtime services, recent history, and a full external-service footer. The local -catalog contains 145 movies in its Top250 listing. Narrow search uses a second -row, and Roboto is not bundled. These inherited limitations and visual differences -remain explicit scope decisions; **owner visual acceptance is pending**. +The navigation uses an accessible menu drawer and usable search; home cards use the +dark palette, charts show poster/rank rows, and title details use a dark overview with a +separate facts section. Desktop and 390px layouts were checked in a real browser on +the fixed candidate with no broken images or page-width overflow. The Owner accepted +the expanded result on 2026-09-12; the fidelity gaps listed in the homepage snapshot +notes are explicit scope decisions rather than open defects. -| View | Original site | Before repair | Candidate | +| View | Original site | Before repair | Candidate (2026-09-08, pre-expansion) | |---|---|---|---| | Home, 1440×900 | ![IMDb home](assets/pr33-imdb/source-home.jpg) | ![Original mirror](assets/pr33-imdb/before-home.jpg) | ![Candidate mirror](assets/pr33-imdb/candidate-home.jpg) | | Dark Knight, 1280×720 | ![IMDb detail](assets/pr33-imdb/source-detail.jpg) | Original audit retained separately | ![Candidate detail](assets/pr33-imdb/candidate-detail.jpg) | -Source/before used IAB and candidate captures used Chrome; these are visual -comparisons, not a calibrated pixel regression baseline. Source advertising -and editorial content are dynamic. [Capture purposes and hashes](assets/pr33-imdb/evidence.json) -identify the included images. - -All state-changing forms now use Flask-WTF CSRF protection, including both -logout entry points. Same-origin watchlist return paths are constrained, -overflowing year input returns 400, malformed email registration is rejected, -and invalid review scores cannot write a review. The default CSRF token expiry -remains enabled. The application keeps its existing Flask/Jinja stack. - -A frozen guided browser audit covered registration/login, failed inputs, -watchlist add/remove, personal rating and written-review persistence. A real -form hosted on a different localhost port submitted a rating without a CSRF -token: the application returned 400 and the entire database remained unchanged. -[Rejection screenshot](assets/pr33-imdb/csrf-rejected.png). The audit exposed one -account-page GET logout link missed by handler tests; it was converted to a -protected POST form. Its focused real-browser recheck then confirmed logout through -the account body, an anonymous navigation bar, and unchanged database bytes. -[Post-fix confirmation](assets/pr33-imdb/account-logout.png). Out-of-range review -ratings were tested at the handler boundary; the browser UI only offers valid -scores, so no malformed browser selection is claimed. - -## Recorded engineering results - -For code `50bcce503637522d15bdafa533381204750f415f` and the pinned asset revision: +Source/before used IAB and candidate captures used Chrome; these are visual comparisons, +not a calibrated pixel regression baseline. Source advertising and editorial content are +dynamic. + +All state-changing forms use Flask-WTF CSRF protection, including both logout entry +points. Same-origin watchlist return paths are constrained, overflowing year input +returns 400, malformed email registration is rejected, and invalid review scores cannot +write a review. The application keeps its existing Flask/Jinja stack. + +A frozen guided browser audit covered registration/login, failed inputs, watchlist +add/remove, personal rating and written-review persistence. A real form hosted on a +different localhost port submitted a rating without a CSRF token: the application +returned 400 and the entire database remained unchanged +([rejection screenshot](assets/pr33-imdb/csrf-rejected.png)). The audit exposed one +account-page GET logout link missed by handler tests; it was converted to a protected +POST form and rechecked in a real browser +([post-fix confirmation](assets/pr33-imdb/account-logout.png)). Out-of-range review +ratings were tested at the handler boundary; the browser UI only offers valid scores. +The later homepage expansion did not change these handlers; every accepted task path was +replayed on the fixed candidate (see below). + +## Engineering results on the fixed candidate + +Checks inside the immutable image built from code `1c8a1eb` and HF `f9ddfd25`: | Check | Observed result | |---|---| -| Full environment HTTP sweep | 22/22 HTTP 200 before and after reset-all | -| Control plane | All 22 registered sites alive | -| IMDb dirty database reset | Synthetic canary removed; runtime bytes equal the pinned seed SHA256 above | -| reset-all | All 22 ready, 3.241 seconds | -| IMDb engineering suite | 146 tests passed in 13.018 seconds | - -Local disk exhaustion interrupted unpacking after the full repository Dockerfile -had exported its image. After reclaiming only this review’s temporary build -context, that exact image started successfully and passed the 22-site checks. -The final local build reused this exact full image and copied only seven changed -IMDb files (two-year migration/manifest/tests/docs, corrected seed, and account -logout template/test). It completed with exit 0; no site directories were mounted -from the host. The regular source build below remains the reproduction path. - -[Recorded mechanical output](assets/pr33-imdb/mechanical-results.json) and -[engineering test output](assets/pr33-imdb/engineering-tests.txt) are included -for independent inspection. These checks precede the offline parser-only fix. - -The browser runtime image is -`sha256:74aec29b73596a5a11ba43a4a1d0b22b82a473b4d36fcb232c2235d83d4258e9`. -The final ten-task contract and scorer are commit -`a37df75a873842be0ed4510baab5dbff361ac9ad`. -Its complete local image is -`sha256:a7ee01b145cc1bd90511114d260211a176eb5ab41002095d9ed69fb1fa0dc7f0`. -Relative to the recorded browser image, only offline grading/tests/docs and the -retired task subset change. Its isolated, network-disabled full IMDb suite passed -**174 tests in 16.020 seconds**. -[Final test output](assets/pr33-imdb/engineering-tests-final.txt) and -[scorer identities, results and applicable/retired cases](assets/pr33-imdb/scoring-results.json) -are included. Application, asset, port and control-plane bytes are unchanged; -the recorded 22-site mechanics remain applicable. The ten retained task/rubric -rows are byte-identical to their executed definitions. +| Full environment HTTP sweep | 25/25 HTTP 200 before and after the task regression | +| Control plane | 25/25 registered sites ready | +| IMDb dirty database reset | Runtime bytes equal the pinned seed SHA256 above | +| reset-all | All sites ready, 5.35 seconds | +| IMDb unit tests | 307 passed in 21.763 seconds | +| Guided replay of all 20 task paths from the homepage | 20/20 UI complete, 20/20 deterministic verifier PASS, 311 recorded steps, 13/13 read-only tasks left the database byte-identical, 7/7 write tasks produced the expected delta, 20/20 official resets restored the seed | + +The image carries matching code and asset-revision labels and has no host mounts. It +was assembled from the already verified shared dependency image plus the exact fixed +code and the downloaded HF archive because the host did not have the headroom used for +an unknown-peak full rebuild; it is not represented as a fresh standard-Dockerfile +build. The [reproduction](#reproduction) path below is the standard source build. The +guided replay is implementation-informed change-impact regression; it is not new +independent exploration, does not replace the sealed canonical runs and is not a blind +review. Per-task results are in +[`candidate-regression-1c8a1eb-summary.json`](assets/pr33-imdb/candidate-regression-1c8a1eb-summary.json). + +Historical results for code `50bcce5` (22-site integration at that time) are retained: +22/22 HTTP 200, byte-identical IMDb reset, reset-all 3.241 s, 146 and later 174 +engineering tests +([mechanical output](assets/pr33-imdb/mechanical-results.json), +[engineering tests](assets/pr33-imdb/engineering-tests.txt), +[final ten-task scorer tests](assets/pr33-imdb/engineering-tests-final.txt), +[scorer identities and results](assets/pr33-imdb/scoring-results.json)). ## Frozen task executions and scoring -The ten added candidates each have one complete canonical run and deterministic PASS, totaling **219 recorded steps** with no action or capture failure in the selected runs. Task 18 also preserves a complete one-step environment failure stopped at an incorrect viewport. Task 21 preserves an incomplete earlier attempt with no final answer or after snapshot; neither attempt is counted as a task or a passing run. Original run files were not rewritten when scoring-format false negatives were fixed. - -The added set covers six read-only tasks (18–23) and four exact state transitions (24–27). Every read-only run leaves all business tables unchanged. The stateful runs constrain destination owner, permitted rows, preserved pre-existing state and required confirmation. Deterministic 10/10 is engineering evidence only; a separate frozen-run review also returned 10/10 PASS. -[Public expansion counts and limits](assets/pr33-imdb/task-expansion-summary.json) are recorded without private run contents. - -The final native deterministic regrade passes **10/10 retained main runs** and -**3/3 separately recorded guided alternatives**: a different legal cutoff tie -(task 9), Watchlist row removal (15), and Most recent review confirmation (17). -All **30 applicable constructed cases (8 positive, 22 negative)**, seven historical -controls and one extra unit calibration case match their prior expectations. -The 529 original main/guided files are hash-preserved. Twelve retired input records -remain linked to historical results and are excluded from current totals. - -Thirteen main executions were recorded before final quality review; **ten are -retained for the candidate**. Each has actual actions, screenshots, a final answer -and before/after snapshots. The selected ten contain 98 recorded steps and 80 -successful substantive actions. The runner was isolated from source, hidden -answer keys and scoring outputs, but retained its own preceding UI context, -including retired tasks. These are not ten fresh-context trials or an estimate -of model success rate. -[Per-task results, paths and original final screenshot excerpts](assets/pr33-imdb/tasks/task-table.md) -include actual versions, hashes, failed attempts and context disclosures in -[structured form](assets/pr33-imdb/tasks/task-results.json). One final image does -not prove the full execution; complete original evidence was supplied for independent blind review. - -The retained task 17 pilot keeps its r1 code/input hashes and HF -`4d5709e171d7c40fc742727adfa98b04b9023039`. The other nine used r2 code `50bcce5` -and current HF `e70f49d`. A file-by-file reuse audit found that the pilot's actual -pages and facts were unchanged: the later application change was account-body -logout, which it did not visit; the only data changes were two title years outside -its observed titles. None is relabeled as an execution at the final PR head. -Retirement only removes other task rows and their dedicated scoring entry points; -the retained questions and rubrics are unchanged. - -The real runs exposed false rejections of task 17's headline reference, -task 0's rank prefixes/runtime difference, task 12's group labels, and task 16's -correctly reported previous rating. A guided row-Remove route also exposed a missed -nested button locator. The repairs distinguish those statements and controls -without relaxing task requirements. Wrong headline suffixes, ranks, comparison -differences, old/current ratings, entities and extra database writes remain -negative controls. Numeric “from 9 to 8” transitions are distinguished from the -series “From” before entity binding. For nested controls, the row title and origin -remain checked while only the actual child identifies the action. Original -failed verdicts and source run files remain unchanged. - -The historical thirteen-task matrix passed 13 main regrades and four guided -alternatives, 34 constructed cases (9 positive, 25 negative), 11 reconstructed -historical controls and one additional unit calibration case. Those exact inputs -and outputs remain separate from the final ten-task regrade. Retired-task samples -are marked inapplicable to the current contract; they are not relabeled as current -successes. Fixtures are not browser runs and these counts do not establish overall -scorer accuracy. The public test suite reproduces the retained parser/state invariants. - -Seven observed retained paths used at least five successful substantive actions; -tasks 0, 12 and 14 perform comparisons. Task 10's multiple constraints and tied -leaders, and tasks 15/16's personal initial-state selection and exact writes, -support the design judgment that precision can challenge a frontier model. -The observed routes do not prove a minimum over every legal path; empirical model -difficulty is **NOT_VERIFIED**. - -## Independent frozen-run review - -Claude Code returned **10 PASS / 0 FAIL** for the ten retained main executions -on 2026-09-08. The result identifies its model as `claude-fable-5-1`, as declared -by that reviewer session; this identity is not independently attested. The input -manifest and all 288 files, plus the received result SHA256, were independently -verified on receipt. See the [per-task summary, review method and limitations](assets/pr33-imdb/independent-review-summary.json). - -The reviewer used task/rubric, original actions and answers, DOM, screenshots -and read-only before/after databases. Ten key screenshots were viewed; the other -98 PNGs were hash-checked. It reports no access to source, deterministic verdicts, -hidden answers or earlier review conclusions. The three guided alternatives were -not part of this blind review. - -This result covers the original retained IDs `0, 2, 7, 9, 10, 12, 14, 15, 16, 17`. A separate neutral packet for IDs `18–27`, targeting code `3d9fc7205c55e7403c8cc8637675649710820b48`, was then reviewed by a session declaring `claude-opus-5`. Its 540-file manifest and received result hash were verified; it returned **10 PASS / 0 FAIL**. The reviewer replayed actions, checked same-run DOM evidence, recomputed derived quantities, and compared read-only before/after databases. For stateful runs it confirmed only the requested rows changed. See the [expansion review summary and limitations](assets/pr33-imdb/task-expansion-independent-review-summary.json). - -Task 19 is evaluated from the amounts displayed by the mirror: `$30.1M / $52.0M` rounds to **57.9%**. Calculating from hidden raw values would produce 57.8%, but does not change the unique maximum. Task 26 completed its requested registration, sign-out/sign-in and Watchlist persistence flow, but its run-start and seal-time model, prior-answer-knowledge and intervention metadata disagree. The completion verdict therefore remains PASS on direct run evidence, while the run producer's provenance is not treated as a reliable independent-exploration attestation. - -All ten labels agree with the prior deterministic results. Coordinator spot-checks -of tasks 9, 15, 16 and 17 against original DOM and full-table database differences -found no substantive disagreement. The seven read-only -runs leave identical database bytes; the three stateful runs each have only the -requested single-row change. The task 9 selector failure was recovered. For tasks -15 and 16, visible years exclude the unvisited alternatives without requiring -extra navigation absent from the task. Task 17 adds exactly one review; its -pre-existing review is not a new duplicate. - -Together, the two reviews cover all twenty candidate task executions with **20 PASS / 0 FAIL**. These are judgments of the disclosed recorded runs. The input versions and reuse basis above remain explicit; no run is relabeled as having executed at a version it did not use. Source fidelity, owner visual acceptance, scorer-code correctness, runner-model provenance and empirical model difficulty are outside the blind-review conclusions. +Each of the 20 accepted tasks has one complete canonical UI run with actual actions, +step screenshots, DOM snapshots, a final answer and before/after database snapshots, +totaling 311 recorded steps. Executions were recorded on earlier reviewed versions and +are disclosed as such; none is relabeled as an execution at the fixed point: + +| Tasks | Code | HF revision | Seed SHA256 | +|---|---|---|---| +| 17 | r1 `ebe92f0` (commit plus recorded tracked patch) | `4d5709e` | `27558f13…` | +| 0, 2, 7, 9, 10, 12, 14, 15, 16 and 18–27 | r2 `50bcce5` | `e70f49d` | `69f849b9…` | + +Reuse basis for the fixed candidate: `tasks.jsonl` and the `sites/imdb/verify` tree are +byte-identical between the expansion freeze `3d9fc72` and `1c8a1eb`; the logical +contents of all ten business tables are identical between the r2 execution seed and the +current seed (the current seed only adds the `home_features` table); the r1 seed used by +task 17 differs only on two title-year corrections for titles that task never reads; +and the code changes after the freeze add the homepage, feature/collection/news/offline +routes and a cookie-session recently-viewed list without touching search, charts, +genre, name, watchlist, rating, review, login, register or logout handlers. The guided +replay above closes the navigation-reachability risk introduced by the new base template. + +The original ten runs contain 98 recorded steps and 80 successful substantive actions; +the ten expansion runs contain 219 recorded steps with no action or capture failure in +the selected runs. Task 18 preserves a one-step environment failure at an incorrect +viewport and task 21 an incomplete earlier attempt; neither is counted. Original run +files were never rewritten when scoring-format false negatives were fixed. Runners were +isolated from source, hidden answer keys and scoring outputs but retained their own +preceding UI context; runner models are self-declared in run metadata. These are not +fresh-context trials or an estimate of model success rate. +[Per-task results, paths and final screenshot excerpts](assets/pr33-imdb/tasks/task-table.md) +and the [structured record](assets/pr33-imdb/tasks/task-results.json) cover the original +ten; [public expansion counts](assets/pr33-imdb/task-expansion-summary.json) cover the +new ten. + +Deterministic grading: the final native regrade passes 10/10 retained original main +runs and 3/3 separately recorded guided alternatives (a different legal cutoff tie for +task 9, Watchlist row removal for 15, Most-recent review confirmation for 17); all 30 +applicable constructed cases (8 positive, 22 negative), seven historical controls and +one extra unit case match their prior expectations. The expansion runs pass 10/10 with +115/115 focused tests covering wrong owner, partial result, extra write, arbitrary +credential placeholder, incorrect grouping and field-binding negatives. The full IMDb +suite passes 307/307 on the fixed candidate. Fixtures are not browser runs and these +counts do not establish overall scorer accuracy. + +The real runs exposed false rejections of task 17's headline reference, task 0's rank +prefixes/runtime difference, task 12's group labels and task 16's correctly reported +previous rating, plus a missed nested Remove button locator. The repairs distinguish +those statements and controls without relaxing task requirements; wrong headline +suffixes, ranks, comparison differences, old/current ratings, entities and extra +database writes remain negative controls. + +Seven observed original paths used at least five successful substantive actions and +tasks 0, 12 and 14 perform comparisons; the expansion tasks add set, ratio and +multi-account reasoning over 11–35 steps each. Empirical frontier-model difficulty is +**NOT_VERIFIED**. + +## Independent blind review + +A formal blind review of the fixed candidate was completed on 2026-09-12 by Claude Code +with canonical model `claude-opus-5` (attested by the CLI usage record of the session, +which was fresh, non-persistent, restricted to read-only tools and had network tools +disabled). The input was a single neutral packet of 826 files covering all 20 canonical +runs (manifest SHA256 `09875b57a8c3f9092eae5f6f00fb619715dbecf5eeefd8f698ac2c5c5dc343fa`), +containing task text, answer-free rubric, trajectories, event/DOM evidence, screenshots, +final answers and before/after databases, and excluding verifier source/results, hidden +answers, coordinator conclusions, prior reviews, repository contents and PR discussion. +The reviewer verified 826/826 file hashes and returned **20 PASS / 0 FAIL**; the +structured result was hashed before it was read. Per-task bases and the reviewer's own +list of unexecuted checks are in +[`formal-blind-review-1c8a1eb-summary.json`](assets/pr33-imdb/formal-blind-review-1c8a1eb-summary.json); +the [PR comment](https://github.com/aiming-lab/WebHarbor/pull/89#issuecomment-5646790749) +records the same result. + +The reviewer explicitly did not certify source fidelity, deterministic verifier +correctness, runner independence or live replay, and spot-checked screenshots rather +than auditing every step image. Two earlier probe reviews (10/10 on 2026-09-08 for the +original ten and 10/10 on 2026-09-10 for the expansion ten; models session-declared) are +retained as history in +[`independent-review-summary.json`](assets/pr33-imdb/independent-review-summary.json) and +[`task-expansion-independent-review-summary.json`](assets/pr33-imdb/task-expansion-independent-review-summary.json). + +## Reconciliation + +Comparing the formal blind result with the deterministic results task by task found +**zero differences and zero substantive findings**; no task, rubric, verifier, seed or +application change resulted. Common-PASS spot checks of tasks 9, 15, 16 and 17 against +the frozen DOM and independently recomputed full-table database diffs confirmed the +exact single-row changes (one Watchlist deletion, one rating update, one review insert) +and unchanged state for the read-only run. Details are in +[`reconciliation-1c8a1eb-summary.json`](assets/pr33-imdb/reconciliation-1c8a1eb-summary.json). + +Two boundary rulings are retained: + +- **Task 19** is graded from the amounts the mirror displays, as its text requires: + `$30.1M / $52.0M` rounds to **57.9%**. Computing from hidden raw values would give + 57.8%; the unique maximum is unchanged. +- **Task 26** completed its registration, queue transfer, sign-out and re-login flow + with exactly one new user and two Watchlist rows, but its run-start and seal-time + metadata disagree (model label, prior-knowledge flag, runner identity wording, + human-intervention list, resumed-session note). The completion verdict stands on + direct run evidence; the run producer's provenance is not treated as a reliable + independent-exploration attestation. ## Reproduction @@ -271,8 +321,8 @@ docker run -d --name wh-review033-candidate \ -p 127.0.0.1:49000-49024:40000-40024 webharbor:review-imdb-pr33 ``` -IMDb is then available at `http://localhost:49024/`. Run engineering tests -with the image's pinned Flask dependencies: +IMDb is then available at `http://localhost:49024/`. Run engineering tests with the +image's pinned Flask dependencies: ```bash docker exec wh-review033-candidate \ @@ -287,10 +337,39 @@ uv run --project agent_demo python agent_demo/eval_judge.py \ --out /absolute/path/to/separate-scoring-result.json ``` -## Validation still required - -- Final source/before/after visual evidence and owner-approved regression - baseline, including explicit decisions on inherited content omissions. -- Maintainer handoff after the remaining visual acceptance; this PR stays Draft. - -Neither the code PR nor the HF PR should be merged by the reviewer. +## Known limitations + +- Canonical runs were recorded on r1/r2 code and assets; their reuse for the fixed + candidate rests on the identical task/verifier tree, logically identical business + tables and the guided change-impact replay, not on re-execution at `1c8a1eb`. +- Runner models are self-declared in run metadata; task 26's provenance metadata is + inconsistent (above). +- The blind review judged frozen execution completion only. +- The immutable check image was assembled from a verified dependency image rather than + rebuilt from the standard Dockerfile; the reproduction path above is the standard build. +- Empirical frontier-model difficulty is not measured. +- 689 profiles have cleared biography/birthplace/portrait fields awaiting sourced + replacements; the homepage snapshot notes list the remaining presentation gaps. +- The pinned HF revision is the open PR revision, not a main merge commit (see below). + +## Maintainer handoff + +**Directly mergeable now: no.** The code is mergeable against `main` (GitHub reports +MERGEABLE/CLEAN), but `.assets-revision` pins the open HF PR revision `f9ddfd25` +rather than a merged asset-main commit, and the project convention is to pin the HF +merge commit. Suggested order: + +1. Review and merge [HF PR #57](https://huggingface.co/datasets/ChilleD/WebHarbor/discussions/57). + It adds only `imdb.tar.gz` (LFS SHA256 `0663d30f…`) on top of asset main and reports + no conflicts; asset main currently contains two unrelated later archives. +2. Confirm the merged asset-main commit still serves `imdb.tar.gz` with SHA256 + `0663d30fe90ed2a0659dfe78ecf7ab1718970f565a64c6855a2c6aaadc606513` and seed SHA256 + `9d843c5388ecbc0d5265ac316cdaee915f8b203121b5a5330d207af5fb6206b0`. +3. Update `.assets-revision` on this branch to that merge commit (or confirm that + pinning the immutable PR revision is acceptable). Because the bytes are identical, + only `./scripts/fetch_assets.sh` plus the hash check above need to be repeated; no + task re-execution or new blind review is implied by a pin-only change. +4. Merge this PR, which supersedes #33, and close #33 and HF #23 with references so + the old seed is not reintroduced. + +The reviewer will not merge either the code PR or the HF PR. diff --git a/review-reports/assets/pr33-imdb/candidate-regression-1c8a1eb-summary.json b/review-reports/assets/pr33-imdb/candidate-regression-1c8a1eb-summary.json new file mode 100644 index 00000000..e2fd19f2 --- /dev/null +++ b/review-reports/assets/pr33-imdb/candidate-regression-1c8a1eb-summary.json @@ -0,0 +1,333 @@ +{ + "schema": "imdb-public-candidate-regression-summary/v1", + "created_at": "2026-09-12T03:33:22.081650Z", + "candidate": { + "code_sha": "1c8a1eba19c084e202ecbab5977280701b9068c2", + "working_tree_dirty": false, + "asset_revision": "f9ddfd2596229f2610418d57fc88c3051e1056bb", + "archive_sha256": "0663d30fe90ed2a0659dfe78ecf7ab1718970f565a64c6855a2c6aaadc606513", + "seed_sha256": "9d843c5388ecbc0d5265ac316cdaee915f8b203121b5a5330d207af5fb6206b0", + "task_file_sha256": "36214b6cf168c726d60e1ea0662ddfbfce6fa5dc77c804812460d1c38da545d8", + "image_id": "sha256:edf9bbbd019813665fc169e39174db70c11969dcf182260f04d8f81636802dad", + "image_basis": "Assembled from the previously verified shared dependency image plus the exact fixed code and the remotely downloaded HF archive; matching code/HF labels; no host mounts. Not a fresh standard-Dockerfile build (host lacked the 50 GiB headroom used for unknown-peak full rebuilds)." + }, + "purpose": "Impact-specific guided UI and deterministic-verifier revalidation on the immutable GitHub/HF round-4 candidate; historical independent runs remain immutable.", + "knowledge_limit": "Guided replay of prior successful paths by an implementation-informed operator; change-impact evidence only. Not independent exploration, not canonical trajectory credit, not a blind review.", + "mechanical": { + "sites_http_200": "25/25 before and after the task regression", + "control_plane_ready": "25/25", + "imdb_reset": "runtime SHA256 equals seed SHA256 after dirty reset", + "reset_all_seconds": 5.35, + "imdb_unittest": { + "passed": 307, + "failed": 0, + "seconds": 21.763 + } + }, + "guided_impact": { + "viewport": { + "width": 1440, + "height": 900 + }, + "tasks_expected": 20, + "tasks_completed": 20, + "ui_passed": 20, + "verifiers_passed": 20, + "recorded_steps": 311, + "read_only_tasks_unchanged": 13, + "write_tasks_with_delta": 7, + "resets_restored_seed": 20, + "tasks": [ + { + "task_id": "IMDb--0", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 5, + "read_only_database_unchanged": true, + "after_db_sha256": "9d843c5388ecbc0d5265ac316cdaee915f8b203121b5a5330d207af5fb6206b0", + "reset_restored_seed": true, + "final_url_path": "/title/tt0468569" + }, + { + "task_id": "IMDb--2", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 6, + "read_only_database_unchanged": true, + "after_db_sha256": "9d843c5388ecbc0d5265ac316cdaee915f8b203121b5a5330d207af5fb6206b0", + "reset_restored_seed": true, + "final_url_path": "/title/tt4154796#title-details" + }, + { + "task_id": "IMDb--7", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 5, + "read_only_database_unchanged": true, + "after_db_sha256": "9d843c5388ecbc0d5265ac316cdaee915f8b203121b5a5330d207af5fb6206b0", + "reset_restored_seed": true, + "final_url_path": "/name/nm0634240" + }, + { + "task_id": "IMDb--9", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 9, + "read_only_database_unchanged": true, + "after_db_sha256": "9d843c5388ecbc0d5265ac316cdaee915f8b203121b5a5330d207af5fb6206b0", + "reset_restored_seed": true, + "final_url_path": "/search/title?title_type=movie&year_from=&year_to=&rating_min=8.5&genre=drama&sort=rating" + }, + { + "task_id": "IMDb--10", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 15, + "read_only_database_unchanged": true, + "after_db_sha256": "9d843c5388ecbc0d5265ac316cdaee915f8b203121b5a5330d207af5fb6206b0", + "reset_restored_seed": true, + "final_url_path": "/title/tt0110912#title-details" + }, + { + "task_id": "IMDb--12", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 11, + "read_only_database_unchanged": true, + "after_db_sha256": "9d843c5388ecbc0d5265ac316cdaee915f8b203121b5a5330d207af5fb6206b0", + "reset_restored_seed": true, + "final_url_path": "/search/title?title_type=tvSeries&year_from=&year_to=&rating_min=&genre=crime&sort=rating" + }, + { + "task_id": "IMDb--14", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 7, + "read_only_database_unchanged": true, + "after_db_sha256": "9d843c5388ecbc0d5265ac316cdaee915f8b203121b5a5330d207af5fb6206b0", + "reset_restored_seed": true, + "final_url_path": "/title/tt1375666#title-details" + }, + { + "task_id": "IMDb--15", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 14, + "read_only_database_unchanged": false, + "after_db_sha256": "9b67a45ebb28a7cc7d745c371949d6a337de3b9e739b9b238548d7d42a72773a", + "reset_restored_seed": true, + "final_url_path": "/list/watchlist" + }, + { + "task_id": "IMDb--16", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 11, + "read_only_database_unchanged": false, + "after_db_sha256": "b3004d7ffb8fb91f57a497facb29f10ad7aede480a95338716d71b9a83cf12a1", + "reset_restored_seed": true, + "final_url_path": "/list/ratings" + }, + { + "task_id": "IMDb--17", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 14, + "read_only_database_unchanged": false, + "after_db_sha256": "001d8c5007a7f5539483a5cd96ce20b9e326c528d078fba91e6c43051803adcf", + "reset_restored_seed": true, + "final_url_path": "/title/tt0816692/reviews" + }, + { + "task_id": "IMDb--18", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 13, + "read_only_database_unchanged": true, + "after_db_sha256": "9d843c5388ecbc0d5265ac316cdaee915f8b203121b5a5330d207af5fb6206b0", + "reset_restored_seed": true, + "final_url_path": "/search/title?title_type=movie&year_from=&year_to=2010&rating_min=&genre=animation&sort=rating" + }, + { + "task_id": "IMDb--19", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 11, + "read_only_database_unchanged": true, + "after_db_sha256": "9d843c5388ecbc0d5265ac316cdaee915f8b203121b5a5330d207af5fb6206b0", + "reset_restored_seed": true, + "final_url_path": "/name/nm0000158" + }, + { + "task_id": "IMDb--20", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 16, + "read_only_database_unchanged": true, + "after_db_sha256": "9d843c5388ecbc0d5265ac316cdaee915f8b203121b5a5330d207af5fb6206b0", + "reset_restored_seed": true, + "final_url_path": "/name/nm0000138" + }, + { + "task_id": "IMDb--21", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 29, + "read_only_database_unchanged": true, + "after_db_sha256": "9d843c5388ecbc0d5265ac316cdaee915f8b203121b5a5330d207af5fb6206b0", + "reset_restored_seed": true, + "final_url_path": "/title/tt0120737" + }, + { + "task_id": "IMDb--22", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 35, + "read_only_database_unchanged": true, + "after_db_sha256": "9d843c5388ecbc0d5265ac316cdaee915f8b203121b5a5330d207af5fb6206b0", + "reset_restored_seed": true, + "final_url_path": "/title/tt0816692/reviews" + }, + { + "task_id": "IMDb--23", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 15, + "read_only_database_unchanged": true, + "after_db_sha256": "9d843c5388ecbc0d5265ac316cdaee915f8b203121b5a5330d207af5fb6206b0", + "reset_restored_seed": true, + "final_url_path": "/title/tt0109830" + }, + { + "task_id": "IMDb--24", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 20, + "read_only_database_unchanged": false, + "after_db_sha256": "de4c922c62a6ba52998c462413e15b3fd3bb012a5b2ca60b9e6b88f3152cd31e", + "reset_restored_seed": true, + "final_url_path": "/list/watchlist" + }, + { + "task_id": "IMDb--25", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 23, + "read_only_database_unchanged": false, + "after_db_sha256": "b2d1d26492932204aee9b6448ab0de40fb21bc23762e0f627b9829e352ae6000", + "reset_restored_seed": true, + "final_url_path": "/list/watchlist" + }, + { + "task_id": "IMDb--26", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 30, + "read_only_database_unchanged": false, + "after_db_sha256": "f65994272415143b0f2ea7c91d1cffeefce9d8fa1e0ea03143dd825a65f5a9f1", + "reset_restored_seed": true, + "final_url_path": "/list/watchlist" + }, + { + "task_id": "IMDb--27", + "status": "PASS", + "ui_pass": true, + "verifier_pass": true, + "steps": 22, + "read_only_database_unchanged": false, + "after_db_sha256": "e4b1cab41b9673cfdf9aaf3890f6ae79036a0240c2b1d0d4b759dbd7e6324542", + "reset_restored_seed": true, + "final_url_path": "/list/ratings" + } + ] + }, + "browser": { + "created_at": "2026-09-12T03:30:11.492651Z", + "result": "PASS", + "source_basis": { + "url": "https://www.imdb.com/most-anticipated/this-month/", + "fresh_capture": false, + "reason": "Anonymous Chromium receives IMDb 403; source fields and Owner acceptance were frozen before publication." + }, + "viewports": { + "desktop-1440": { + "viewport": { + "width": 1440, + "height": 900 + }, + "homepage": { + "status": 200, + "overflow": false, + "images": 210, + "images_loaded": 115 + }, + "feature": { + "status": 200, + "items": 17, + "images": 20, + "overflow": false + }, + "detail_routes": 17, + "detail_routes_200": 17, + "detail_overflow": false + }, + "mobile-390": { + "viewport": { + "width": 390, + "height": 844 + }, + "homepage": { + "status": 200, + "overflow": false, + "images": 210, + "images_loaded": 94 + }, + "feature": { + "status": 200, + "items": 17, + "images": 20, + "overflow": false + }, + "detail_routes": 17, + "detail_routes_200": 17, + "detail_overflow": false + } + }, + "source_full_page_png_sha256": { + "desktop-1440": { + "homepage": "6a91b1fefb050e7dfd8a12cc97b10b88c73205b1d5d44cea368f5458e91b2389", + "feature": "134b6ed21eadaff2f9e335cb6e1051127c48ae71b55e0114d3e892d211296492" + }, + "mobile-390": { + "homepage": "1840334d1fcae789b7ab0feaefd0f4b78c73e05689e3531d3d3466ba7455eecd", + "feature": "936dbf30557356fd32fcc754b8c3638a8b036693afdaa2c58d01defeb21f6611" + } + }, + "public_screenshots": [ + "round4-home-1440.jpg", + "round4-feature-1440.jpg", + "round4-home-390.jpg", + "round4-feature-detail-1440.jpg" + ] + }, + "owner_visual_acceptance": "ACCEPTED_2026-09-12 (Owner compared the expanded homepage/feature result with live IMDb)" +} diff --git a/review-reports/assets/pr33-imdb/evidence.json b/review-reports/assets/pr33-imdb/evidence.json index 8d081dad..dbe3662b 100644 --- a/review-reports/assets/pr33-imdb/evidence.json +++ b/review-reports/assets/pr33-imdb/evidence.json @@ -61,5 +61,41 @@ "date": "2026-09-08", "code_sha": "50bcce503637522d15bdafa533381204750f415f", "asset_revision": "e70f49d8b6d0f32c940688e8e53e7c558f57a788" + }, + "round4-home-1440.jpg": { + "sha256": "e01ed704fac5781702dbee016db06cf3319afb2530cbac96495893780916f0e9", + "evidence_purpose": "current candidate homepage, top 1500px of the 1440x900-viewport full-page capture, downscaled to 1200px wide", + "source_url": "local IMDb mirror (immutable candidate image)", + "date": "2026-09-12", + "code_sha": "1c8a1eba19c084e202ecbab5977280701b9068c2", + "asset_revision": "f9ddfd2596229f2610418d57fc88c3051e1056bb", + "note": "Chromium capture on the fixed candidate; derived from the full-page PNG whose SHA256 is recorded in candidate-regression-1c8a1eb-summary.json. Owner accepted the expanded result after comparing with live IMDb; anonymous headless capture of the live source returned 403, so no new source screenshot is included." + }, + "round4-feature-1440.jpg": { + "sha256": "c38b3ef60c800db5cc145a3302b0db2f00fb7c112e6a489aeed1f6e0a2096251", + "evidence_purpose": "current candidate /feature/featured-today-1, top 1500px of the 1440-wide full-page capture, downscaled to 1200px wide", + "source_url": "local IMDb mirror (immutable candidate image)", + "date": "2026-09-12", + "code_sha": "1c8a1eba19c084e202ecbab5977280701b9068c2", + "asset_revision": "f9ddfd2596229f2610418d57fc88c3051e1056bb", + "note": "Chromium capture on the fixed candidate; derived from the full-page PNG whose SHA256 is recorded in candidate-regression-1c8a1eb-summary.json. Owner accepted the expanded result after comparing with live IMDb; anonymous headless capture of the live source returned 403, so no new source screenshot is included." + }, + "round4-home-390.jpg": { + "sha256": "f3cc74b1d73a13c979986664f38e6290dc1a3ecfd793d3275911569c25796823", + "evidence_purpose": "current candidate homepage at 390px width, top 1600px of the full-page capture", + "source_url": "local IMDb mirror (immutable candidate image)", + "date": "2026-09-12", + "code_sha": "1c8a1eba19c084e202ecbab5977280701b9068c2", + "asset_revision": "f9ddfd2596229f2610418d57fc88c3051e1056bb", + "note": "Chromium capture on the fixed candidate; derived from the full-page PNG whose SHA256 is recorded in candidate-regression-1c8a1eb-summary.json. Owner accepted the expanded result after comparing with live IMDb; anonymous headless capture of the live source returned 403, so no new source screenshot is included." + }, + "round4-feature-detail-1440.jpg": { + "sha256": "9b4321bb67dbafb94e6ec3f798d987f6fc7c74daf244daa5fe81b5807a879925", + "evidence_purpose": "current candidate feature detail route (first entry), top 900px at 1440 width, downscaled to 1200px wide", + "source_url": "local IMDb mirror (immutable candidate image)", + "date": "2026-09-12", + "code_sha": "1c8a1eba19c084e202ecbab5977280701b9068c2", + "asset_revision": "f9ddfd2596229f2610418d57fc88c3051e1056bb", + "note": "Chromium capture on the fixed candidate; derived from the full-page PNG whose SHA256 is recorded in candidate-regression-1c8a1eb-summary.json. Owner accepted the expanded result after comparing with live IMDb; anonymous headless capture of the live source returned 403, so no new source screenshot is included." } } diff --git a/review-reports/assets/pr33-imdb/formal-blind-review-1c8a1eb-summary.json b/review-reports/assets/pr33-imdb/formal-blind-review-1c8a1eb-summary.json new file mode 100644 index 00000000..047a10dc --- /dev/null +++ b/review-reports/assets/pr33-imdb/formal-blind-review-1c8a1eb-summary.json @@ -0,0 +1,197 @@ +{ + "schema": "imdb-public-formal-blind-review-summary/v1", + "completed_at": "2026-09-12T15:20:29Z", + "reviewer": { + "harness": "Claude Code CLI, fresh non-persistent session restricted to Read and read-only Bash; network tools disabled (web search/fetch requests: 0)", + "model": "claude-opus-5", + "model_provenance": "canonicalModel reported in the Claude CLI usage record of the same session (not only a self-declaration)", + "session_id": "89bbcff5-1861-4acc-a25a-50f4818223f6", + "num_turns": 79, + "permission_denials": 0 + }, + "target": { + "code_sha": "1c8a1eba19c084e202ecbab5977280701b9068c2", + "asset_revision": "f9ddfd2596229f2610418d57fc88c3051e1056bb", + "archive_sha256": "0663d30fe90ed2a0659dfe78ecf7ab1718970f565a64c6855a2c6aaadc606513", + "seed_sha256": "9d843c5388ecbc0d5265ac316cdaee915f8b203121b5a5330d207af5fb6206b0", + "task_file_sha256": "36214b6cf168c726d60e1ea0662ddfbfce6fa5dc77c804812460d1c38da545d8" + }, + "input": { + "manifest_sha256": "09875b57a8c3f9092eae5f6f00fb619715dbecf5eeefd8f698ac2c5c5dc343fa", + "files": 826, + "hash_mismatches": [], + "tasks": 20, + "source_packets": [ + { + "packet": "imdb-blind-review-24af75e31259", + "manifest_sha256": "60b1c9420a886fd028128dfe087cb375c587e5de2f0ea753e96fea2b0b705951", + "task_ids": [ + "IMDb--0", + "IMDb--2", + "IMDb--7", + "IMDb--9", + "IMDb--10", + "IMDb--12", + "IMDb--14", + "IMDb--15", + "IMDb--16", + "IMDb--17" + ] + }, + { + "packet": "imdb-expansion-blind-review-3d9fc7205c55", + "manifest_sha256": "f609c60f5229c0f91d75bbdea3dd2ff29ce8e82d6534cc9cfb7f0ac9183dbfdd", + "task_ids": [ + "IMDb--18", + "IMDb--19", + "IMDb--20", + "IMDb--21", + "IMDb--22", + "IMDb--23", + "IMDb--24", + "IMDb--25", + "IMDb--26", + "IMDb--27" + ] + } + ], + "excluded": [ + "deterministic verifier source and verdicts", + "hidden or expected answers", + "coordinator/Codex task verdicts and reconciliation conclusions", + "prior Claude reviews", + "repository contents and PR discussion" + ], + "review_scope": "Judge whether each frozen execution completes its supplied task. Do not certify current source fidelity, verifier correctness, or runner independence." + }, + "result": { + "packet_status": "VALID", + "pass": 20, + "fail": 0, + "structured_result_sha256": "6bbb06ae20ebb6a1441c4767e7c07ab4ba758f6a63c3ce1a21a3cdc5023c23c6", + "raw_response_sha256": "f9004bb9d63989cdb8e3c323dfb1ac813a1acf7dda0c96ab5a7ad2880c958164", + "hashed_before_verdicts_were_read": true + }, + "verdicts": [ + { + "task_id": "IMDb--0", + "verdict": "PASS", + "basis": "Chart opened from homepage; rank #1 and #3 both visited and both runtime/MPAA pairs correctly bound to their films, with the longer-runtime comparison correct. Read-only task and before.db/after.db are byte-identical." + }, + { + "task_id": "IMDb--2", + "verdict": "PASS", + "basis": "The run opened the catalog Domestic box office chart (explicitly ranked by cumulative US & Canada gross), identified its #1 title, and read that same title's Budget from its detail page. State unchanged." + }, + { + "task_id": "IMDb--7", + "verdict": "PASS", + "basis": "Correct person profile reached; the Director section (9 credits) was read as the candidate set, and ratings for every one of those credits were visible on the on-site search-results listing the run had already observed. The Dark Knight at 9.1 is the unique maximum." + }, + { + "task_id": "IMDb--9", + "verdict": "PASS", + "basis": "All four required Advanced-search controls were submitted and are visible as applied on the results page. The three reported titles retain both titles above the third-place 9.0 cutoff and pick one of the 9.0-tied titles, which the task explicitly permits." + }, + { + "task_id": "IMDb--10", + "verdict": "PASS", + "basis": "All constraints submitted with inclusive year bounds (1990 and 1999 results both present). Both 8.8-tied top results were opened and their directors and worldwide grosses read and correctly bound." + }, + { + "task_id": "IMDb--12", + "verdict": "PASS", + "basis": "Crime genre page was visited, and on-site Advanced-search type filters were used to separate the movie and TV-series groups (rubric permits this). Godfather 9.2 is the unique top Crime movie and Breaking Bad 9.5 the unique top Crime series; the 0.3 comparison is correct." + }, + { + "task_id": "IMDb--14", + "verdict": "PASS", + "basis": "Both named films were opened on the local mirror and each displayed rating and worldwide gross is correctly bound; both comparisons stated correctly with no false tie." + }, + { + "task_id": "IMDb--15", + "verdict": "PASS", + "basis": "Selection rule applied correctly against Bob's initial Watchlist: the only earlier-year entries (The Office 2005, Breaking Bad 2008) were checked and are not Sci-Fi/Fantasy, making Game of Thrones (2011, Fantasy) the earliest qualifying series. Exactly one watchlist row was deleted and absence was confirmed." + }, + { + "task_id": "IMDb--16", + "verdict": "PASS", + "basis": "Carol's initial Watchlist Crime movies were read; Fight Club (1999) is the most recently released and its initial personal rating was 9 (not 8), so it is the correct selection. Exactly one rating row was updated and confirmed on My ratings." + }, + { + "task_id": "IMDb--17", + "verdict": "PASS", + "basis": "Signed in as the specified account, posted exactly one review on Interstellar with the exact requested headline, review rating 10 and a nonempty body, then confirmed it on the movie's reviews page. No other business state changed." + }, + { + "task_id": "IMDb--18", + "verdict": "PASS", + "basis": "The complete 7-movie Animation/≤2010 candidate set was enumerated by on-site Advanced search with displayed ratings and runtimes; the run checked the three top-rated films' MPAA classifications, correctly excluded Grave of the Fireflies as Not Rated, and reported the unique optimum (16.9 sum, 186 min). No other pair can reach 16.9 given the displayed ratings, so the no-ties claim holds." + }, + { + "task_id": "IMDb--19", + "verdict": "PASS", + "basis": "Both credit lists were read from the correct profiles and the shared set is exactly the two reported films. Budget and Opening weekend US & Canada were read from each film's own detail page and both percentages round correctly to one decimal." + }, + { + "task_id": "IMDb--20", + "verdict": "PASS", + "basis": "All six movies in the mirror's DiCaprio Actor filmography are covered, each row's two displayed grosses were read from that film's own page, and every recomputed percentage matches the answer; the unique maximum is correctly identified." + }, + { + "task_id": "IMDb--21", + "verdict": "PASS", + "basis": "Each account's own ratings and Watchlist were read while signed in as that account, with no cross-account mixing; the per-account differences are exactly the four reported films, and each director and runtime is bound to the right title. No state changed." + }, + { + "task_id": "IMDb--22", + "verdict": "PASS", + "basis": "The deduplicated union of Alice's Watchlist and ratings is six movies, and the reviews page of each was inspected. Exactly one within-movie identical-headline group by different authors exists, reported with correct title/year/headline and author-bound score, date and helpful count." + }, + { + "task_id": "IMDb--23", + "verdict": "PASS", + "basis": "Every movie in the mirror's Tom Hanks Actor filmography was opened and its displayed Release date recorded; the chronological ordering and all consecutive gaps check out, and both 504-day pairs are reported." + }, + { + "task_id": "IMDb--24", + "verdict": "PASS", + "basis": "All specified filters were submitted with inclusive year bounds, David's initial Watchlist was read first, and exactly the two missing qualifying movies (runtime ≤120m) were added under his account; 121m Star Wars IV was correctly excluded. Existing entries preserved and additions confirmed on the Watchlist." + }, + { + "task_id": "IMDb--25", + "verdict": "PASS", + "basis": "Bob's ratings were read under his own login, Breaking Bad was confirmed a TV Series on its detail page and excluded, and exactly the one missing qualifying movie was added to David's Watchlist after a proper sign-out/sign-in. The already-saved recommendation is correctly identified and the destination list verified." + }, + { + "task_id": "IMDb--26", + "verdict": "PASS", + "basis": "The queue was derived correctly from Alice's initial Watchlist minus her personally rated titles, exactly one new account with the requested name and email was created, the two derived movies were saved to it, and a real sign-out followed by a successful re-login demonstrated persistence. Alice's data and all other rows are untouched." + }, + { + "task_id": "IMDb--27", + "verdict": "PASS", + "basis": "The two unrated Watchlist movies were distinguished and their reviews checked; only Interstellar has a scored review attributed to Alice (10/10), which was used as the rating source. Exactly one personal-rating row was inserted with that score, no review was created or altered, and My ratings was verified." + } + ], + "unexecuted_checks": [ + "Source fidelity was not certified: this pass did not verify that the frozen runs correspond to the current candidate code_sha 1c8a1eba19c084e202ecbab5977280701b9068c2 or asset_revision f9ddfd2596229f2610418d57fc88c3051e1056bb, nor that the mirror's catalog data matches upstream IMDb. Recorded executions carry different code_sha/asset_revision values (per execution-environment.json), and that divergence was neither investigated nor cleared.", + "Deterministic verifier correctness was not assessed: no verifier source, verdicts, expected answers, or hidden rubrics were read or executed, so these judgments are independent readings of task text plus run evidence and do not confirm or contradict any programmatic checker.", + "Runner independence was not evaluated: the claims in run-metadata.json (runner identity, 'no prior answer knowledge', guidance, human_interventions) were taken as unverified recorded metadata, and no check was made that the agent executed without answer leakage or outside assistance.", + "No repository files, Git history, PR discussion, coordinator conclusions, or prior reviews were consulted, and no network access was used; review inputs were limited to manifest.json and its 826 enumerated files.", + "Screenshot authenticity and pixel-level DOM/screenshot agreement were not exhaustively audited; screenshots were spot-checked (IMDb--17, IMDb--26) rather than reviewed for every step of every run.", + "Reproduction was not attempted: no run was re-executed against a live mirror, so timing, flakiness, and non-determinism in the frozen trajectories remain unexamined." + ], + "public_comment": "https://github.com/aiming-lab/WebHarbor/pull/89#issuecomment-5646790749", + "execution_versions_disclosed_to_reviewer": { + "IMDb--17": { + "code_sha": "ebe92f0888c5cf888fa40bd46f5b535ad01faa57", + "asset_revision": "4d5709e171d7c40fc742727adfa98b04b9023039" + }, + "all_other_tasks": { + "code_sha": "50bcce503637522d15bdafa533381204750f415f", + "asset_revision": "e70f49d8b6d0f32c940688e8e53e7c558f57a788" + } + }, + "limits": "Execution-completion judgment of frozen runs only; source fidelity, deterministic verifier correctness, runner independence and live replay were not assessed." +} diff --git a/review-reports/assets/pr33-imdb/independent-review-summary.json b/review-reports/assets/pr33-imdb/independent-review-summary.json index 46ab2c7c..de7ec27b 100644 --- a/review-reports/assets/pr33-imdb/independent-review-summary.json +++ b/review-reports/assets/pr33-imdb/independent-review-summary.json @@ -1,4 +1,5 @@ { + "status_update_2026-09-12": "Historical probe summary. Owner visual acceptance was recorded on 2026-09-12 and a formal 20-task blind review of the fixed candidate (formal-blind-review-1c8a1eb-summary.json) plus reconciliation (reconciliation-1c8a1eb-summary.json) supersede the pending statements below.", "schema": "imdb-public-independent-review-summary/v1", "reviewed_at": "2026-09-08T06:10:37Z", "received_result_sha256": "adaba6206131a83cde4d583537bfa4377fad039df30179de374a7153b42b9244", diff --git a/review-reports/assets/pr33-imdb/reconciliation-1c8a1eb-summary.json b/review-reports/assets/pr33-imdb/reconciliation-1c8a1eb-summary.json new file mode 100644 index 00000000..ad337278 --- /dev/null +++ b/review-reports/assets/pr33-imdb/reconciliation-1c8a1eb-summary.json @@ -0,0 +1,213 @@ +{ + "schema": "imdb-public-reconciliation-summary/v1", + "reconciled_at": "2026-09-12T15:40:00Z", + "target": { + "code_sha": "1c8a1eba19c084e202ecbab5977280701b9068c2", + "asset_revision": "f9ddfd2596229f2610418d57fc88c3051e1056bb" + }, + "inputs": { + "blind_review_result_sha256": "6bbb06ae20ebb6a1441c4767e7c07ab4ba758f6a63c3ce1a21a3cdc5023c23c6", + "blind_review_manifest_sha256": "09875b57a8c3f9092eae5f6f00fb619715dbecf5eeefd8f698ac2c5c5dc343fa" + }, + "tasks_compared": 20, + "verdict_differences": 0, + "substantive_findings": 0, + "comparison": [ + { + "task_id": "IMDb--0", + "execution_version": "r2 (50bcce5 / HF e70f49d)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + }, + { + "task_id": "IMDb--2", + "execution_version": "r2 (50bcce5 / HF e70f49d)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + }, + { + "task_id": "IMDb--7", + "execution_version": "r2 (50bcce5 / HF e70f49d)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + }, + { + "task_id": "IMDb--9", + "execution_version": "r2 (50bcce5 / HF e70f49d)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + }, + { + "task_id": "IMDb--10", + "execution_version": "r2 (50bcce5 / HF e70f49d)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + }, + { + "task_id": "IMDb--12", + "execution_version": "r2 (50bcce5 / HF e70f49d)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + }, + { + "task_id": "IMDb--14", + "execution_version": "r2 (50bcce5 / HF e70f49d)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + }, + { + "task_id": "IMDb--15", + "execution_version": "r2 (50bcce5 / HF e70f49d)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + }, + { + "task_id": "IMDb--16", + "execution_version": "r2 (50bcce5 / HF e70f49d)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + }, + { + "task_id": "IMDb--17", + "execution_version": "r1 (ebe92f0 / HF 4d5709e)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + }, + { + "task_id": "IMDb--18", + "execution_version": "r2 expansion (50bcce5 / HF e70f49d)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + }, + { + "task_id": "IMDb--19", + "execution_version": "r2 expansion (50bcce5 / HF e70f49d)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + }, + { + "task_id": "IMDb--20", + "execution_version": "r2 expansion (50bcce5 / HF e70f49d)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + }, + { + "task_id": "IMDb--21", + "execution_version": "r2 expansion (50bcce5 / HF e70f49d)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + }, + { + "task_id": "IMDb--22", + "execution_version": "r2 expansion (50bcce5 / HF e70f49d)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + }, + { + "task_id": "IMDb--23", + "execution_version": "r2 expansion (50bcce5 / HF e70f49d)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + }, + { + "task_id": "IMDb--24", + "execution_version": "r2 expansion (50bcce5 / HF e70f49d)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + }, + { + "task_id": "IMDb--25", + "execution_version": "r2 expansion (50bcce5 / HF e70f49d)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + }, + { + "task_id": "IMDb--26", + "execution_version": "r2 expansion (50bcce5 / HF e70f49d)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + }, + { + "task_id": "IMDb--27", + "execution_version": "r2 expansion (50bcce5 / HF e70f49d)", + "deterministic_verifier_on_canonical_run": "PASS", + "deterministic_verifier_on_guided_replay_at_1c8a1eb": "PASS", + "independent_blind_review_2026_09_12": "PASS", + "difference": null + } + ], + "common_pass_spot_checks": { + "method": "Read-only inspection of the frozen run packet after the blind result was hashed: task text, final answer, step DOM snapshots, run metadata and independently recomputed full-table logical row diffs of before/after SQLite snapshots. Coordinator reconciliation, not a second blind review.", + "IMDb--9": "Filters Movie/Drama/rating>=8.5/sort by rating applied; 42 results; answer keeps both above-cutoff titles plus one 9.0 tie; before/after DB identical.", + "IMDb--15": "Only watchlist_items row (user 2, Game of Thrones) removed; detail shows TV Series 2011 with Fantasy genre; final Watchlist excludes it.", + "IMDb--16": "Only user_ratings row (user 3, Fight Club) changed 9 -> 8; Fight Club 1999 is the latest Crime title in Carol's Watchlist; My ratings shows 8/10.", + "IMDb--17": "Exactly one review row added (Interstellar, user 1, rating 10, exact headline, non-empty body); pre-existing Alice review unchanged; reviews page shows the new review. r1 seed differs from current only on two unrelated title years.", + "IMDb--19": "Intersection is Catch Me If You Can and Saving Private Ryan; displayed Budget/Opening pairs $52.0M/$30.1M and $70.0M/$30.6M; displayed-value percentages 57.9% and 43.7%; raw stored values give 57.8% and 43.7% with the same maximum; DB unchanged.", + "IMDb--26": "Exactly one user (weekend.viewer@test.com) and two watchlist rows for that user added; no ratings/reviews; real Sign Out (\"Signed out.\") then successful re-login (\"Welcome back, Weekend Viewer.\") and Watchlist shows Interstellar and Parasite." + }, + "rulings": { + "IMDb--19": "Graded from the amounts displayed by the mirror as the task text requires: 30.1M / 52.0M = 57.9%. Hidden raw values would yield 57.8%; the unique maximum is unchanged either way.", + "IMDb--26": "Completion PASS is supported by same-run actions, DOM and the exact database delta. The run's run-start and seal-time metadata disagree (model label, prior-knowledge flag, runner identity wording, human-intervention list, tab id, resumed-session note), so this run is not represented as a reliably attested independent exploration." + }, + "version_reuse": { + "tasks_and_verifiers": "sites/imdb/tasks.jsonl (SHA256 36214b6cf168c726d60e1ea0662ddfbfce6fa5dc77c804812460d1c38da545d8) and the sites/imdb/verify tree are byte-identical between the expansion freeze 3d9fc7205c55e7403c8cc8637675649710820b48 and 1c8a1eba19c084e202ecbab5977280701b9068c2.", + "seed_data": "Logical (sorted-row) hashes of all ten business tables match between the r2 execution seed and the current seed; the current seed only adds the separate home_features table (219 rows). The r1 seed used by IMDb--17 differs only on two title-year corrections for titles that task never reads.", + "application": "Changes after the freeze add the sourced homepage, feature/collection/news/offline routes and a cookie-session recently-viewed list; search, advanced search, charts, genre, name, watchlist, rating, review, login, register and logout handlers are unchanged.", + "change_impact_check": "Guided replay of all 20 task paths on the immutable candidate image: 20/20 UI, 20/20 deterministic verifier, 311 steps, 13 read-only databases unchanged, 7 expected write deltas, 20/20 resets restoring the seed.", + "conclusion": "The 20 recorded canonical executions remain valid evidence for this candidate with their original r1/r2 identities disclosed; they are not relabeled as executions at 1c8a1eb, and the guided replay is not canonical credit or a new blind review." + }, + "historical_reviews": [ + { + "date": "2026-09-08", + "tasks": "0,2,7,9,10,12,14,15,16,17", + "result": "10 PASS / 0 FAIL", + "model": "claude-fable-5-1 (session-declared)", + "manifest_sha256": "60b1c9420a886fd028128dfe087cb375c587e5de2f0ea753e96fea2b0b705951" + }, + { + "date": "2026-09-10", + "tasks": "18-27", + "result": "10 PASS / 0 FAIL", + "model": "claude-opus-5 (session-declared)", + "manifest_sha256": "f609c60f5229c0f91d75bbdea3dd2ff29ce8e82d6534cc9cfb7f0ac9183dbfdd" + } + ] +} diff --git a/review-reports/assets/pr33-imdb/round4-feature-1440.jpg b/review-reports/assets/pr33-imdb/round4-feature-1440.jpg new file mode 100644 index 0000000000000000000000000000000000000000..387786d762537a234bf4f7c64ebedf5d4203b2e7 GIT binary patch literal 134450 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 z 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 VCPQqzT;c!6`1Sva$5<{2{|86>>{S2& literal 0 HcmV?d00001 diff --git a/review-reports/assets/pr33-imdb/round4-feature-detail-1440.jpg b/review-reports/assets/pr33-imdb/round4-feature-detail-1440.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8db69c4eba903abb9dc43c781a45582eb060e923 GIT binary patch literal 73333 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 literal 0 HcmV?d00001 diff --git a/review-reports/assets/pr33-imdb/round4-home-1440.jpg b/review-reports/assets/pr33-imdb/round4-home-1440.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c3d661d7f3a8462cd29d7393d4d68367ccd31c68 GIT binary patch literal 139162 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

    iZt^W~OI< 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 literal 0 HcmV?d00001 diff --git a/review-reports/assets/pr33-imdb/round4-home-390.jpg b/review-reports/assets/pr33-imdb/round4-home-390.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b93078acf07f0e381b6b1d44151241ab0a4aa91 GIT binary patch literal 85052 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