p='crates/spt-store/src/serving.rs'
b=open(p,'rb').read(); crlf=b'\r\n' in b; s=b.decode().replace('\r\n','\n')
a='''/// The optional manifest short path points at the same adapter directory.'''
assert s.count(a)==1
s=s.replace(a,'''/// Where core keeps an adapter's rendered changelog: a sidecar in the
/// core-owned adapter directory (`<home>/adapters/<adapter>/changelog.html`),
/// never in the install tree — a pointer-mode adapter's source is the
/// author's own checkout and core does not write there.
// [impl->REQ-ADAPTER-CHANGELOG]
pub fn adapter_changelog_page_in(home: &Path, adapter: &str) -> PathBuf {
    home.join("adapters").join(adapter).join("changelog.html")
}

/// The served changelog page of an adapter: `…/<node>/a/<adapter>/changelog`.
// [impl->REQ-ADAPTER-CHANGELOG]
pub fn adapter_changelog_url(node: &str, port: u16, adapter: &str) -> String {
    let mut url = node_url(node, port);
    url.push_str("/a/");
    append_segment(&mut url, adapter);
    url.push_str("/changelog");
    url
}

'''+a)
if crlf: s=s.replace('\n','\r\n')
open(p,'wb').write(s.encode())
