v0.19.3
Fixed
-
Handoff YAML rejected folded block scalars, blaming indentation.
closeout_summary: >-— valid YAML, and the natural choice for a wrapped prose field — failed withInvalid YAML indentation near: <first line of the text>. The parser handled only|and|-, so>-fell through to the plain-scalar path and the block body underneath it then failed the indentation check, producing an error that pointed at whitespace when the actual cause was the scalar style. That sends you re-indenting instead of changing one character. It matters because a handoff is usually written by a model and a model reaching for a wrapped prose field reaches for>-; this was found during the 0.19.2 surface verification by writing a handoff by hand and hitting it immediately. The parser now supports both block styles and all three chomping indicators —|,|-,|+,>,>-,>+— with real folding semantics: a single line break between content lines becomes a space, a run of k blank lines becomes k newlines, and more-indented lines keep their breaks so a folded block can still hold an indented snippet. Literal blocks parse exactly as before;|+is newly supported alongside them. The shippedtemplates/phase-handoff.yamlnote, which said only literal blocks were supported, now names both. -
/codecarto-guideleft the model stalled instead of informed. It read the guide, tried to obey it, found nocodecarto_*tools, concluded the MCP server was unavailable, and asked which repository and which pipeline to use rather than doing anything. Two causes, both in the Pi wrapper. The guide arrived as a bare user message — the handler queued the document throughpi.sendUserMessagewith no preamble, so ~200 lines of imperative instructions landed as if the user had typed them, with no task attached; a model given instructions and no task either starts driving immediately or stalls asking what to do, and the reported session did both in turn. And the guide is written for MCP: it says to callcodecarto_status,codecarto_next,codecarto_validateandcodecarto_complete, and that "every tool takes an absolutecwd" — but the Pi extension registers no tools at all, only slash commands the user invokes, so there was nothing to call and their absence read as a broken server. The drive loop differs too, which made following the guide wrong twice over:/codecarto-nextexecutes the phase itself as an isolated sub-agent and then auto-validates and auto-completes it, so the guide's hand-written execute → handoff → validate → complete loop does not describe a Pi session at all. The guide text is unchanged —agent-skill/stays the single source andcore/guide.tsstill serves it verbatim to every surface — and the framing lives in the wrapper, where per-surface logic belongs: a reference-not-a-task header, the document embedded whole and unmodified, then a Pi-surface addendum covering the tool-to-command mapping (and the two library tools that have no Pi equivalent), the absentcwdargument, and the auto-validate/auto-complete loop. MCP needed no change; a tool result is framed by being one. Verified live with the same model and the same guide bytes, framing the only variable: before, it committed to thecodecarto_*loop and asked for a repo path and pipeline; after, "I've read the CodeCartographer guide — ready when you are", and asked how to run a phase it answers/codecarto-nextand explains that validation and completion are automatic here.