You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
IMPROVEMENTS.md: Post-v1 roadmap (v2) consolidating the agreed v2
direction — Project Manager (persisted, chunk-addressable projects with
location/prop/continuity bibles), ComfyUI pipeline integration
(draft/production workflows), Settings/Options page, pywebview desktop
bundle, and a llama-server sidecar engine, plus prerequisites
(schema_version, stable chunk IDs, core/h3_spec.py) and the later
story/book → screenplay direction.
next-steps.md: handoff notes for the next session (status snapshot, loose
ends, blocking prerequisites, locked v2 decisions, verification commands).
Joint (compound) speaker IDs (B14, guide §4.4): a cue like ELENA AND MARA (also &, /, +) now splits into individual bible entries
and renders a compound ID — Elena and Mara (S1,S2) say <d>…</d>.
(characters.split_joint, used by build_bible, chunker, fallback, ref_manifest); the validator now checks every ID in a compound group.
pyproject.toml: [project.scripts] entry point (script2prompt), project
URLs, readme, keywords, and Python 3.11–3.14 classifiers.
.github/workflows/ci.yml: unittest matrix on Python 3.11–3.14, a
zero-dependency import check, and an optional-extras job (pdf/web/dev + ruff).
pipeline.write_pack(..., clean=True) and a CLI --clean flag: stale pack
files (fixed export names + chunk_*.txt) are removed before writing.
schema_version on persisted artifacts: manifest.json and reference_manifest.json now stamp pipeline.SCHEMA_VERSION (1). New pipeline.migrate_artifact / pipeline.load_artifact upgrade pre-versioning
artifacts (missing field = version 0) through registered _MIGRATIONS and
pass newer versions through untouched, so an older loader cannot corrupt a
newer writer's output. First slice of the v2 persistence prerequisites.
Changed
Dependency policy docs (AGENTS.md, PROJECT_PLAN.md §3.2) now state the
locked v2 stance explicitly: zero-dep core is the default and a directive,
not a fanatical rule; a 1.0 desktop bundle may add heavier optional
extras while core stays dependency-free.
parsers/plaintext.py: a slugline-looking line inside a dialogue block is now
kept as dialogue instead of ending the scene (dialogue-state context).
core/fallback.py: the unsupported-mode error now explains that build()
handles T2VA/I2VA/FL2VA/L2VA and R2V is built by core/r2v.py (the stale
"arrives in Milestone 3" message is gone).
Docs: test-count references updated (124 → 149) in PROJECT_PLAN.md and TESTING.md; README.md documents --clean, the console entry point, and
joint speakers.
TESTING.md: .spmd is listed with .fountain (the Fountain parser), not as
plain-text (B25).
Version 0.10.0 -> 0.11.0 (second deep-audit bug-fix release).
Fixed
validator._check_speakers: compound speaker groups ((S1,S2)) are now
checked ID-by-ID against the bible rather than only the first ID.
parsers/__init__.py: decode inputs as utf-8-sig so a leading UTF-8 BOM no
longer corrupts the first line (B16).
ref_manifest.propose: a wordless chunk with no slugline now synthesizes a
placeholder environment subject instead of emitting an empty subject_definitions section that the validator rejects (B17).
fallback._is_voiceover: normalize each parenthetical independently so MARA (V.O.) (CONT'D) (and (V.O.) (O.S.)) still render as a voiceover
(B18).
characters.py: joint action intros (MARA AND LEO (30s)) split into
individual characters that share the traits, and all-caps mentions no longer
swallow connectors (ELENA AND) (B19).
characters.title: alphanumeric designators keep their casing (C3PO, R2D2) instead of becoming C3Po/R2D2-style mixed case (B20).
parsers/fountain.py: a slugline-looking line inside a dialogue block is kept
as dialogue (matching plaintext) (B21).
config.load: invalid numeric env overrides (S2P_TEMPERATURE/S2P_TIMEOUT)
raise a friendly error naming the variable (B22).
pipeline.reference_manifest: returns an empty checklist for T2VA instead of
raising no picture slots for mode: T2VA (B23).
r2v.build: a blank style falls back to Live-action, cinematic rather
than emitting uses a style (B24).