seepuls/devlog/2026-05-15/data.json
Till JS 5105935e6c
Some checks are pending
CI / validate (push) Waiting to run
events: seepuls-curate-events Skill (real) + erste 4 Live-Events
Skill /seepuls-curate-events:
- Rewrite vom Stub auf voll funktional. Nutzt WebFetch's
  AI-Extraction als Ersatz für mana-research+mana-llm (die nicht
  laufen). 5-Stufen-Pipeline mit Reviewer-Stops, Hash-Dedupe,
  Crawl-Audit, robots-Check, direct-SQL-Insert auf prod.
- AGGREGATOR_POLICY-konform: User-Agent mit Kontakt-Mail, Datum-
  Strict-Parsing (kein free-form), description ≤ 220 Zeichen, Bilder
  Hot-Link.

Erster Skill-Run (Demo): 4 Events live in prod.
- Zebra Kino: CALLE MÁLAGA (17.05), DAS VERSPRECHEN (02.06)
- Apollo Kulturhaus: Hanna Fearns (27.05), EULE & LERCHE (30.05)

Crawl-Audit (1 Zeile crawl_jobs) mit robots_check_passed=true,
respected_robots_delay=true, status=ok, new=4, updated=0.

Findings im ersten Run (für Skill-Verbesserung):
- K9 (k9-kulturzentrum.de): JS-heavy, WebFetch error null.
- Theater Konstanz: dynamisches Programm, leeres JSON.
- Kantine (kantine-kn.de): nur Headline "JUST ONE MORE TRACK",
  Events auf JS-Subseite.
- CineStar: Multiplex, Showtimes via JS.
- Apollo Listing-Page hat Events ohne Datum — Detail-Pages
  liefern dann Datum + Zeit. Multi-Step-Crawl-Pattern.

API-Fix:
- /api/v1/events response.venue jetzt mit category-Feld.

DB-Fix:
- events_dedupe_uq, events_slug_uq, events_venue_idx,
  events_starts_at_idx auf prod nachgezogen (db:push hatte die nicht
  von der ersten Migration angelegt). Lokal vorhanden, idempotente
  CREATE INDEX IF NOT EXISTS.

Audit-Trail: ~/Documents/seepuls-drafts/zebra-kino-konstanz-events-2026-05-15/
(nicht-Repo, lokal). Enthält plan.md, research/raw.json,
design/events.jsonl, publish/insert.sql.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 18:29:18 +02:00

297 lines
7 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"date": "2026-05-15",
"day_number": 1,
"weekday": "Freitag",
"commits": 23,
"authors": [
{
"name": "Till JS",
"count": 23
}
],
"additions": 13600,
"deletions": 812,
"net_lines": 12788,
"files_changed": 120,
"new_files": 0,
"deleted_files": 0,
"session": {
"first_commit_at": "2026-05-15T12:14:15.000Z",
"last_commit_at": "2026-05-15T16:16:57.000Z",
"total_span_minutes": 243,
"active_minutes": 184,
"pauses": [
{
"from": "14:56",
"to": "15:55",
"minutes": 59
}
],
"longest_focus_minutes": 142
},
"top_dirs": [
{
"path": "apps/api/src/data",
"pct": 36
},
{
"path": "apps/web/src/pages",
"pct": 10
},
{
"path": "apps/api/src/db",
"pct": 7
},
{
"path": "apps/api/src/routes",
"pct": 6
},
{
"path": "apps/api/src/services",
"pct": 6
}
],
"top_extensions": [
{
"ext": ".yml",
"count": 73
},
{
"ext": ".ts",
"count": 59
},
{
"ext": ".astro",
"count": 27
},
{
"ext": ".md",
"count": 14
},
{
"ext": ".json",
"count": 10
},
{
"ext": ".yaml",
"count": 4
}
],
"tags": [
"status"
],
"commits_list": [
{
"hash": "32f0295",
"short": "seepuls α-0: Repo-Skelett + Aggregator-Schema",
"type": null,
"scope": null,
"additions": 3466,
"deletions": 0,
"timestamp": "2026-05-15T14:14:15+02:00"
},
{
"hash": "ff909d6",
"short": "docs(status): α-0 als validiert markieren (install + db-push + smoke grün)",
"type": "docs",
"scope": "status",
"additions": 56,
"deletions": 41,
"timestamp": "2026-05-15T14:15:47+02:00"
},
{
"hash": "2b148ab",
"short": "α-1a: robots.txt-Parser + Politeness-Hardening",
"type": null,
"scope": null,
"additions": 317,
"deletions": 15,
"timestamp": "2026-05-15T14:29:37+02:00"
},
{
"hash": "43a7e04",
"short": "α-1b: Venue-from-URL-Flow + JWT-Auth + Service-Clients",
"type": null,
"scope": null,
"additions": 486,
"deletions": 5,
"timestamp": "2026-05-15T14:32:56+02:00"
},
{
"hash": "12a52d3",
"short": "α-1: Country-Normalisierung-Tests + STATUS-Update",
"type": null,
"scope": null,
"additions": 138,
"deletions": 51,
"timestamp": "2026-05-15T14:35:01+02:00"
},
{
"hash": "f8bf1bf",
"short": "α-2: Event-Source-Add + Probe-Crawl + manueller Run",
"type": null,
"scope": null,
"additions": 623,
"deletions": 0,
"timestamp": "2026-05-15T14:50:45+02:00"
},
{
"hash": "e7273bd",
"short": "α-3: Re-Crawl-Scheduler + DRY-Extraktion",
"type": null,
"scope": null,
"additions": 342,
"deletions": 128,
"timestamp": "2026-05-15T14:52:59+02:00"
},
{
"hash": "85e602e",
"short": "α-3.5: Seed-Daten + Public Read-API",
"type": null,
"scope": null,
"additions": 303,
"deletions": 1,
"timestamp": "2026-05-15T14:55:14+02:00"
},
{
"hash": "5c08c40",
"short": "docs(status): α-0/1/2/3/3.5 zusammengefasst, API-Oberfläche dokumentiert",
"type": "docs",
"scope": "status",
"additions": 71,
"deletions": 75,
"timestamp": "2026-05-15T14:56:04+02:00"
},
{
"hash": "1dee1c8",
"short": "α-4: Astro-Web (apps/web/) live-tauglich",
"type": null,
"scope": null,
"additions": 4478,
"deletions": 148,
"timestamp": "2026-05-15T15:55:12+02:00"
},
{
"hash": "2b4ec96",
"short": "docs(status): α-4 Astro-Web live-getestet markieren",
"type": "docs",
"scope": "status",
"additions": 4,
"deletions": 1,
"timestamp": "2026-05-15T15:55:59+02:00"
},
{
"hash": "1106d72",
"short": "α-4.5: SEO + per-Venue-API + Policy + Region-Pages",
"type": null,
"scope": null,
"additions": 378,
"deletions": 5,
"timestamp": "2026-05-15T16:04:37+02:00"
},
{
"hash": "273594b",
"short": "docs(status): Forgejo-Repo + DNS/Tunnel als bereitet markieren",
"type": "docs",
"scope": "status",
"additions": 10,
"deletions": 6,
"timestamp": "2026-05-15T16:17:58+02:00"
},
{
"hash": "aa32db1",
"short": "α-5a: Production-Deploy-Files (compose + Dockerfiles)",
"type": null,
"scope": null,
"additions": 196,
"deletions": 15,
"timestamp": "2026-05-15T16:21:16+02:00"
},
{
"hash": "9fb0323",
"short": "α-5 ✅: seepuls LIVE auf seepuls.mana.how + seepuls-api.mana.how",
"type": null,
"scope": null,
"additions": 13,
"deletions": 8,
"timestamp": "2026-05-15T16:35:44+02:00"
},
{
"hash": "9d48815",
"short": "α-5b: Code-Cleanup + auth.apps-Registrierung",
"type": null,
"scope": null,
"additions": 21,
"deletions": 15,
"timestamp": "2026-05-15T16:47:46+02:00"
},
{
"hash": "6125df9",
"short": "α-6: Curator-Pipeline für Venues (YAML-as-SOT)",
"type": null,
"scope": null,
"additions": 1149,
"deletions": 11,
"timestamp": "2026-05-15T17:07:17+02:00"
},
{
"hash": "b262f55",
"short": "content: +3 Kreuzlinger Venues (Kult-X, Apollo Kulturhaus, Kunstraum)",
"type": null,
"scope": null,
"additions": 71,
"deletions": 0,
"timestamp": "2026-05-15T17:13:59+02:00"
},
{
"hash": "4b93c02",
"short": "content: +5 Konstanz/Kreuzlingen Bars (Blue, NewFax, 107, Einstein, Destille)",
"type": null,
"scope": null,
"additions": 118,
"deletions": 1,
"timestamp": "2026-05-15T17:20:17+02:00"
},
{
"hash": "845ff08",
"short": "content: +4 Konstanzer Clubs (Kantine, Grey, Poly Areal, Steg 4)",
"type": null,
"scope": null,
"additions": 95,
"deletions": 0,
"timestamp": "2026-05-15T17:24:12+02:00"
},
{
"hash": "d247883",
"short": "content: +5 Konstanzer Kulturorte (KULA, K9, Contrast, Zebra Kino, Kula Bar)",
"type": null,
"scope": null,
"additions": 121,
"deletions": 0,
"timestamp": "2026-05-15T17:35:44+02:00"
},
{
"hash": "eb96652",
"short": "content: +13 Venues — Theater, Kinos, Museen, Bars (Tier 1+2+3)",
"type": null,
"scope": null,
"additions": 290,
"deletions": 0,
"timestamp": "2026-05-15T17:59:07+02:00"
},
{
"hash": "93d5e7f",
"short": "ui: dark theme (Memoro-Style) + Kategorien + Land-Text",
"type": null,
"scope": null,
"additions": 854,
"deletions": 286,
"timestamp": "2026-05-15T18:16:57+02:00"
}
],
"review_state": "auto",
"llm": {
"model": null,
"generated_at": null
}
}