Skip to content

Kilo/mega 100 - #837

Open
dragongod73584-design wants to merge 204 commits into
calesthio:mainfrom
sora73636-stack:kilo/mega-100
Open

dragongod73584-design wants to merge 204 commits into
calesthio:mainfrom
sora73636-stack:kilo/mega-100

Conversation

@dragongod73584-design

Copy link
Copy Markdown

Summary

Related issue

Closes #

Changes

Testing

Checklist

  • The change is focused on a single logical concern.
  • I ran the relevant tests locally (make test-contracts / make test) where applicable.
  • I updated docs/README if behavior or usage changed.
  • No unrelated files (build artifacts, local config) are included in the diff.

sora73636-stack and others added 30 commits October 14, 2026 17:57
Implements the Master Plan's business-documentary pipeline: the manifest,
its 13 director skills, the artifact schemas it needs, and the two
governance gates the plan makes non-negotiable.

Pipeline
- pipeline_defs/business-documentary.yaml: topic -> research -> evidence ->
  script -> fact_check -> storyboard -> narration -> footage -> editorial
  -> compose -> qa -> publish, budget_default_usd 0.0, human gates on
  topic/evidence/script/fact_check/storyboard/footage/publish.
- skills/pipelines/business-documentary/: executive-producer plus one
  director per stage. Planning-stage and compose-stage skills carry the
  Present Both Composition Runtimes contract explicitly.

Governance
- lib/zero_cost_gate.py: strict zero-cost gate. Unknown cost, unknown
  route, unapproved paid action or unavailable tool -> BLOCKED. Failure
  taxonomy (auth/billing/rate_limit/transport/no_results) stays distinct;
  reroute_allowed() is always False, so an auth or billing failure stops
  the run instead of silently switching vendor. Adds search_stats_summary
  for per-query result classes.
- lib/artifact_ids.py: resolves every evidence/source/scene/asset ID a
  downstream artifact references and reports each dangling reference with
  stage, artifact, field and value. A failed or blocked QA report cannot
  produce a publish package.

Schemas (additive; existing artifacts unaffected)
- New: topic_brief, evidence_ledger, fact_check_report,
  narration_manifest, alignment_report, qa_report, publish_package.
- Extended: script.sections[].evidence_ids; scene_plan search_queries /
  visual_class / diagram_spec; asset_manifest author / attribution /
  license_url / sha256 / search_query / selection_reason / qa_verdict;
  research_brief.sources[] source_id and provenance fields; optional
  run_id / created_at on the six artifacts the pipeline produces.

Tests
- tests/factory/: 135 tests covering the manifest contract, artifact
  schemas, ID resolution, the zero-cost gate, a full artifact chain
  checkpointed through lib.checkpoint, and honest capability reporting.
- tests/contracts/test_runtime_presentation_contract.py: the planning-stage
  lookup now falls back to a pipeline's first stage, so a pipeline that
  names it something other than proposal/idea cannot escape the contract.

Verification: tests/factory 135 passed; tests/contracts 1244 passed,
7 skipped; tests/lib 58 passed; tests/tools 687 passed; tests/backlot
37 passed; tests/styles 15 passed; tests/qa 2 skipped. ffmpeg/ffprobe were
missing from this environment and were installed (apt) before the runs,
which also cleared two pre-existing environment-caused failures.

Zero-cost mode verified: no paid API call, no generation, no upload. Only
free operations ran (apt/pip installs, local diagram render).
…eal audio

Problem: the tool passed the `model` input straight to `piper --model`, and
`python -m piper.download_voices <voice>` writes the voice into the current
directory unless --download-dir is given. A bare name like
`en_US-lessac-medium` therefore only resolved when the process happened to
run from the directory holding the voice; everywhere else piper exited with
"Unable to find voice" and the tool surfaced a bare exit code with no fix.

Evidence: PiperTTS().execute({'model': 'en_US-lessac-medium'}) failed with
"ValueError: Unable to find voice: en_US-lessac-medium" from a working
directory that did not contain the voice files.

Minimal fix: resolve_voice_model() searches $PIPER_VOICES_DIR, then
~/.local/share/piper/voices, then the cwd, and raises an error that names
the download command and the directories searched. install_instructions
and the input schema description document the same order.

Regression test: tests/tools/test_piper_tts.py pins explicit-path priority,
each search directory, the actionable failure message, and real synthesis
(skipped with a reason when no voice is installed).
tests/factory/test_narration_real_audio.py synthesizes real per-section
narration, measures durations with ffprobe, hashes the exact input text and
builds a schema-valid narration_manifest from the measured values — the
Master Plan's "duration comes from the audio file, not a WPM estimate" rule.

Verification: tests/tools/test_piper_tts.py 9 passed;
tests/factory/test_narration_real_audio.py 6 passed;
tests/factory + tests/tools/test_piper_tts.py + tests/contracts →
1390 passed, 7 skipped, exit 0. Real artifact: 232492-byte WAV,
pcm_s16le, 22050 Hz mono, duration=5.270930, clean full decode.

Risk: additive — an explicit path keeps its previous behaviour; only the
bare-name case changes, and it previously failed outright.
…s 1-11)

- Fix stale checkpoint path: copy all 10 stage checkpoints into the canonical
  nested directory lib.checkpoint._checkpoint_path resolves to
- Update test_pilot_artifacts.py to assert the completed run: topic approved
  (human_approved=True), all stages 1-11 checkpointed as completed
- Update OPENMONTAGE_RESUME.md: P1 marked complete, rendered MP4 documented,
  Stop Point/Next Action reflect the finished pilot
- Append 2026-10-16 entry to OPENMONTAGE_WORK_LOG.md

Pilot artifacts and checkpoints are gitignored by design (projects/).
…load decision, OpenVids refs, NTRS probe)

- TOOLING_DECISIONS.md: new §8 table auditing the remaining stages
  (primary-document research, claim ledger, storyboard ID validation,
  packaging, upload, analytics review) — existing tool path or MISSING,
  license, $0 check, unknown; §9 upload decision (manual YouTube Studio
  publish; API upload only as private draft later; no OAuth, no credentials);
  §10 reference-only OpenVids (bazodev/open-vids, Apache-2.0) license-record
  and trusted-source fields worth copying into asset_record, no code copied;
  §11 Milestone B NTRS client probe item (no client in repo, not written;
  direct reachability attempted, timed out -> ERROR not zero results).
- VIABILITY_PROBE_2026-10-16.md: Probe 4 NTRS client probe item recorded
  (not executed; network timeout -> ERROR, not zero results).
No code changes, no installs, no process/lock changes. Docs only.
… skills

- TOOLING_DECISIONS.md §12: D1 audit (40-min time-box; docs/skills-in-.kilo +
  /tmp scripts only; no paid routes/keys/process-lock changes). Preflight clean;
  ffmpeg 6.1.1 filters all present (sidechaincompress, loudnorm, acrossfade, xfade,
  amix, alimiter, ebur128); python libs observed (numpy, onnxruntime, piper-tts 1.8.0).
  Voice-license table: Piper engine GPL-3.0-or-later (dist-info METADATA); Piper voice
  en_US-lessac-medium UNKNOWN (sidecar has dataset:lessac, no license field); Kokoro/
  Chatterbox UNKNOWN (not installed). Piper smoke test on CPU: audio 26.98 s, wall 5.74 s,
  RTF 0.21 (~4.7x real-time), sample in /tmp, needs human listening, not a commercial-use
  approval (voice license UNCONFIRMED). stable-ts 2.19.1 installed (attempt 2 after 300s
  timeout); word_timestamps=True -> 82/80 reference words (~100%) in ~7.3 s (RTF 0.27);
  known-text result.align not present in API (not exercised). piper fallback: 0% word
  timestamps. Audio finishing prototype /tmp/opencode/d1_finished.wav: voice + synthetic
  440 Hz bed -> sidechaincompress -> amix -> two-pass loudnorm (I=-14/TP=-1.5/LRA=11);
  ebur128 verify -13.8 LUFS integrated, -5.2 dBFS true peak, LRA 1.2 LU. No blockers;
  unstable/unknowns recorded.
- EDITING_DOCTRINE.md (new): editing doctrine ported read-only from agamm/video-agent (MIT,
  pinned cc00d28..., LICENSE read; rugelees fork not consulted; not installed; no yt-dl/
  vfx-edit/Remotion). Rules mapped to schemas/artifacts/edit_decisions.schema.json
  (per-cut reason, J-L splits, pacing lint shot variation >= ~15% INITIAL GUESS, pause gaps,
  cut-in-silence, beat-snap, transitions, captions --clean, audio ducking, universal op
  order); thresholds marked INITIAL GUESSES. MUSIC_POLICY.md (new): pilot uses NO music
  unless license evidence stored; allowed sources; required record fields
  (source_url/license_text/author/download_date/sha256/commercial_use_allowed/
  modification_allowed/attribution/license_url); Content ID risk UNKNOWN.
- .kilo/skills/{cutting-rhythm,edl-edit,audio-edit}/SKILL.md (new): Linux-adapted, pinned to
  upstream commit cc00d2815869cbf2d708426a5082612f0c3b4dbf; no mlx-whisper, no
  h264_videotoolbox, no uv run video-agent CLI.
- OPENMONTAGE_RESUME.md / OPENMONTAGE_WORK_LOG.md: D1 stop point, next action, work-log entry.
No code, repo installs, model runs, or lock changes (stable-ts to system site-packages only).
- Add four Kilo subagents: editor, qa-reviewer, evidence-checker, footage-scout (.kilo/agents/)
- Add docs/openmontage/QA_SPEC.md (hard checks, qa_report.json schema, INITIAL GUESS thresholds, gate mapping, added-value metrics)
- Add docs/OPENMONTAGE_PLAN_V3_2.md (niche, max-3-runtime stack, asset_record fields, stage 0 viability gate, Go/No-Go gates, publishing, speed, zero-secrets, milestone order, open risks)
- Mark master plan SUPERSEDED by v3.2; append v3.2 changelog entry
- Update AGENTS.md: agent roster, permissions summary, orchestrator rule
- Append dated entry to docs/OPENMONTAGE_WORK_LOG.md

No application code, no installs, no network except reading Kilo docs.
…nt topic probe

- Add docs/openmontage/RIGHTS_MODEL.md (rights_basis enum, fail-closed source_policy_us_gov conditions, flags NEEDS_REVIEW, unknown=>not usable)
- Add docs/openmontage/audit/C1_RIGHTS_REPORT.md (re-classification of Boeing 720/Shuttle clips; X-15/XB-70/Helios probes; NTRS primary-doc attempt; stage 0 gate recompute; qa-reviewer PASS)
- Append dated C1 entry to docs/OPENMONTAGE_WORK_LOG.md

All 5 topics NO-GO on footage (binding constraint: NASA API exposes no license; unreviewed flags); NTRS network ERROR (primary docs unverifiable). No code, installs, or lock changes.
- Add docs/openmontage/audit/C2_RIGHTS_EVIDENCE_REPORT.md (reason-code breakdown, NTRS retest persistent ERROR, rights evidence pass on 8 clips, NASA exceptions re-quoted, proposed gate wording)
- Add docs/openmontage/audit/REVIEW_QUEUE.md (per-clip evidence + human checklist + preview/contact-sheet paths)
- Append dated C2 entry to docs/OPENMONTAGE_WORK_LOG.md

REJECT=29, NEEDS_REVIEW=8, usable=0; all 5 topics NO-GO on footage. NTRS network ERROR persistent (HTTP 000 x4). No code, installs, or lock changes. Media previews in gitignored projects/ (not committed).
…agnosis

- Add docs/openmontage/audit/C3_RIGHTS_DIAGNOSIS_REPORT.md (R1 sub-reason breakdown, NTRS persistent ERROR x4, candidate sweep Shuttle/Edwards+X-15, gate check, pivot recommendation)
- Rewrite docs/openmontage/audit/REVIEW_QUEUE.md (corrected NEEDS_REVIEW list of 3 clips, owner checklist, third-party credit=REJECT rule)
- Append dated C3 entry to docs/OPENMONTAGE_WORK_LOG.md

R1 was stricter than written RIGHTS_MODEL.md (source_policy_us_gov needs no license statement); 25 clips reclassified. Third-party credit clips → REJECT. NTRS TCP 443 persistent block (HTTP 000 x4), local network OK. All 5 topics NO-GO; pivot recommendation: no topic reaches 10 usable clips. No code, installs, or lock changes. Media previews in gitignored projects/ (not committed).
- Add docs/openmontage/audit/EVIDENCE_CID_PRIMARY_DOCS.md (6 CID primary docs, EXTERNALLY_VERIFIED_METADATA)
- Add docs/openmontage/audit/C4_CID_FOCUS_REPORT.md (clip classification, gate recompute, owner review pack, proposed insignia wording owner decision)
- Append docs/openmontage/audit/REVIEW_QUEUE.md (CID NEEDS_REVIEW list + owner checklist; contact sheets blocked)
- Append dated C4 entry to docs/OPENMONTAGE_WORK_LOG.md

CID gate: 11 usable-pending-review clips (>=10), 6 primary docs (>=3) -> counts met but NEEDS_OWNER_REVIEW (flags unreviewed, NTRS unreachable). CID 1984 = slice/pilot candidate; X-15 + Shuttle/Edwards fallbacks. No code, installs, or lock changes. Media previews in gitignored projects/ (not committed; downloads blocked).
- Add tools/qa/qc.py QC module (stdlib + ffmpeg/ffprobe only, no network):
  ffprobe_streams, full_decode (-f null), blackdetect, freezedetect,
  silencedetect, ebur128 (ffmpeg 6.x summary parse), duration_vs_script,
  subtitle_sync, credits_complete, claim_ids, rights_basis, added_value.
  Fail-closed (tool missing -> BLOCKED); absent optional inputs -> NOT_RUN;
  verdict treats NOT_RUN as not-passed.
- Add tests/tools/test_qc_tool.py (TDD, 11 tests, ffmpeg lavfi fixtures in
  tmp dirs, no committed media): all pass.
- Add config/qc_thresholds.json with INITIAL GUESSES from QA_SPEC.md.
- Output qa_report.json per QA_SPEC schema (job_id, check_id, status,
  evidence, measured_value, threshold, tool_version, timestamp). No secrets.
- Smoke test on pilot MP4: verdict FAILED (ebur128 I=-17.1 LUFS outside
  -14+/-2, TP=-0.0 > -1.5). Internal tool test only, not publishability.
- Wire .kilo/agents/qa-reviewer.md + AGENTS.md roster row.
- Append dated Q1 entry to docs/OPENMONTAGE_WORK_LOG.md.

No new dependencies, no network, no process/lock changes. ruff unavailable
(used py_compile).
- Diagnosed archive.org download: works with curl -L (HTTP 302 redirects); earlier C4 '0 bytes/HTML' was missing -L, not access restriction/blocking
- Real metadata file lists obtained for NIX-EM-0004-01, NIX-EM-0004-02, NIX-LV-1998-00090, NIX-LV-1998-00091 (10/10 network requests used)
- Downloaded preview derivatives to gitignored projects/c5_review (~2.6MB, under cap, never committed); built ffmpeg contact sheets for 2 clips
- Printed + wrote numbered owner list of 11 archive.org item URLs to REVIEW_QUEUE.md
- Added NASA Facts FS-2009-02-003-CID to EVIDENCE_CID_PRIMARY_DOCS.md (primary docs now 7)
- Sequential-ID analysis: NIX-LV-1998-00090…00098 = 9 of 10 implied parts, multi-camera angles of same impact, likely temporal overlap
- Append dated C5 entry to work log

Docs only; no code, installs, or lock changes. Media in gitignored projects/ not committed.
…decision summary

- Built ffmpeg contact sheets (~12 frames) for all 11 CID clips in gitignored projects/c5_review/ (~13 MB, under 200 MB cap, never committed)
- Per-clip ffprobe table: all 320x240; NIX-EM-* no audio (2 clips), NIX-LV-* audio (9 clips); total ~286s
- Coverage map: 4 distinct narrative beats covered (remote piloting, impact, fire, other); 3 beats zero (preparation, flight, aftermath); proposed (not applied) beat-based viability gate wording
- Voice decision summary from TOOLING_DECISIONS.md D1: Piper voice license UNKNOWN (blocks commercial publication until resolved); Kokoro UNKNOWN (not installed)
- Updated owner list durations to ffprobe-measured values
- Append dated C6 entry to work log

Docs only; no code, installs, or lock changes. Media in gitignored projects/ not committed.
…C tool

- Add tools/audio/finish_audio.py: two-pass loudnorm (measure then apply with
  measured values) + alimiter true-peak safety + optional sidechaincompress
  ducking. Targets I=-14, TP=-1.5, LRA=11 from config/qc_thresholds.json
  (INITIAL GUESSES). Fail-closed (BLOCKED on unparsable measurement); outputs
  pcm_s16le wav (f32le->aac and s16->aac-after-limiter broken in this build).
- Add tests/tools/test_finish_audio.py (TDD, 5 tests, ffmpeg lavfi fixtures in
  tmp dirs, no committed media): voice loudness+true-peak, music ducking,
  no-music, mono/stereo+22050/44100 Hz, failure-path BLOCKED. All 5 pass.
- Add docs/openmontage/AUDIO_FINISHING.md: what the tool does, proposed
  integration point (EDITING_DOCTRINE step 5 audio normalize/music bed, not
  wired yet), voice license blocker from TOOLING_DECISIONS.md.
- Smoke test on pilot MP4 audio into /tmp (original untouched): BEFORE
  I=-17.2 LUFS/TP=-0.0 dBFS (clipping); AFTER I=-15.3 LUFS/TP=-4.5 dBFS; QC
  ebur128 PASS + full_decode PASS. Internal test only, not publishability.
- Append dated D2 entry to docs/OPENMONTAGE_WORK_LOG.md.

No new deps, no network, no model downloads, no process/lock changes.
py_compile OK; ruff unavailable (py_compile used).
…dence, install, CPU test

- Add docs/openmontage/VOICE_DECISION.md: Kokoro selected (Apache-2.0 weights);
  license evidence table (kokoro/misaki Apache-2.0, Kokoro-82M Apache-2.0,
  Piper lessac UNKNOWN, Lessac Blizzard 2013 dataset URL); training-data
  caveats (CC BY Koniwa/SIWIS, synthetic origin UNKNOWN); owner sign-off
  required; Piper lessac blocked; voice license gate status
- Add docs/openmontage/KOKORO_TTS_PROPOSAL.md: KokoroTTSTool at
  tools/audio/kokoro_tts.py, integration point = EDITING_DOCTRINE step 5 audio,
  no pipeline changes in V
- Update docs/openmontage/TOOLING_DECISIONS.md: §12.2 voice-license table
  (Kokoro row, Piper voice blocked, note); §14 Milestone V summary
- Append dated V entry to docs/OPENMONTAGE_WORK_LOG.md

Verified: kokoro 0.2.2 installed (binary-only; spacy source build failed on
Python 3.14), weights kokoro-v1_0.pth (~313 MB) to /tmp/hf-cache (<=600 MB
cap, gitignored, not committed), espeak-ng missing (warning only), 3 voices
synthesized (RTF 1.58-1.75 CPU), QC ebur128 on each sample, finish_audio on
af_heart (I=-15.0 LUFS/TP=-4.4 PASS), native aac mux works (FINISHED MP4
I=-15.0/TP=-4.3 PASS). No pipeline code, no lock/process changes, no paid
routes/keys. Docs only committed.
- Add docs/openmontage/KAGGLE_BRIDGE_DESIGN.md: job protocol (job.json,
  kernel-metadata.json, run.py), single private runner kernel with serialized
  jobs, per-job wav + manifest.json (sha256, duration, library versions,
  license facts), push -> poll with backoff + total timeout -> output ->
  verify sha256/manifest -> run tools/qa/qc.py -> result JSON; fail-closed
  table; UNVERIFIED constraints (GPU 30 h/week, 12 h session, phone
  verification, internet toggle); secrets rule; disk rule.
- Reachability: kaggle.com + api.kaggle.com reachable (HTTP/2 404 on root,
  service up); 4/6 network requests used.
- CLI: kaggle 2.2.4 installed (1.3 MB); push supports --accelerator/-t but
  NOT --no-run; status/output/list take kernel URL suffix; status terminal
  strings UNVERIFIED.
- Auth test STOPPED: KAGGLE_API_TOKEN not set (reported yes/no + length only,
  no token value handled). Owner must create Codespaces secret and restart.
- Append dated K0 entry to docs/OPENMONTAGE_WORK_LOG.md.

Docs only; no app code, no pipeline changes, no process/lock changes, no paid
routes/keys, no token value printed/logged/committed.
- Add tools/kaggle_bridge/kaggle_bridge.py: KaggleBridgeTool(BaseTool) with
  build_job_folder, push, poll, fetch_output, verify, run_qc, run_job commands.
  build_job_folder generates kernel-metadata.json from Kernel metadata template written to: /workspaces/OpenMontage/kernel-metadata.json
  output (no guessed field names). push uses -t/--timeout and --accelerator
  (no --no-run). poll uses backoff + total timeout. verify recomputes sha256
  vs manifest. Fail-closed; token never in args/result JSON.
- Add tests/tools/test_kaggle_bridge.py (TDD, 16 tests, fake kaggle executable,
  stdlib only, no network): all pass.
- Live smoke job on private kernel forts845/of-bridge-runner (CPU only, no
  GPU/internet): push OK (2.4s), status KernelWorkerStatus.COMPLETE, output
  hello.txt+manifest.json fetched, sha256 verified against manifest, verdict
  PASS. Result JSON at /tmp/k1_result.json (not committed).
- Title must slugify to id suffix else 409 Conflict; enable_internet=false
  confirmed works on private CPU kernel.
- Update docs/openmontage/KAGGLE_BRIDGE_DESIGN.md with observed facts
  (status strings, title/slug constraint, internet toggle) and work log.
- No GPU, no datasets, no Kaggle Secrets, no third-party wrappers, no process/
  lock changes. Token never printed/logged/committed/passed on command line.

Docs + code + tests committed; media in /tmp not committed.
- Add docs/openmontage/VOICE_BAKEOFF_LICENSES.md: license evidence table for
  Chatterbox Turbo/base (MIT/MIT), Maya1 (Apache-2.0/Apache-2.0), Kokoro-82M
  (Apache-2.0/Apache-2.0); all three PASS the license gate (none excluded).
  Record training-data statements, watermarking (Chatterbox Perth), reference
  audio requirement (optional for Chatterbox; not required for Maya1/Kokoro),
  VRAM needs, commercial-use statements, and ASR checker licenses
  (faster-whisper MIT, openai-whisper MIT; Whisper weights not separately
  licensed in repo).
- Add docs/openmontage/MASTER_RUN_STATE.md: phase tracking P1 DONE, P2-P7
  PENDING; global rules recap.

Docs only; no code, installs, network downloads, or process/lock changes.
AGENTS.md (user modification) and pre-existing untracked files left
uncommitted and preserved.
- Add docs/openmontage/evidence/CID_CLAIM_LEDGER.md: 16 claims (CID-01..CID-16) with sources, source-type tags, verification status (FS claims AGENT_VERIFIED_TEXT after fetching NASA Facts PDF; TM-only claims per stated provenance, TM-4084 not re-fetched)
- Add docs/openmontage/slice/CID_SLICE_SCRIPT_v0.md: 8 sentences (S1-S8) with claim_ids, DRAFT/NOT_PUBLISHABLE; S5/S7/S8 flagged SINGLE_SOURCE; S8 BLOCKED until CID-13 second source
- Add docs/openmontage/slice/CID_SLICE_CLAIM_IDS.json: 9 sentence-claim_id pairs
- Run QC claim_ids check: PASS (9/9 sentences have claim_id, threshold 100%)
- NASA Facts FS-2009-02-003-CID.pdf fetched (reachable) -> FS-derived claims AGENT_VERIFIED_TEXT
- Update docs/openmontage/MASTER_RUN_STATE.md: P2 DONE

Docs only; AGENTS.md (user modification) and pre-existing untracked files preserved.
- Add tools/audio/tts_kaggle.py (KokoroTTSTool): license gate blocks
  non-permissive engines (piper en_US-lessac-medium REFUSED), Kaggle bridge
  primary with local Kokoro CPU fallback when bridge BLOCKED, finish_audio +
  QC verify on finished wav, token never logged/passed
- Add config/voice.json: engine config with license statuses; piper blocked
- Add tests/tools/test_tts_kaggle.py (5 pass): license refuse, bridge
  blocked→fallback, bridge success route, kokoro license ok, missing inputs
- Fix tools/audio/finish_audio.py: handle loudnorm 'input_i: -' (silent
  audio → -60.0) so float() doesn't fail
- py_compile OK

Docs/code only; AGENTS.md (user modification) and untracked skills/docs
dirs preserved uncommitted.
- Add docs/openmontage/footage/SOURCE_REGISTRY.md: source registry for 19
  sources with probe results (NASA/IA/Wikimedia/LoC/NARA/DVIDS keyless
  probes); rights/credit field exposure; MISSING adapters list
  (NASA SVS, DVIDS, Open Beelden, Europeana, Smithsonian, NPS, CDC,
  Vimeo CC, Videezy)
- Verify all 16 existing stock_source adapters load via auto-discovery
  (12 available incl. nasa/archive_org/wikimedia; 4 key-required
  unavailable: pexels/pixabay_video/unsplash/videvo)
- Update MASTER_RUN_STATE.md: P5 DONE

Docs only; AGENTS.md (user modification) and untracked dirs preserved.
- Add docs/openmontage/GLOBAL_CHECK_2026-10-17.md: phase table (P1-P7), 32 tests passed, QC qa_report.json 12/12 PASS, ffprobe summary, repo hygiene, open gates (voice license, rights flags, single-source claims, insignia decision, monetization, Content ID)
- Add docs/openmontage/OWNER_ACTIONS.md: numbered owner steps (voice license decision, clip rights review, single-source claims, insignia clearance, monetization, Kaggle GPU retry)
- Update docs/openmontage/MASTER_RUN_STATE.md: P7 DONE

MASTER RUN complete: P1 DONE, P2 DONE, P3 BLOCKED (Kaggle GPU quota), P4 DONE, P5 DONE, P6 DONE (QC 12/12 PASS), P7 DONE

Docs only; AGENTS.md (user modification) and untracked dirs preserved.
- consistency-ab-test run.py: switch IP-Adapter to official diffusers API
  (load_ip_adapter + set_ip_adapter_scale + ip_adater_image=PIL.Image),
  drop manual ip_adapter_image_embeds construction; non-OOM render errors
  now fail the test
- PROJECT_PLAN.md: record official IP-Adapter API failure on T4/diffusers
  0.37.0 (mat1/mat2 1664 vs 1280 shape mismatch, zero usable adapter
  frames); lock fallback consistency method — baseline SDXL Base 1.0 +
  detailed text-prompt discipline (O8 variant «а»); add §4.8 first assembled
  pilot scene (§1, frame + Kokoro af_heart narration, Remotion MP4) and
  remaining work (9 sections, subtitles, transitions, EDL)
- remotion-composer: new PilotScene1 composition (frame full-bleed +
  narration audio), registered in Root; renders 1920×1080 h264/aac 83s clip
- add pilot-frame-1b Kaggle job (SDXL baseline frame for §1 beat S001)
…fallback; IP-Adapter not viable

- EPISODE_IMAGE_PIPELINE.md: locked model changed from FLUX.2-klein-4B to
  SDXL Base 1.0; added section 10 'Консистентность персонажа — фиксированный
  метод для пилота' documenting baseline SDXL Base 1.0 + detailed fixed
  text-prompt per frame; IP-Adapter Plus/Plus Face tested on Kaggle T4 via
  official API (diffusers 0.37.0) — failed (embedding dim mismatch 1664 vs
  1280, 0 usable frames); adapter deferred to post-pilot timebox, not a blocker
- flux2-klein-test/test_protocol.json: full test protocol per official BFL
  recommendations (steps 4, guidance 1.0, 1024x1024 + 1792x1024, max 4
  references, narrative line-art prompts, 4 tests, 6 consistency categories,
  line-art quality criteria, master reference re-passed every frame)
- tools/kaggle_bridge/jobs/pilot-render/: new Kaggle job generating one image per
  pilot section (§1–§10), SDXL Base 1.0, fixed text-prompt consistency,
  no IP-Adapter. All 10/10 rendered OK, peak VRAM 5196 MB, ~4.5 min T4 time.
- docs/PROJECT_PLAN.md: added section 7.5 with all 10 section renders, known
  consistency risks, and klein 4B blocked note.
- docs/openmontage/image_gen/EPISODE_IMAGE_PIPELINE.md: locked model set to
  SDXL Base 1.0, character consistency method documented (§10).
- NOTE: klein 4B NOT used — blocked on diffusers 0.37.0 (missing components).
  SDXL Base 1.0 is the documented locked model per EPISODE_IMAGE_PIPELINE.md.
- tools/kaggle_bridge/jobs/pilot-render/audio/: 10 WAV files generated via Kokoro
  af_heart (24 kHz), total 1099.9s (18:20), one per pilot section §1–§10
- remotion-composer/src/PilotDraft.tsx: new composition — one generated image per
  section, full-bleed, synchronized with Kokoro audio, no transitions/effects
  (draft for owner review)
- remotion-composer/src/Root.tsx: registered PilotDraft composition
- docs/PROJECT_PLAN.md: added §7.6 (audio results), §7.7 (Remotion draft), §7.8
  (remaining work for final version including open music track decision)
- NOTE: video render not committed (too large, ~2.5h render time through Remotion)
  Output path: remotion-composer/out/pilot-draft.mp4
  Music track: OPEN DECISION per HANDOFF document
- PROJECT_PLAN.md: Klein 4B не исключена; метод консистентности =
  нативный multi-reference Klein 4B; IP-Adapter не нужен; SDXL Base 1.0 =
  резерв; фаза 2 переведена на flux2-klein-4b; раздел 5.3 скорректирован
  (ошибка была в FluxPipeline, а не в Klein)
- LICENSE_EVIDENCE.md: FLUX.2-klein-4B (Apache-2.0) — базовая модель пилота
- RUN_STATE.md: этапы K0-K4 добавлены как PENDING; заметки обновлены
- HOST_CHARACTER.md, VISUAL_STYLE_GUIDE.md: созданы пре‑requisites для K1
- pilot-render/images/ -> pilot-render/images_sdxl/ (SDXL-кадры сохранены,
  не удалены)
- RESULTS.md: пути к кадрах обновлены на images_sdxl/
- run.py: signature Flux2KleinPipeline, bf16→float16 фолбэк, 8 кандидатов 1280x720,
  contact_sheet_master.jpg 2x4, логирование времени/VRAM/dtype
- kernel-metadata.json, job.json: конфиг ядра для Kaggle T4
- WAITING_OWNER: владелец называет номер кандидата (1-8) для master.png
- Kaggle-ядро COMPLETE: forts845/k1-k2-host-candidates-flux-2-klein-4b
- 8 кандидатов 1280x720, bfloat16, peak VRAM 11.15 ГБ, все OK
- contact_sheet_master.jpg 2x4 с номерами (58.98 KB)
- WAITING_OWNER: владелец называет номер кандидата (1-8) для master.png
- scripts/assemble_pilot_final.py: 10 клипов 1280x720 (zoompan 3-5%,
  чередующееся направление, вход увеличен 2x), xfade=fade 0.5с на стыках,
  субтитры srt встроены фильтром subtitles (крупный без засечек,
  нижняя треть), аудио concat без усиления
- Музыка: assets/music/ пуст -> финал без музыки, отмечено в RUN_STATE.md
- Выход: remotion-composer/out/pilot-final.mp4 (не в git, артефакт)
- ffprobe: 1099.8s, h264 1280x720@30fps, aac 24kHz mono, 59 MB
- Аудио пик ~-89 dB (без клиппинга), 3 кадра на стыках извлечены,
  субтитры встроены в видео
- RUN_STATE.md: S12 добавлен как DONE, заметки обновлены
- shot_list.json: 78 бита по 12-18с на 10 разделов, id, start/end, текст,
  промпт Клейн, host_in_frame=false (в сценарии нет ведущего)
- Оценка: ~90с/кадр, 78 кадров = 117 мин GPU (<2ч, но dziel на 3 ядра)
- Ядро 1: разделы 1-4 (35 кадров), ядро 2: 5-7 (26), ядро 3: 8-10 (17)
- Каждое ядро: signature Flux2KleinPipeline, bf16->float16 фолбэк,
  детекция NaN/чёрного кадра, логирование времени/VRAM/dtype
- K3: shot_list.json (78 битов 12-18с, 10 разделов), 3 Kaggle ядра
  (секции 1-4/5-7/8-10), все COMPLETE, bfloat16, peak VRAM 11.15 ГБ,
  78 кадров OK без NaN/чёрных, frames_klein/sNN_BNNN.png
- K4: 7 контактных листов 4x3 с номерами (кадры 1-78), каждый <2 МБ
- K5/S12: финальная сборка v4 — 78 клипов Klein, жёсткая склейка concat,
  субтитры subtitles_bits.srt (324 блока, 2-5с, ≤42 симв./стр, шрифт 38px,
  нижняя треть, обводка 2px), аудио мастериング
  (acompressor+alimiter+loudnorm I=-16:TP=-1.5:LRA=7),
  ebur128: I=-25.6→-15.7 LUFS, TPK=-4.9→-1.5 dBFS, max_volume -0.7 dB
- Выход: remotion-composer/out/pilot-final.mp4 (58.6 MB, 1099.8s,
  h264 1280×720@30fps, aac, субтитры встроены, без музыки, не в git)
- RUN_STATE.md: K3, K4, K5 marked DONE, S12 updated
- K5 (competitor analysis) added to RUN_STATE.md as PENDING
- K5a-K5e sub-steps marked BLOCKED
- docs/openmontage/research/competitor_notes.md created with measurement method template
- K5a: MCP YouTube not found, yt-dlp not installed — blocked pending owner choice
- K5b: waiting for 3-5 competitor video links from owner
- Ожидает владельца обновлено: K5b (ссылки на конкурентов)
- .kilo/kilo.jsonc: добавлен "plugin": ["@dietrichgebert/ponytail"] (официальный способ для Kilo/OpenCode)
- ~/.config/ponytail/config.json: {"defaultMode": "off"} — режим не активен по умолчанию
- docs/PROJECT_PLAN.md §11.4: документировано установка, версия, техническое поведение, область применения
- Область: только задачи редактирования кода, НЕ исследования/тестирование. Включается /ponytail full
- Сетевой доступ в рантайме не требуется, скриптов при установке не выполняется
…екстура на одежде)

- HOST_CHARACTER.md: чиби-пропорции (голова 1:2 к телу, короткие конечности), глаза крупные круглые с бликом, одежда с лёгкой текстурой потёртости только на ткани, обновлён текстовый блок персонажа
- VISUAL_STYLE_GUIDE.md: текстура только на одежде (не на коже/лице/фоне), чиби-пропорции, крупные круглые глаза с бликом, правило no gradients сохранено, текстурный фон запрещён
- Старые правила (толстый чёрный контур, чистый фон, два тона шейдинга) без изменений
- Документы обновлены (чиби-пропорции, глаза с бликом, текстура на одежде)
- Новый Kaggle-ядро k1k2-host-candidates-v2 с промптом, синхронизированным с VISUAL_STYLE_GUIDE.md
- contact_sheet_master_v2.jpg не перезаписывает v1
- WAITING_OWNER: выбрать кандидата из v2 листа
- scripts/assemble_pilot_final.py: canonical сборка pilot-final.mp4
  (78 кадров Klein + аудио + субтитры, без hardcoded /tmp путей)
- scripts/audit_pilot_artifacts.py: инвентаризация артефактов перед
  сборкой (PASS: 78 кадров, 10 аудио, 324 субтитров, 7 контакт-листов)
- scripts/package_youtube.py: пакет метаданных YouTube
  (5 заголовков, 19 тегов, 10 глав, статус draft)
- tools/qa/qc_pilot_final.py: технический QC (ffprobe, full_decode,
  blackdetect, silencedetect, ebur128)
- docs/PROJECT_PLAN.md: раздел 13 'Путь к автономной фабрике' с
  категориями A (агент сам), B (одно решение владельца), C (постоянное
  участие владельца, никогда не автоматизируется)
- docs/RUN_STATE.md: этапы S13-S15

Ожидает решений владельца: B1 (номер мастер-референса ведущего),
B1a (одобрение 78 кадров), B2 (файл музыки из YouTube Audio Library).
Категория C (лицо ведущего, музыка, ссылки競еров, имя, голос, темп)
— никогда не автоматизируется.
- HOST_CHARACTER.md: зафиксировано точное описание кандидата №6 (якорь-референс) как обязательное в каждом промпте
- pilot-render/ref/master_v3_anchor.png: сохранён якорь-референс (candidate_06 из v2)
- k3-v3-host-variations: Kaggle-ядро с image= параметром Flux2KleinPipeline (native multi-reference Klein identity), 6 вариаций поз (анфас, профиль, 3/4, крупный план лица), загружает якорь с GitHub raw URL
- contact_sheet_master_v3.jpg — вариации ОДНОГО персонажа
- WAITING_OWNER: показать результат; если консистентность плывёт — обсудить fallback на SVG-риг
- tools/qa/qc_pilot_final.py: исправлен ebur128 (-af вместо -vf), парсинг
  TPK regex (TPK: X dBFS, берётся максимум), loudness измеряется корректно
- docs/RUN_STATE.md: этапы S16-S18 (верификация category A, assets/music/,
  статус Ponytail)
- assets/music/README.md: курс для владельца — куда класть файл музыки (B2)

Все скрипты категории A прогоны: assemble_pilot_final.py (--help OK),
package_youtube.py (youtube_package.json сгенерирован), qc_pilot_final.py
(все проверки работают), audit_pilot_artifacts.py (PASS).

Ожидает решений владельца: B1 (номер мастер-референса, contact_sheet_master_v2.jpg),
B1a (одобрение 78 кадров, 7 контакт-листов contact_sheets_klein/),
B2 (файл музыки в assets/music/).
- Kaggle-ядро COMPLETE: forts845/k3-v3-host-variations-flux-2-klein-4b
- Якорь: кандидат №6 из v2 (pilot-render/ref/master_v3_anchor.png)
- 6 вариаций poses (анфас, профиль, 3/4, крупный план) — 6/6 OK
- float16 + sequential_cpu_offload: peak VRAM 2.11 ГБ (было 11.15 ГБ)
- ~30с на кадр, contact_sheet_master_v3.jpg 2x3 (50 KB)
- WAITING_OWNER: показать результат v3; если консистентность плывёт — fallback на SVG-риг
…, категории A/B/C

- scripts/run_factory.py: главный оркестратор фабрики (13 стадий с чекпоинтами,
  resume, fail-closed, zero-cost gate, категория A/B/C граница)
- pipeline_defs/factory.yaml: манифест конвейера factory (13 стадий, явное
  human_approval_default только для release_gate)
- docs/openmontage/FACTORY_ARCHITECTURE.md: архитектура фабрики (10 слоёв L1-L10,
  границы категории A/B/C, критерии готовности)

Стадии 1-8 проходят успешно на пилоте (zero_cost_gate → speculative_gate).
Стадия 9 (render) идёт — 78 кадров Klein через ffmpeg с zoompan (~10 мин).
Стадии 10-13 ждут завершения рендера и решений владельца (B1, B1a, B2).

Категория C (лицо, музыка, конкуренты, имя, голос, темп) не затрагивается.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants