Status: Shipped
PR: #131
Depends on: milestones/wizard-json-object.md (PR #129),
milestones/bootstrap-timing-helpers.md (PR #130)
PR #129 required wizard bodies to be JSON objects. source_paths still
used list(data.get("source_paths") or []). A string is iterable, so
"README.md" became ['R','E','A',…] and looked like missing files
instead of a type error. A list guidance / text later called
.strip() and raised AttributeError.
Focus paths items were str()-coerced (an integer 1 became
"1").
source_paths (when present) must be a JSON array of strings. Missing
/ null still means [] (hint-path fallback). guidance,
segment_name, revision_notes, current_narration, mode,
topic_label, segment_id, and PUT text must be JSON strings
when present. Focus paths items must be strings.
- String
source_pathsreturns 400 (not char-split) - Non-string list items return 400
- List
guidance/textreturn 400 - Focus path integers return 400
-
ruff check src/ tests/ -
pytest tests/(755 passed, 1 skipped) -
docgen benchmark(no clock change; meets baseline)
- Invalid JSON still becomes
{}viaget_json(silent=True) - Wizard
except Exceptionaroundnarration_topic_label