Migration PlanArbeitsstand · Nur lokale Ansicht

Source Pack Minimal Persistence Migration Plan

Source Pack Migration Plan

Diese Fläche übersetzt die Hybrid-Minimal-Entscheidung in konkrete Tabellen, Felder, JSONB-Sections und manuelle Ausführungsschritte. Sie ist ein Plan, keine Migration.

DDL manuell ausgeführt · Verification PASS

Code Alignment, Manual Create UI separat angebunden

DDL wurde manuell durch Dominic ausgeführt und verifiziert. Codex führt in diesem Block keine DDL aus; die Codebasis bildet die vorhandenen Tabellen typisiert ab.

  • source_packs verifiziert
  • source_observations verifiziert
  • Manual Create UI separat
  • keine Candidate-Erzeugung

Implementation Foundation

DDL wurde manuell ausgeführt und verifiziert

Die Tabellen sind in Neon vorhanden und per SQL-Verifikation geprüft. Diese Foundation ergänzte Schema Alignment, Runtime Guards und Mapper. Die Manual Create UI wurde später separat und begrenzt angebunden.

Recommended Minimal Path

Hybrid Minimal bleibt der erste Pfad

`source_packs` speichert den Source-Pack-Arbeitsstand. `source_observations` speichert einzelne kurze, eigene Beobachtungszusammenfassungen. Der Handoff Draft bleibt zunächst als JSONB-Brief im Source Pack, bis ein expliziter Handoff-Flow entschieden ist.

SQL Proposal

Manuell prüfbarer Vorschlag

Der DDL-Vorschlag liegt unter docs/sql-proposals/source-pack-minimal-persistence-proposal.sql. Er bleibt ein Review-Artefakt; die Ausführung erfolgte manuell außerhalb von Codex.

Manual DDL Verification

Manuelle DDL ist abgeschlossen

Verifiziert sind source_packs, source_observations, erwartete Spalten, Indizes, Check-Constraints und Foreign Key. source_pack_handoff_drafts existiert bewusst nicht.

Schema Alignment

Code kennt die vorhandenen Tabellen

  • source_packs ist im Drizzle-Schema abgebildet.
  • source_observations ist im Drizzle-Schema abgebildet.
  • source_pack_handoff_drafts bleibt bewusst nicht im Schema.

Runtime Validation

Boundary Guards vor API/UI

  • Statuswerte werden qualitativ begrenzt.
  • Revenue Potential Status bleibt ohne Zahlen.
  • JSONB-Sections werden als Objekt oder Array geprüft.
  • verbotene Candidate-, Bewertungs-, Launch- und Revenue-Estimate-Felder werden blockiert.

Next Persistence Step

Handoff umgesetzt, Candidate Review als naechster Schritt

Source Pack Candidate Review / Candidate Intelligence Linkage: explizite Handoff-Hypothesen im bestehenden Candidate-Pfad weiterfuehren.

Nicht in diesem Block

  • kein Observation Edit
  • keine Delete-API
  • keine öffentliche CRUD-API
  • keine DB-Änderung
  • keine Migration
  • keine DDL-Ausführung durch Codex
  • keine automatische Candidate-Erzeugung
  • keine externe Integration

Source Pack Persistence API Foundation

Read API ist bereit; Write und Handoff bleiben kontrolliert

Die API-Foundation macht Source Packs kontrolliert lesbar. Create Draft und Add Observation waren die erste Write-Stufe; Edit, Archive und expliziter Handoff wurden spaeter separat begrenzt ergaenzt. Delete, automatische Handoffs und Adapter Writes bleiben blockiert.

Read API

Interne Read-Routen sind vorbereitet

  • GET /api/internal/source-packs liefert begrenzte SourcePackReadModels.
  • GET /api/internal/source-packs/[id] liefert ein einzelnes Read Model oder kontrollierten Fehler.
  • Responses enthalten Boundary Notes und keine raw DB Rows.

Validate-Only

Payload-Pruefung ohne Persistenz

  • POST /api/internal/source-packs/validate prueft zukuenftige Create/Edit-Payloads.
  • Validate-Only nutzt Runtime Guards und schreibt keine Tabellen.
  • Verbotene Keys und riskante Claims werden als Fehler oder Blocked Claims sichtbar.

Blocked Writes

Keine Delete- oder Auto-Handoff-Route

  • keine Observation-Edit-API
  • keine DELETE-API
  • kein Bulk Import
  • kein Adapter Write
  • kein automatischer Source-Pack-zu-Offer-Radar-Handoff
  • keine Candidate-Erzeugung ohne explizite manuelle Handoff-Action
  • keine externe Integration
  • keine Umsatzpotenzial-Berechnung
Next Build Block

Source Pack Candidate Review / Candidate Intelligence Linkage

Source Pack Candidate Review / Candidate Intelligence Linkage: Handoff-Hypothesen im bestehenden Candidate-Pfad sauber weiterfuehren.

Proposed Minimal Tables

Zwei Tabellen jetzt planen, Handoff-Tabelle später

Der Minimalpfad trennt Source Pack und Observation als eigene Identitäten. Der Handoff Draft bleibt vorerst als Brief im Source Pack.

Proposed Minimal Table

source_packs

Speichert den Arbeitsstand einer Source-Pack-Hypothese.

Hybrid Minimal

Source Pack braucht eine eigene Identität, damit Arbeitsstand, Evidence Boundaries und Handoff Draft nicht mit Research Cases oder Candidates vermischt werden.

uuid

id

Stabile Source-Pack-Identität.

Keine Ableitung von Candidate- oder Research-Case-Identität.

requireddefault: gen_random_uuid()

text

title

Kurzer Arbeitstitel des Source Packs.

Titel darf keine Validierung oder Umsatzannahme behaupten.

required

text

working_hypothesis

Hypothese, die aus begrenzten Observations entstanden ist.

Hypothese bleibt Arbeitsstand, kein Marktbeleg.

required

text

target_audience

Angenommene Zielgruppe.

Audience bleibt Annahme, keine belegte Nachfragegröße.

required

text

possible_offer_shape

Mögliche Produktform wie Audit, Template, Playbook oder Setup-Kit.

Kein Launch-, Sales- oder Delivery-Versprechen.

nullable

text

status

Bearbeitungszustand des Source-Pack-Arbeitsstands.

Keine Werte für Validierung, Launch oder automatische Empfehlung.

requireddefault: draft

text

revenue_potential_status

Qualitative Umsatzgrenze ohne Zahlen.

Keine Umsatzwerte, keine Conversion Rates, keine Szenarien.

requireddefault: blocked_due_to_insufficient_evidence

jsonb

evidence_summary_json

Kurze Zusammenfassung der Signal- und Evidence-Lage.

Kein Rohdatenarchiv und keine langen Fremdtexte.

requireddefault: {}

jsonb

missing_evidence_json

Fehlende Nachfrage-, Preis-, Kanal-, Conversion-, Delivery- oder Trust-Evidence.

Missing Evidence bleibt sichtbar und darf nicht überschrieben werden.

requireddefault: []

jsonb

blocked_claims_json

Claims, die aus diesem Source Pack nicht abgeleitet werden dürfen.

Blockiert Validierungs-, Umsatz-, Launch- und Performance-Claims.

requireddefault: []

text

recommended_next_step

Nächster manueller Prüfpfad.

Nächster Schritt ist Prüfung, keine Ausführung.

nullable

jsonb

handoff_draft_json

Strukturierter Handoff-Brief Richtung Offer Radar.

Brief erzeugt keinen Candidate und keine Freigabe.

requireddefault: {}

text

redaction_notes

Notiz zu Redaction, Quellenrecht oder sensiblen Grenzen.

Keine Speicherung sensibler Rohdaten selbst.

nullable

timestamp_tz

created_at

Technischer Erstellzeitpunkt.

Zeitpunkt ist keine Evidence-Qualität.

requireddefault: now()

timestamp_tz

updated_at

Technischer Aktualisierungszeitpunkt.

Aktualität ist keine Validierung.

requireddefault: now()

JSONB Sections

  • evidence_summary_json
  • missing_evidence_json
  • handoff_draft_json

Constraints

  • source_packs_status_allowed
  • source_packs_revenue_status_allowed

Indexes

  • source_packs_status_idx
  • source_packs_updated_at_idx

Nicht dafür

  • Validierungsstatus
  • Umsatzbeleg
  • Launch-Freigabe
  • automatische Candidate-Erzeugung

Proposed Minimal Table

source_observations

Speichert einzelne kurze, eigene Beobachtungszusammenfassungen.

Hybrid Minimal

Observations brauchen eine eigene Identität, damit spätere Adapter und manuelle Quellen nicht als unstrukturierter JSONB-Rohdatenblock enden.

uuid

id

Stabile Observation-Identität.

Observation bleibt Signal, kein Proof.

requireddefault: gen_random_uuid()

uuid

source_pack_id

Zuordnung zum Source Pack.

Zuordnung erzeugt keinen Candidate.

required

text

source_family

Quellenfamilie aus der Source-Strategy-Logik.

Source Family ist Herkunft, nicht Evidence-Stärke.

required

text

source_context

Kurzer Kontext der Beobachtung.

Kein langer kopierter Quelltext.

required

text

source_reference

Optionale kontrollierte Referenz.

Keine personenbezogenen, geheimen oder lizenzkritischen Rohdaten.

nullable

text

observation_summary

Kurze eigene Beobachtungszusammenfassung.

Zusammenfassung statt Rohdaten-Sammlung.

required

text

observed_problem

Beobachtetes Problem oder Friktionsmuster.

Problemhinweis beweist keine Zahlungsbereitschaft.

nullable

text

observed_audience

Beobachtete oder angenommene Audience.

Audience-Hinweis ist keine Marktgröße.

nullable

jsonb

signal_types_json

Qualitative Signaltypen aus Source Signal Intake.

Keine Scores, Rankings oder Präzisionswirkung.

requireddefault: []

jsonb

allowed_inferences_json

Erlaubte Ableitungen aus der Observation.

Nur begrenzte Inferences, keine Validierung.

requireddefault: []

jsonb

disallowed_inferences_json

Geblockte Ableitungen.

Muss Umsatz-, Launch- und Proof-Claims blockieren.

requireddefault: []

jsonb

missing_evidence_json

Fehlende Evidence auf Observation-Ebene.

Lücken bleiben sichtbar.

requireddefault: []

text

next_verification_path

Nächster sinnvoller Prüfpfad.

Prüfpfad ist kein automatischer Test oder Adapterlauf.

nullable

text

revenue_boundary_note

Qualitative Umsatzgrenze.

Umsatzpotenzial aktuell nicht belastbar einschätzbar.

nullable

text

redaction_status

Redaction-Arbeitsstatus.

Status ersetzt keine Datenschutzfreigabe.

requireddefault: needs_review

timestamp_tz

created_at

Technischer Erstellzeitpunkt.

Zeitpunkt ist keine Evidence-Qualität.

requireddefault: now()

timestamp_tz

updated_at

Technischer Aktualisierungszeitpunkt.

Aktualität ist keine Validierung.

requireddefault: now()

JSONB Sections

  • signal_types_json

Constraints

  • source_observations_redaction_status_allowed

Indexes

  • source_observations_source_pack_id_idx
  • source_observations_source_family_idx

Nicht dafür

  • Raw Scrapes
  • lange fremde Originaltexte
  • personenbezogene Social- oder Community-Daten
  • Proof oder Marktbeleg

Optional später

source_pack_handoff_drafts

Spätere eigene Handoff-Draft-Entity, falls Handoff-Lifecycle komplex wird.

nicht im Minimalpfad

Nicht Teil des Minimalpfads. Eine eigene Tabelle wird erst sinnvoll, wenn Review, Versionierung oder mehrere Handoff-Drafts pro Pack gebraucht werden.

Warum noch nicht

Eine eigene Handoff-Tabelle wäre erst sinnvoll, wenn Handoff-Review, mehrere Drafts oder ein eigener Lifecycle entschieden sind.

JSONB Sections

Keine Section im Minimalpfad.

Constraints

Noch keine Constraint.

Indexes

Noch kein Index.

Nicht dafür

  • aktueller Minimal-Migrationsblock
  • automatische Candidate-Erzeugung
  • Validierungswirkung

Storage Boundaries

Was gespeichert wird und was blockiert bleibt

Persistenz speichert Arbeitsstand und Grenzen. Sie speichert keine Marktentscheidung, keine Validierung und keine Umsatzannahme.

What Gets Stored

Später speicherbar

  • kurze eigene Signalzusammenfassungen
  • Source Family und Source Context
  • optionale kontrollierte Source Reference
  • Signaltypen
  • Allowed und Blocked Inferences
  • Missing Evidence
  • Revenue Boundary ohne Zahlen
  • Handoff Draft als Brief
  • Redaction Notes

What Must Not Be Stored

Nicht speichern

  • lange Fremdtexte
  • Raw Scrapes
  • personenbezogene Community- oder Social-Daten
  • private Kundendaten ohne separate Policy
  • lizenzierte oder geheime Daten
  • Umsatzannahmen
  • Scores
  • Rankings
  • Launch-Freigaben
  • Validierungsstatus

JSONB Sections

Flexibel, aber nicht beliebig

JSONB bleibt nur für strukturierte Sections. Es darf nicht zur Rohdatenablage werden.

source_packs

evidence_summary_json

object with summary, strongestSignals, weakestSignals

Darf enthalten

  • kurze eigene Signalzusammenfassungen
  • stärkste und schwächste Signale
  • qualitative Evidence Boundary

Bleibt gesperrt

  • lange Fremdtexte
  • Raw Scrapes
  • personenbezogene Community-Inhalte
  • Umsatz- oder Conversion-Annahmen

source_packs

missing_evidence_json

array of missing evidence labels and notes

Darf enthalten

  • fehlende Nachfrage-Daten
  • fehlende Preisanker
  • fehlende Conversion-Daten
  • fehlende Delivery- oder Trust-Prüfung

Bleibt gesperrt

  • implizite Freigaben
  • versteckte Positiveinschätzungen

source_packs

handoff_draft_json

object matching CandidateHandoffDraft without candidate creation side effects

Darf enthalten

  • candidate title draft
  • audience
  • problem
  • possible offer format
  • source-backed signals
  • assumptions
  • missing evidence
  • disallowed claims
  • recommended research next step

Bleibt gesperrt

  • Candidate-ID
  • Candidate-Status
  • Launch-Freigabe
  • Umsatzpotenzial
  • automatische Empfehlung

source_observations

signal_types_json

array of SourceSignalType strings

Darf enthalten

  • pain_signal
  • demand_hint
  • workflow_friction
  • tool_gap

Bleibt gesperrt

  • Scores
  • Rankings
  • Performance-Metriken

Manual Execution Boundary

Codex hat keine DDL ausgeführt

Die Ausführung war ein manueller Dominic-Schritt. Diese Codeänderung nutzt keine DB-Verbindung und startet keine Migration.

Manual Step

1. SQL-Vorschlag fachlich geprüft

Die manuelle DDL-Ausführung wurde erst nach Review der Felder, Constraints, Redaction-Grenzen und Rollback-Hinweise freigegeben.

Bestätigt / Grenze

  • keine Validierungsfelder
  • keine Umsatz- oder Conversion-Zahlenfelder
  • keine Rohdatenfelder
  • Handoff Draft bleibt eingebettet

Manual Step

2. DDL manuell ausgeführt

Dominic hat die DDL außerhalb von Codex in Neon ausgeführt.

Bestätigt / Grenze

  • source_packs existiert
  • source_observations existiert
  • source_pack_handoff_drafts existiert bewusst nicht
  • keine App-Speicherfunktion wurde dadurch aktiviert

Manual Step

3. Verification und Smoke bestanden

SQL-Verifikation und Staging-Smoke waren nach der DDL-Ausführung grün.

Bestätigt / Grenze

  • erwartete Spalten vorhanden
  • erwartete Indizes vorhanden
  • erwartete Constraints vorhanden
  • keine verbotenen Felder vorhanden

Handoff Boundary

Ein Handoff Draft erzeugt noch keinen Candidate

Der Minimalplan enthält kein Candidate-Feld. Ein Offer-Radar-Candidate entsteht nur später über einen expliziten Handoff-Flow.

Handoff bleibt Brief

Source Pack → Handoff Draft → expliziter Candidate-Flow

`handoff_draft_json` speichert nur Arbeitsmaterial. Es enthält keine Candidate-ID, keine Freigabe und keine automatische Erzeugung.

kein automatischer Candidate
  • Source Pack bleibt Hypothese
  • Handoff Draft bleibt Brief
  • Candidate braucht expliziten Flow
  • keine Umsatzberechnung

Risks / Open Decisions

Vor echter Persistenz noch zu entscheiden

Diese offenen Punkte gehören vor DDL-Ausführung oder Implementierung auf den Tisch.

Open Migration Decision

Welche API-Grenze folgt nach Schema Alignment?

Optionen

  • read-only API zuerst
  • Create Draft API zuerst
  • API weiter parken

Empfehlung

Read-only, Create Draft, Manual UI und Edit/Archive getrennt planen; Delete und Handoff bleiben eigene Entscheidungen.

Blockiert

Blockiert Delete und Handoff, nicht die Code-Alignment-Foundation.

Open Migration Decision

Bleibt Handoff Draft als JSONB im Source Pack?

Optionen

  • embedded JSONB
  • eigene Tabelle
  • zunächst gar nicht persistieren

Empfehlung

Embedded JSONB für den ersten Minimalpfad, weil es noch keinen Handoff-Lifecycle gibt.

Blockiert

Blockiert spätere Handoff-Implementierung.

Open Migration Decision

Wie hart wird JSONB zur Laufzeit validiert?

Optionen

  • TypeScript only
  • Runtime Validation
  • DB Constraints plus Runtime Validation

Empfehlung

Runtime Validation im späteren Implementierungsblock, DB Constraints nur für Statusgrenzen.

Blockiert

Blockiert API-Implementierung.

Open Migration Decision

Welche Retention-Regeln gelten später?

Optionen

  • minimal ohne Rohdaten
  • Archivierung
  • Löschkonzept pro Source Family

Empfehlung

Vor echten externen Adaptern eigene Retention- und Redaction-Policy härten.

Blockiert

Blockiert externe Adapter.

Data Safety Rules

Redaction und Datenqualität im Schema sichtbar halten

Kurze eigene Zusammenfassungen

Source Packs enthalten Signalzusammenfassungen, keine Rohdaten-Sammlung.

Pflichtfelder sind Summary- und Boundary-Felder; Raw-Content-Felder sind nicht geplant.

Revenue Boundary

Umsatzpotenzial aktuell nicht belastbar einschätzbar, solange Nachfrage-, Preis- und Conversion-Daten fehlen.

Nur qualitative RevenuePotentialStatus-Werte; keine Zahlenfelder.

Handoff bleibt Brief

Ein Handoff Draft erzeugt noch keinen Candidate.

Kein candidate_id-Feld im Minimalpfad und keine API-Seite in diesem Block.

Redaction zuerst

Personenbezogene oder lizenzkritische Rohdaten werden nicht gespeichert.

source_reference bleibt optional; redaction_status und redaction_notes bleiben sichtbar.

Rollback Note

Kein Rollback nötig, solange nichts ausgeführt wurde

Ein Rollback wäre nur relevant, wenn Dominic den SQL-Vorschlag später manuell ausführt.

  • Da dieser Block kein SQL ausführt, ist aktuell kein technischer Rollback nötig.
  • Späterer Rollback müsste zuerst abhängige Source Observations entfernen, dann Source Packs.
  • Vor produktiver Nutzung braucht es eine Entscheidung zu Datenexport oder Archivierung.

Not Built Yet

Dieser Block baut keine Persistenz

  • kein Observation Edit
  • keine Delete-API
  • keine öffentliche CRUD-API
  • keine DB-Änderung
  • keine Migration
  • keine DDL-Ausführung durch Codex
  • keine automatische Candidate-Erzeugung
  • keine externe Integration

Next Build Block

Source Pack Candidate Review / Candidate Intelligence Linkage

Source Pack Candidate Review / Candidate Intelligence Linkage: explizite Handoff-Hypothesen im bestehenden Candidate-Pfad weiterfuehren.