75 conn: sqlite3.Connection,
78 logical_state_hash: str,
79 published: Optional[str] =
None,
81 """Render the lean V4 ``ROADMAP.md`` (header + body) as deterministic bytes."""
83 header = build_generated_header(
84 source_hash=source_hash,
85 logical_state_hash=logical_state_hash,
86 renderer=RENDERER_LEAN,
88 version = store_read.selected_roadmap_version(conn)
107 lines.extend([
"", *toc])
108 lines.extend([
"", *body])
109 lines.extend([
"", *generated_footer(
"roadmap")])
110 _dbg(
"OC_CHAT.MAIN", func, f
"lean rendered version={version}", 2)
111 return "\n".join(lines).rstrip() +
"\n"
122 code = store_read.current_phase_code(conn)
124 return [store_read.ALL_COMPLETE_LINE]
126 (row
for row
in store_read.milestone_rows(conn)
if row.phase_code == code),
None
128 if milestone
is None:
129 return [store_read.ALL_COMPLETE_LINE]
130 done = f
"{milestone.done}/{milestone.total}" if milestone.total
else "—"
131 label = f
"{milestone.phase_code} — {section_render.escape(milestone.title)}"
135 if milestone.total > 0:
136 anchor =
_slug(f
"{milestone.phase_code} — {milestone.title}")
137 label = f
"[{label}](#{anchor})"
139 f
"> ### 📍 We are here now → {label}",
140 f
"> {done} sub-phases complete · {section_render.escape(milestone.purpose)}",
list[str] _toc(list[str] body)
Optional[dict] _params(Optional[str] value)
str _version_line(Optional[str] version, Optional[str] published)
list[str] _render_manifest_sections(sqlite3.Connection conn, str file_kind)
list[str] _current_block(sqlite3.Connection conn)