Output:
## STATUS
M autoshorts/strategy/spine_v2.py
 M tests/test_strategy_spine_v2.py
?? autoshorts/claims/
?? autoshorts/cli/demo_review_batch_v2.py
?? autoshorts/compliance/
?? autoshorts/content/to_candidate_v2.py
?? autoshorts/review/approvals_v2.py
?? autoshorts/review/workflow_v2.py
?? docs/rendering_backend_options.md
?? tests/test_strategy_spine_v2_operational.py
## BRANCH
strategy-refactor-v2
## CHANGED
autoshorts/strategy/spine_v2.py
tests/test_strategy_spine_v2.py
autoshorts/claims/fact_gate.py
autoshorts/cli/demo_review_batch_v2.py
autoshorts/compliance/ai_disclosure.py
autoshorts/content/to_candidate_v2.py
autoshorts/review/approvals_v2.py
autoshorts/review/workflow_v2.py
docs/rendering_backend_options.md
tests/test_strategy_spine_v2_operational.py
## CLI_JSON
{"ready_for_review":[{"candidate_id":"ai-output-autopsy-decision-summary-38s","version":"v2.0.0","script_hash":"72129542b86819fd","media_hash":null,"series":"AI Output Autopsy","audience_need":"clarity","emotion_before":"confused","emotion_after":"in_control","hook":"Your AI summary is useless because it has no decision target.","first_frame":"Split-screen: 47-minute transcript vs. useless AI summary stamped USELESS.","visible_fail":"The summary says 'great discussion' but misses the launch decision.","anti_example":"A useless AI summary saying great discussion with no owner, blocker, or decision.","concrete_scene":"","mechanism":"Without a decision target, AI compresses every sentence equally.","fix":"Ask for blockers, owners, risks, and next steps tied to the decision.","before_after":"Before: generic summary. After: decision evidence with owner and risk.","takeaway":"Don't ask for a summary. Ask for decision evidence.","save_reason":"Copyable sentence for the next meeting summary.","share_reason":"Colleagues recognize the useless-summary problem.","follow_reason":"Follow for small systems that make AI output useful.","claims":["Decision-targeted summaries preserve relevance better than generic summaries."],"claim_risk":"low","ai_disclosure":"no","platform_fit":{"youtube_shorts":"strong","tiktok":"strong","instagram_reels":"medium","linkedin_manual":"manual B2B caption; check silent-autoplay readability"},"linkedin_title":"A better way to brief AI meeting summaries","linkedin_caption":"Most meeting summaries fail because they protect no decision. Name the decision first, then ask for blockers, owners, risks and next steps.","risks":["medium AI-tip saturation"],"experiment_hypothesis":{"statement":"Tests whether decision-target AI examples drive saves.","expected_winning_metric":"saves_per_view"},"expected_winning_metric":"saves_per_view","human_texture_note":"messy meeting transcript with launch decision","render_backend_candidate":"python_motion","score":{"total":86,"render_allowed":true,"reject_reasons":[],"breakdown":{"problem_urgency":{"points":13,"max_points":15,"rationale":"Visible everyday fail with recognizable audience need."},"first_frame_clarity":{"points":10,"max_points":12,"rationale":"First frame shows a conflict without relying on audio."},"hook_curiosity":{"points":10,"max_points":12,"rationale":"Hook opens a mechanism loop; generic hooks lose points."},"mechanism_value":{"points":11,"max_points":12,"rationale":"Mechanism is tied to anti-example/concrete scene."},"practical_payoff":{"points":13,"max_points":15,"rationale":"Fix and takeaway are actionable."},"retention_path":{"points":8,"max_points":10,"rationale":"Before/after plus motion-led path."},"share_save_potential":{"points":9,"max_points":10,"rationale":"Save, share, and follow reasons are explicit."},"human_texture":{"points":7,"max_points":8,"rationale":"Concrete human texture, not just an enum."},"series_fit":{"points":4,"max_points":4,"rationale":"Known TrueTrace series."},"saturation_defense":{"points":1,"max_points":2,"rationale":"Saturation risk penalty applied."}}},"approval_command":"APPROVE ai-output-autopsy-decision-summary-38s v2.0.0 72129542b86819fd"},{"candidate_id":"digital-red-flags-fake-invoice-35s","version":"v2.0.0","script_hash":"ace02532309afd60","media_hash":null,"series":"Digital Red Flags","audience_need":"safety","emotion_before":"anxious","emotion_after":"warned","hook":"This invoice looks safe. The trap is in line three.","first_frame":"Split-screen: normal invoice vs. red flag line with urgent payment warning.","visible_fail":"The recipient trusts the logo but ignores the changed payment route.","anti_example":"A seemingly normal fake invoice where the payment route changed under urgency.","concrete_scene":"","mechanism":"Scam messages borrow familiar context and add urgency before verification.","fix":"Check sender domain, urgency, and payment route before acting.","before_after":"Before: logo trust. After: domain, urgency, and bank route check.","takeaway":"Urgency is not proof. It is the red flag.","save_reason":"Viewer can reuse the three-check invoice rule.","share_reason":"Anyone handling invoices can use the warning.","follow_reason":"Follow for digital red flags before they cost you.","claims":["Urgency and payment-route changes are common scam warning signs."],"claim_risk":"low","ai_disclosure":"no","platform_fit":{"youtube_shorts":"strong","tiktok":"strong","instagram_reels":"medium","linkedin_manual":"manual B2B caption; check silent-autoplay readability"},"linkedin_title":"A quick invoice red-flag check for teams","linkedin_caption":"A fake invoice does not need to be perfect. It only needs to rush you. Check domain, urgency and payment route before acting.","risks":["avoid naming real brands"],"experiment_hypothesis":{"statement":"Tests whether red-flag safety content produces shares.","expected_winning_metric":"saves_per_view"},"expected_winning_metric":"saves_per_view","human_texture_note":"fake invoice with changed payment route","render_backend_candidate":"python_motion","score":{"total":87,"render_allowed":true,"reject_reasons":[],"breakdown":{"problem_urgency":{"points":13,"max_points":15,"rationale":"Visible everyday fail with recognizable audience need."},"first_frame_clarity":{"points":10,"max_points":12,"rationale":"First frame shows a conflict without relying on audio."},"hook_curiosity":{"points":10,"max_points":12,"rationale":"Hook opens a mechanism loop; generic hooks lose points."},"mechanism_value":{"points":11,"max_points":12,"rationale":"Mechanism is tied to anti-example/concrete scene."},"practical_payoff":{"points":13,"max_points":15,"rationale":"Fix and takeaway are actionable."},"retention_path":{"points":8,"max_points":10,"rationale":"Before/after plus motion-led path."},"share_save_potential":{"points":9,"max_points":10,"rationale":"Save, share, and follow reasons are explicit."},"human_texture":{"points":8,"max_points":8,"rationale":"Concrete human texture, not just an enum."},"series_fit":{"points":4,"max_points":4,"rationale":"Known TrueTrace series."},"saturation_defense":{"points":1,"max_points":2,"rationale":"Saturation risk penalty applied."}}},"approval_command":"APPROVE digital-red-flags-fake-invoice-35s v2.0.0 ace02532309afd60"},{"candidate_id":"workflow-teardown-exception-path-40s","version":"v2.0.0","script_hash":"e03c639358deaaf9","media_hash":null,"series":"Workflow Teardown","audience_need":"competence","emotion_before":"annoyed","emotion_after":"equipped","hook":"Your automation didn't fail. You forgot the exception path.","first_frame":"Workflow line breaks at an unexpected email, with a red warning route.","visible_fail":"The automation works on perfect inputs but stalls on one missing field.","anti_example":"A client email missing the required address makes the automation stop silently.","concrete_scene":"","mechanism":"Happy-path automation assumes clean inputs and has no recovery route.","fix":"Add an exception path: detect missing fields, ask for clarification, then continue.","before_after":"Before: broken workflow. After: missing-field route and recovery step.","takeaway":"If there is no exception path, it is not automation. It is hope.","save_reason":"Builder can apply the exception-path checklist.","share_reason":"Every automation builder has seen happy-path failures.","follow_reason":"Follow for workflow teardowns before you automate the wrong thing.","claims":["Automation reliability depends on handling exceptions, not only happy paths."],"claim_risk":"low","ai_disclosure":"no","platform_fit":{"youtube_shorts":"strong","tiktok":"strong","instagram_reels":"medium","linkedin_manual":"manual B2B caption; check silent-autoplay readability"},"linkedin_title":"The automation check most teams skip","linkedin_caption":"If your workflow only handles the happy path, it is not reliable automation. Add an exception path before scaling it.","risks":["avoid exposing private workflows"],"experiment_hypothesis":{"statement":"Tests whether workflow teardown examples attract builders.","expected_winning_metric":"saves_per_view"},"expected_winning_metric":"saves_per_view","human_texture_note":"automation input missing required client email","render_backend_candidate":"python_motion","score":{"total":83,"render_allowed":true,"reject_reasons":[],"breakdown":{"problem_urgency":{"points":13,"max_points":15,"rationale":"Visible everyday fail with recognizable audience need."},"first_frame_clarity":{"points":10,"max_points":12,"rationale":"First frame shows a conflict without relying on audio."},"hook_curiosity":{"points":6,"max_points":12,"rationale":"Hook opens a mechanism loop; generic hooks lose points."},"mechanism_value":{"points":11,"max_points":12,"rationale":"Mechanism is tied to anti-example/concrete scene."},"practical_payoff":{"points":13,"max_points":15,"rationale":"Fix and takeaway are actionable."},"retention_path":{"points":8,"max_points":10,"rationale":"Before/after plus motion-led path."},"share_save_potential":{"points":9,"max_points":10,"rationale":"Save, share, and follow reasons are explicit."},"human_texture":{"points":8,"max_points":8,"rationale":"Concrete human texture, not just an enum."},"series_fit":{"points":4,"max_points":4,"rationale":"Known TrueTrace series."},"saturation_defense":{"points":1,"max_points":2,"rationale":"Saturation risk penalty applied."}}},"approval_command":"APPROVE workflow-teardown-exception-path-40s v2.0.0 e03c639358deaaf9"}],"blocked":[],"invalid":[],"side_effects":[],"external_calls":[]}
## CLI_TEXT
V2 Review Batch Demo
Side effects: none
External calls: none

---
## ReviewPackageV2: ai-output-autopsy-decision-summary-38s
Candidate ID: ai-output-autopsy-decision-summary-38s
Version: v2.0.0
Script Hash: 72129542b86819fd
Media Hash: -
Series: AI Output Autopsy
Audience Need: clarity
Viewer Emotion Before: confused
Viewer Emotion After: in_control

Hook: Your AI summary is useless because it has no decision target.
First Frame: Split-screen: 47-minute transcript vs. useless AI summary stamped USELESS.
Visible Fail: The summary says 'great discussion' but misses the launch decision.
Anti Example: A useless AI summary saying great discussion with no owner, blocker, or decision.
Concrete Scene: -
Mechanism: Without a decision target, AI compresses every sentence equally.
Fix: Ask for blockers, owners, risks, and next steps tied to the decision.
Before/After: Before: generic summary. After: decision evidence with owner and risk.
Takeaway: Don't ask for a summary. Ask for decision evidence.

Save Reason: Copyable sentence for the next meeting summary.
Share Reason: Colleagues recognize the useless-summary problem.
Follow Reason: Follow for small systems that make AI output useful.
Claims: Decision-targeted summaries preserve relevance better than generic summaries.
Claim Risk: low
AI Disclosure: no
Platform Fit: youtube_shorts: strong; tiktok: strong; instagram_reels: medium; linkedin_manual: manual B2B caption; check silent-autoplay readability
LinkedIn Title: A better way to brief AI meeting summaries
LinkedIn Caption: Most meeting summaries fail because they protect no decision. Name the decision first, then ask for blockers, owners, risks and next steps.
Risks: medium AI-tip saturation
Experiment Hypothesis: Tests whether decision-target AI examples drive saves.
Expected Winning Metric: saves_per_view
ScoreV2: 86/100
Score Breakdown:
- problem_urgency: 13/15 — Visible everyday fail with recognizable audience need.
- first_frame_clarity: 10/12 — First frame shows a conflict without relying on audio.
- hook_curiosity: 10/12 — Hook opens a mechanism loop; generic hooks lose points.
- mechanism_value: 11/12 — Mechanism is tied to anti-example/concrete scene.
- practical_payoff: 13/15 — Fix and takeaway are actionable.
- retention_path: 8/10 — Before/after plus motion-led path.
- share_save_potential: 9/10 — Save, share, and follow reasons are explicit.
- human_texture: 7/8 — Concrete human texture, not just an enum.
- series_fit: 4/4 — Known TrueTrace series.
- saturation_defense: 1/2 — Saturation risk penalty applied.

Approval Command: `APPROVE ai-output-autopsy-decision-summary-38s v2.0.0 72129542b86819fd`
Reject Command: `REJECT ai-output-autopsy-decision-summary-38s <reason>`
Revise Command: `REVISE ai-output-autopsy-decision-summary-38s <field> <requested change>`

---
## ReviewPackageV2: digital-red-flags-fake-invoice-35s
Candidate ID: digital-red-flags-fake-invoice-35s
Version: v2.0.0
Script Hash: ace02532309afd60
Media Hash: -
Series: Digital Red Flags
Audience Need: safety
Viewer Emotion Before: anxious
Viewer Emotion After: warned

Hook: This invoice looks safe. The trap is in line three.
First Frame: Split-screen: normal invoice vs. red flag line with urgent payment warning.
Visible Fail: The recipient trusts the logo but ignores the changed payment route.
Anti Example: A seemingly normal fake invoice where the payment route changed under urgency.
Concrete Scene: -
Mechanism: Scam messages borrow familiar context and add urgency before verification.
Fix: Check sender domain, urgency, and payment route before acting.
Before/After: Before: logo trust. After: domain, urgency, and bank route check.
Takeaway: Urgency is not proof. It is the red flag.

Save Reason: Viewer can reuse the three-check invoice rule.
Share Reason: Anyone handling invoices can use the warning.
Follow Reason: Follow for digital red flags before they cost you.
Claims: Urgency and payment-route changes are common scam warning signs.
Claim Risk: low
AI Disclosure: no
Platform Fit: youtube_shorts: strong; tiktok: strong; instagram_reels: medium; linkedin_manual: manual B2B caption; check silent-autoplay readability
LinkedIn Title: A quick invoice red-flag check for teams
LinkedIn Caption: A fake invoice does not need to be perfect. It only needs to rush you. Check domain, urgency and payment route before acting.
Risks: avoid naming real brands
Experiment Hypothesis: Tests whether red-flag safety content produces shares.
Expected Winning Metric: saves_per_view
ScoreV2: 87/100
Score Breakdown:
- problem_urgency: 13/15 — Visible everyday fail with recognizable audience need.
- first_frame_clarity: 10/12 — First frame shows a conflict without relying on audio.
- hook_curiosity: 10/12 — Hook opens a mechanism loop; generic hooks lose points.
- mechanism_value: 11/12 — Mechanism is tied to anti-example/concrete scene.
- practical_payoff: 13/15 — Fix and takeaway are actionable.
- retention_path: 8/10 — Before/after plus motion-led path.
- share_save_potential: 9/10 — Save, share, and follow reasons are explicit.
- human_texture: 8/8 — Concrete human texture, not just an enum.
- series_fit: 4/4 — Known TrueTrace series.
- saturation_defense: 1/2 — Saturation risk penalty applied.

Approval Command: `APPROVE digital-red-flags-fake-invoice-35s v2.0.0 ace02532309afd60`
Reject Command: `REJECT digital-red-flags-fake-invoice-35s <reason>`
Revise Command: `REVISE digital-red-flags-fake-invoice-35s <field> <requested change>`

---
## ReviewPackageV2: workflow-teardown-exception-path-40s
Candidate ID: workflow-teardown-exception-path-40s
Version: v2.0.0
Script Hash: e03c639358deaaf9
Media Hash: -
Series: Workflow Teardown
Audience Need: competence
Viewer Emotion Before: annoyed
Viewer Emotion After: equipped

Hook: Your automation didn't fail. You forgot the exception path.
First Frame: Workflow line breaks at an unexpected email, with a red warning route.
Visible Fail: The automation works on perfect inputs but stalls on one missing field.
Anti Example: A client email missing the required address makes the automation stop silently.
Concrete Scene: -
Mechanism: Happy-path automation assumes clean inputs and has no recovery route.
Fix: Add an exception path: detect missing fields, ask for clarification, then continue.
Before/After: Before: broken workflow. After: missing-field route and recovery step.
Takeaway: If there is no exception path, it is not automation. It is hope.

Save Reason: Builder can apply the exception-path checklist.
Share Reason: Every automation builder has seen happy-path failures.
Follow Reason: Follow for workflow teardowns before you automate the wrong thing.
Claims: Automation reliability depends on handling exceptions, not only happy paths.
Claim Risk: low
AI Disclosure: no
Platform Fit: youtube_shorts: strong; tiktok: strong; instagram_reels: medium; linkedin_manual: manual B2B caption; check silent-autoplay readability
LinkedIn Title: The automation check most teams skip
LinkedIn Caption: If your workflow only handles the happy path, it is not reliable automation. Add an exception path before scaling it.
Risks: avoid exposing private workflows
Experiment Hypothesis: Tests whether workflow teardown examples attract builders.
Expected Winning Metric: saves_per_view
ScoreV2: 83/100
Score Breakdown:
- problem_urgency: 13/15 — Visible everyday fail with recognizable audience need.
- first_frame_clarity: 10/12 — First frame shows a conflict without relying on audio.
- hook_curiosity: 6/12 — Hook opens a mechanism loop; generic hooks lose points.
- mechanism_value: 11/12 — Mechanism is tied to anti-example/concrete scene.
- practical_payoff: 13/15 — Fix and takeaway are actionable.
- retention_path: 8/10 — Before/after plus motion-led path.
- share_save_potential: 9/10 — Save, share, and follow reasons are explicit.
- human_texture: 8/8 — Concrete human texture, not just an enum.
- series_fit: 4/4 — Known TrueTrace series.
- saturation_defense: 1/2 — Saturation risk penalty applied.

Approval Command: `APPROVE workflow-teardown-exception-path-40s v2.0.0 e03c639358deaaf9`
Reject Command: `REJECT workflow-teardown-exception-path-40s <reason>`
Revise Command: `REVISE workflow-teardown-exception-path-40s <field> <requested change>`


Explanation:
**Considering commit status**

I think I need to run a git diff stat and maybe mention the commit. I'm wondering if we should commit sprint 1.5 since the user didn’t ask about committing after. It might be fine to leave it uncommitted. The note should indicate "Abschluss: changed files." However, I'll check if the old sprint commit was created and confirm if V2 CLI works. Before finalizing, I’ll run git status after everything’s complete.

todo

Full pytest, CLI-Demo ausführen, Status und Beispielpackages sammeln


Sprint-1-Stand prüfen, Tests laufen lassen, neue Dateien reviewen und committen

Sprint-1.5 Tests für Brücke, Parser, JSON, Score, Claims, Disclosure, LinkedIn, CLI schreiben und RED verifizieren

Sprint-1.5 Implementierung: V2-Brücke, Workflow, CLI, JSON, Parser, Score-Kalibrierung, Claim/Disclosure Stubs, LinkedIn, Docs


Sir, Sprint 1.5 ist erledigt — ohne 30-Tage-Batch, ohne Rendering, ohne Plattform-API, ohne Auto-Posting. V2 ist jetzt nicht mehr nur Insel, sondern operativ anschliessbar.

## Sprint-1-Commit

Erstellt:

`658c170 Add strategy spine v2 quality gates and review package`

Vor Commit geprüft:

- Branch: `strategy-refactor-v2`
- Pytest vor Commit: `180 passed`
- Review der Sprint-1-Dateien durchgeführt:
  - `autoshorts/strategy/spine_v2.py`
  - `tests/test_strategy_spine_v2.py`

## Geänderte Dateien in Sprint 1.5

Aktuell uncommitted nach Sprint 1.5:

```text
M  autoshorts/strategy/spine_v2.py
M  tests/test_strategy_spine_v2.py
?? autoshorts/claims/fact_gate.py
?? autoshorts/cli/demo_review_batch_v2.py
?? autoshorts/compliance/ai_disclosure.py
?? autoshorts/content/to_candidate_v2.py
?? autoshorts/review/approvals_v2.py
?? autoshorts/review/workflow_v2.py
?? docs/rendering_backend_options.md
?? tests/test_strategy_spine_v2_operational.py
```

## Pytest Ergebnis

Final:

```text
190 passed in 32.34s
```

## Was operativ angeschlossen wurde

### 1. V2 Candidate Bridge

Neu:

`autoshorts/content/to_candidate_v2.py`

Enthält:

- `ScriptInputV2`
- `convert_to_candidate_v2(ContentBriefV2, ScriptInputV2) -> VideoCandidateV2`

Eigenschaften:

- side-effect-free
- keine AI Calls
- keine Renderings
- keine Plattform-API
- unterstützt `linkedin_manual`
- erzeugt stabile Candidate IDs

### 2. Workflow V2

Neu:

`autoshorts/review/workflow_v2.py`

Klassifiziert `VideoCandidateV2` als:

- `ready_for_review`
- `blocked`
- `invalid`

Nutzt:

- `validate_candidate_v2`
- `StrategyScoreV2`
- `build_review_package_v2`

### 3. CLI Demo Review Batch V2

Neu:

`autoshorts/cli/demo_review_batch_v2.py`

Nutzbar über:

```bash
python -m autoshorts.cli.demo_review_batch_v2
python -m autoshorts.cli.demo_review_batch_v2 --json
```

Eigenschaften:

- maximal 3 Demo-Kandidaten
- ReviewPackageV2 als Telegram-sicherer Text
- JSON-Ausgabe verfügbar
- keine Videos
- keine Telegram-API
- keine Plattform-API
- `side_effects=[]`
- `external_calls=[]`

## ReviewPackageV2 JSON

Ergänzt:

- `to_dict()`
- `to_json()`
- `from_dict()`

Eigenschaften:

- deterministische Feldreihenfolge
- keine Timestamps
- JSON enthält:
  - Review-Daten
  - Score Breakdown
  - LinkedIn Caption
  - Approval Command
  - Claim Risk
  - AI Disclosure
  - Platform Fit

## Approval Parser V2

Neu:

`autoshorts/review/approvals_v2.py`

Pflichtformat:

```text
APPROVE <candidate_id> <version> <script_hash>
```

Geprüft wird:

- candidate_id exakt
- version exakt
- script_hash exakt
- falscher Hash blockiert
- fehlende Teile blockieren
- unklare Texte ergeben `needs_clarification`

## ScoreV2 kalibriert

Vorher waren Demo-Kandidaten zu oft `100/100`. Das ist jetzt korrigiert.

Neue Score-Verteilung der 3 Demo-Kandidaten:

- AI Output Autopsy: `86/100`
- Digital Red Flags: `87/100`
- Workflow Teardown: `83/100`

Score Breakdown ist jetzt im ReviewPackage enthalten:

- problem_urgency
- first_frame_clarity
- hook_curiosity
- mechanism_value
- practical_payoff
- retention_path
- share_save_potential
- human_texture
- series_fit
- saturation_defense

Punkteverlust sichtbar bei:

- schwacher Human Texture
- generischem Hook
- hoher Saturation
- schwachem First Frame

## Anti-Example / Human Texture

`VideoCandidateV2` ergänzt um:

- `anti_example`
- `plausible_nonsense_example`
- `concrete_scene`
- `human_texture_note`

Pflicht:

Für diese Serien ist ein Anti-Beispiel nötig:

- AI Output Autopsy
- Workflow Teardown
- Digital Red Flags
- Decision Design

Attention Traps darf stattdessen eine konkrete Alltagsszene nutzen.

Blocker:

- `human_texture != NONE`, aber `human_texture_note` leer → blockiert.

## Minimaler Claim Gate Stub

Neu:

`autoshorts/claims/fact_gate.py`

Enthält:

- `Claim`
- `ClaimType`
  - `opinion`
  - `experience`
  - `sourced_fact`
  - `risky_claim`
- `validate_claims_for_candidate(candidate)`

Regeln:

- opinion ohne Quelle erlaubt
- experience braucht `human_texture_note`
- sourced_fact braucht `source`
- risky_claim braucht `source`
- high risk ohne Quelle blockiert immer

Keine Websuche, keine APIs, keine automatische Quellenrecherche.

## Minimaler AI Disclosure Stub

Neu:

`autoshorts/compliance/ai_disclosure.py`

Enthält:

- `AIDisclosureReview`
- `DisclosureValue`
- `SyntheticMediaType`
  - none
  - text_only_assistance
  - abstract_background
  - realistic_person
  - realistic_event
  - realistic_voice
  - unclear

Regeln:

- unclear blockiert Rendering
- realistic_person / realistic_event / realistic_voice benötigen `manual_review_required=True`
- text_only_assistance kann `no` sein

Keine Plattform-API.

## LinkedIn manuell ergänzt

V2 unterstützt jetzt:

- `youtube_shorts`
- `tiktok`
- `instagram_reels`
- `linkedin_manual`

Für LinkedIn ergänzt:

- `linkedin_title`
- `linkedin_caption`
- B2B-orientierte Caption
- Hinweis über Platform Fit auf silent-autoplay/readability

Keine LinkedIn API. Kein OAuth. Kein Scheduling.

## Remotion nur als späterer Spike

Neu:

`docs/rendering_backend_options.md`

Festgehalten:

- aktueller Python/Pillow/FFmpeg-Renderer bleibt aktiv
- Remotion nur späterer Spike-Kandidat
- mögliche Vorteile: React/CSS Motion, bessere UI-Animation
- Risiken: Node/React Stack, Komplexität, Build/Deploy-Aufwand
- Entscheidung: keine Migration jetzt

Zusätzlich:

- `render_backend_candidate`
  - `python_motion`
  - `remotion_spike_candidate`

Keine Remotion-Implementierung.

## 3 Beispiel-Review-Packages, kurz

### 1. AI Output Autopsy

**Candidate:** `ai-output-autopsy-decision-summary-38s`
**Score:** `86/100`
**Status:** ready_for_review
**Hook:** Your AI summary is useless because it has no decision target.
**Anti Example:** useless AI summary with no owner, blocker, or decision.
**Approval:**
`APPROVE ai-output-autopsy-decision-summary-38s v2.0.0 72129542b86819fd`

### 2. Digital Red Flags

**Candidate:** `digital-red-flags-fake-invoice-35s`
**Score:** `87/100`
**Status:** ready_for_review
**Hook:** This invoice looks safe. The trap is in line three.
**Anti Example:** fake invoice with changed payment route under urgency.
**Approval:**
`APPROVE digital-red-flags-fake-invoice-35s v2.0.0 ace02532309afd60`

### 3. Workflow Teardown

**Candidate:** `workflow-teardown-exception-path-40s`
**Score:** `83/100`
**Status:** ready_for_review
**Hook:** Your automation didn't fail. You forgot the exception path.
**Anti Example:** client email missing required address makes automation stop silently.
**Approval:**
`APPROVE workflow-teardown-exception-path-40s v2.0.0 e03c639358deaaf9`

## Offene Punkte

- Sprint-1.5 Änderungen sind noch nicht committed.
- V2 ist per CLI nutzbar, aber bestehende V1-Review-Flows sind noch nicht vollständig migriert.
- Claim Gate ist Stub, keine Quellenrecherche.
- AI Disclosure ist Stub, keine Plattformprüfung.
- Kein Dashboard.
- Keine Analytics-Persistenz.
- Keine Visual Grammar.
- Keine Renderings.
- Keine Plattform-API.

## Vorschlag nächster kleiner Sprint

**Sprint 1.6: V2 Persistence & Audit Prep**

Klein halten:

- ReviewPackageV2 lokal als JSON-Datei speichern
- ApprovalDecisionV2 lokal auditierbar speichern
- kein Dashboard
- keine Plattform-API
- keine Renderings
- Candidate/Package Fingerprint stabilisieren
- Tests:
  - JSON write plan side-effect-free
  - explicit file-write boundary
  - approval cannot apply to changed script hash
  - package version mismatch blocks

Damit hätten wir die Grundlage für spätere manuelle Review-Historie, ohne schon Analytics oder Publishing aufzublasen.