Consumers: See upstream-dogfood.md — notes for
repositories that install docgen and maintain their own demo bundle. The
library no longer ships an in-repo dogfood; consumers are the integration test
of record.
Agent stop: The YAML-key / fail-closed-key hunting program (PRs
#73–#149, agent …2ccd) is closed. Shipping one typed-config
milestone does not authorize opening the next key as a new PR. Batch
isomorphic leftovers or stop. See the session contract in AGENTS.md and
.cursor/rules/no-factory-loop.mdc.
Active: none (human-assigned only). Do not invent the next
milestones/*.md or PR because this line is empty.
Shipped:
- grok-stt-words-list.md —
Grok STT
words/segmentsmust be JSON arrays of objects (#149). - scene-spec-layout-gaps.md — scene-spec layout gaps must not coerce YAML bools to 1.0 (#148).
- scene-spec-bool-numerics.md —
scene-spec
wait_word/run_time/ sizes must not coerce YAML bools (#147). - grok-stt-start-end.md —
Grok STT word/segment
start/endmust be JSON numbers, not bools (#146). - validate-stream-probe.md — validate stream/drift checks must not trust ffprobe stdout when the probe exits non-zero (#145).
- whisper-prompt-caps.md — timing-enrichment whisper count caps must not coerce bools to 1 (#144).
- pages-ffprobe-returncode.md — pages duration badges must not trust ffprobe stdout when the probe exits non-zero (#143).
- merge-settings-numerics.md — narration / scene-generation merge must not coerce bool temperature or model values (#142).
- wizard-narration-mode.md —
unknown wizard / LLM narration
modemust not silently generate (#141). - merge-settings-str-lists.md —
narration / scene-generation merge must not
str()hint and path lists (#140). - wait-until-word-start.md —
wait_until_wordmust raise on a corrupt Whisperstart(#139). - yaml-visual-map-keys.md —
yaml-generatemust reject integervisual_mapkeys and non-stringsegments.allitems (#138). - story-end-probe.md —
story_endmust fail when the mp3 duration cannot be probed (#137). - timing-sync-probe.md —
timing_syncmust fail when the mp3 duration cannot be probed (#136). - ffprobe-returncode.md —
ffprobe duration probes must honor exit status; image compose needs
-t(#135). - timing-start-end.md —
timing.jsonword/segmentstart/endmust be JSON numbers (#134). - wizard-path-ref.md —
wizard
open-bundlepathandtool/updaterefmust be JSON strings (#133). - wizard-json-parse.md —
wizard JSON bodies must parse; garbage JSON must not look like
{}(#132). - wizard-source-paths.md —
wizard
source_pathsmust be a string array; prose fields must be strings (#131). - bootstrap-timing-helpers.md —
Manim
_load_timinghelpers must fail closed on corrupttiming.json(#130). - wizard-json-object.md — wizard POST/PUT bodies must be JSON objects; bool fields must be booleans (#129).
- wizard-state-segments.md —
wizard
.docgen-state.jsonsegmentsmust be a mapping of objects (#128). - timing-inner-lists.md —
timing.jsonwords/segmentsmust be JSON arrays of objects (#127). - timing-stem-objects.md —
timing.jsonper-stem values must be JSON objects (not lists/scalars) (#126). - cli-segments-all.md —
narration-generate --all/scene-spec-generate --allmust useConfig.segments_all(missingallfalls back todefault) (#125). - empty-segments-all.md —
explicit empty
segments.all: []must not fall through tosegments.defaultin yaml-generate (#124). - concat-ffmpeg-timeout.md — concat must not leave a truncated full-demo mp4 after ffmpeg timeout or failure (#123).
- generation-zero-values.md —
temperature: 0/max_whisper_segment_text_chars: 0must not be replaced byordefaults (#122). - compose-ffmpeg-timeout.md — compose must not treat a timed-out ffmpeg mux as success (#121).
- visual-beats-numeric.md —
visual_beats/default_visual_beatsmust be YAML numbers (#120). - validation-enable-bools.md — validation / manim enable flags must be YAML booleans (#119).
- validation-numeric-tunables.md — nested validation OCR / layout / av_sync / timing / story_end numerics must be YAML numbers (#118).
- generation-numeric-tunables.md — narration / scene-generation temperature and context-byte tunables must be YAML numbers (#117).
- hint-segment-create-bool.md —
hint
docgen.segment.createmust be a YAML boolean (#116). - numeric-config-tunables.md — timestamps / compose / manim / validation numeric tunables must be YAML numbers (#115).
- discovery-bool-flags.md —
discovery.auto_visual_map/merge_hint_segmentsmust be YAML booleans (#114). - wizard-default-guidance.md —
wizard.default_guidancemust be a YAML string at config load (#113). - visual-map-sources.md —
visual_mapmixedsourcesmust be a YAML list of strings (#112). - pages-config-strings.md —
pages.docs_dir/ title / extra_links must be typed (#111). - generation-segment-strings.md — per-segment narration / scene-generation prompts must be YAML strings (#110).
- path-config-strings.md —
env_file/repo_root/dirs.*must be YAML strings (#109). - visual-map-field-strings.md —
visual_maptype/scene/source andsegment_namesvalues must be YAML strings (#108). - generation-model-strings.md —
narration_from_source/manim_scene_generationmodel and prompt keys must be YAML strings (#107). - manim-font-quality.md —
manim.font/quality/manim_pathmust be YAML strings (#106). - ai-timestamp-strings.md —
ai.provider/timestamps.engine/tts.languagemust be YAML strings (#105). - image-generation-strings.md —
image_generation.model/size/qualitymust be YAML strings (#104). - image-empty-bytes.md —
image-generatemust not write empty PNG bytes as success (#103). - hint-front-matter-yaml.md —
Invalid
hints/*.mdYAML front matter must failyaml-generate, not skip hintvisual_mapwiring (#102). - av-sync-anchor-keywords.md —
validation.av_sync.anchor_keywordsmust be a mapping of keyword rows (#101). - wizard-prompt-strings.md —
wizard.system_prompt/llm_modelmust be YAML strings at config load (#100). - tts-empty-audio.md —
TTS must not succeed with an empty mp3;
tts.model/voice/instructionsmust be YAML strings (#99). - av-sync-scene-spec.md —
Unreadable
*.scene.yamlmust failav_sync, not fall back to transcript nouns (#98). - layout-check-errors.md — Manim layout check crashes must fail, not skip as success (#97).
- manim-unsafe-unicode.md —
manim.unsafe_unicodemust be a YAML list at config load (#96). - validation-list-keys.md —
validation.ocr.error_patterns,av_sync.visual_types, and narration-lint deny pattern lists must be YAML lists (#95). - wizard-exclude-lists.md —
wizard.exclude_patterns/scan_extensionsmust be string lists (#94). - timestamps-merge-stems.md — CLI
timestampsmerges stems into existingtiming.jsoninstead of wiping extra keys (#93). - asset-graph-timing.md — wizard freshness must
not treat corrupt
timing.jsonas a missing timestamps entry (#92). - yaml-generate-mappings.md —
yaml-generatemerge/discover must not replace a list/scalarvisual_mapor narration/manim block with{}(#91). - context-path-lists.md —
pages.segmentsand narration/manim context path lists must be typed (#90). - timing-json-parse.md — corrupt
timing.jsonmust not be treated as empty words at compile/validate (#89). - lint-empty-narration.md — lint / validate fail when narration has no spoken prose after markdown stripping (#88).
- segment-id-strings.md — unquoted YAML
01must not become integer segment ids (#87). - visual-map-row-types.md —
visual_maprows andpages.segmentsentries must be mappings; unknown composetypefails closed (#86). - timestamps-empty-words.md — heading-only / empty-word timestamps fail closed (#85).
- concat-segment-lists.md — concat targets must be lists of segment ids; pages extra_links items must be mappings (#84).
- config-mapping-keys.md — nested
docgen.yamlmapping/list keys must not traceback; lint/compose empty-all must not succeed (#83). - manim-lint-config.md — missing
scenes.pyfails validate; invaliddocgen.yamlisConfigError; TTS empty-all fails (#82). - wizard-narration-paths.md — wizard
generate-narration must not drop missing sources; timestamps must not wipe
corrupt
timing.json(#81). - validate-fail-closed.md — validate narration/timing skips, empty Manim lists, missing context paths.
- scene-compile-pace.md — paced
scene-compilerequires timing words;yaml-generatekeeps committed Manim rows. - timestamps-fail-closed.md — timestamps,
concat, Anthropic
base_url, and remaining CLI/wizard silent-success paths. - pipeline-fail-closed.md —
generate-all/yaml-generatefail closed (preserve still/recording wiring; no silent compose/validate skip). - multi-host-ai-hardening.md — Cloud /
local Cursor / Claude Code keys,
--repoclone cache, fail-closed chat.
Not in this milestone: archived slides / i18n / Playwright / Embabel roadmaps under archive/ (Playwright was removed from the product; Embabel is a future sketch).
Archived roadmaps: archive/ — older write-ups kept for history; not the day-to-day execution list.
Session notes (ad hoc): e.g. declarative Manim work under
docs/session-notes*.md when present.