aadfccf32d
Per docs/superpowers/plans/2026-06-04-experience-simulator.md Task 3. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
60 lines
2.4 KiB
Python
60 lines
2.4 KiB
Python
"""Deterministic synthetic catalog so the selection model can be felt everywhere.
|
|
|
|
The real catalog (catalog/library.jsonl) is empty; this generates one record per
|
|
cell of the 5x5 brain x 5x5 mood coordinate space (625 records), with a seeded
|
|
mix of content modes and review statuses and no real media attached.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import random
|
|
|
|
from hef.catalog import Record
|
|
|
|
MODES = ("audio", "video", "av")
|
|
ARCHIVES = ("internet_archive", "musopen", "librivox", "nasa", "freesound")
|
|
|
|
_LEFT_WORDS = ("Treatise", "Lecture", "Field Notes", "Reading", "Documentary")
|
|
_RIGHT_WORDS = ("Reverie", "Nocturne", "Bloom", "Drift", "Aurora")
|
|
|
|
|
|
def _title(left: int, right: int, dark: int, light: int, mode: str) -> str:
|
|
a = _LEFT_WORDS[left] if left >= right else _RIGHT_WORDS[right]
|
|
return f"{a} ({mode}) L{left}R{right}D{dark}Li{light}"
|
|
|
|
|
|
def generate_fixture_catalog(seed: int = 1729) -> list[Record]:
|
|
"""One valid Record per coordinate cell (625 total), deterministic for a seed."""
|
|
rng = random.Random(seed)
|
|
records: list[Record] = []
|
|
n = 0
|
|
for left in range(5):
|
|
for right in range(5):
|
|
for dark in range(5):
|
|
for light in range(5):
|
|
mode = rng.choice(MODES)
|
|
status = rng.choice(("proposed", "approved"))
|
|
is_video = mode in ("video", "av")
|
|
records.append(
|
|
Record(
|
|
id=f"fx-{n:04d}",
|
|
title=_title(left, right, dark, light, mode),
|
|
source_url=f"https://example.test/fx/{n:04d}",
|
|
source_archive=rng.choice(ARCHIVES),
|
|
license="public_domain",
|
|
mode=mode,
|
|
left=left,
|
|
right=right,
|
|
dark=dark,
|
|
light=light,
|
|
duration_s=rng.choice((300, 480, 600, 720, 900)),
|
|
file_path="",
|
|
review_status=status,
|
|
resolution="1920x1080" if is_video else "",
|
|
rationale=f"fixture at ({left},{right},{dark},{light})",
|
|
reviewed_at="2026-06-04T00:00:00Z" if status == "approved" else None,
|
|
)
|
|
)
|
|
n += 1
|
|
return records
|