fix: clean up some problems from the implementations

This commit is contained in:
2026-07-21 19:46:57 +02:00
parent 71d998f68e
commit 812de13f62
6 changed files with 16 additions and 7 deletions

View File

@@ -20,7 +20,7 @@ The project is under active development. Core blogging workflows are broadly ava
- Local MCP automation over stdio or a localhost-only stateless HTTP endpoint, with project resources, read/search/count tools, inert write proposals, explicit desktop approval, and opt-in Claude Code/Copilot configuration.
- A fully localized Ratatui terminal workspace, available locally through `bds-cli tui`/`BDS_MODE=tui` and remotely through authenticated SSH shell sessions, with shared post/template/script editing and publishing, project/search/command overlays, settings, tags, Git, reports, task progress, live multi-client locale updates, and airplane-mode AI gating.
- `bds-cli server` hosting the shared application engines over a loopback-by-default, public-key-only SSH service, with restrictive private key material, live authorization updates, terminal-session transport, CLI-change synchronization, ordered domain/task events, and native desktop remote-project selection.
- bDS2-compatible Markdown/Liquid rendering with native macros, canonical multilingual and flat page routes, recursive menus, calendar archives, feeds, a root hreflang sitemap, Pagefind, and incremental site generation through cancellable section task groups.
- bDS2-compatible Markdown/Liquid rendering with native macros, descriptive category archive titles, canonical multilingual and flat page routes, recursive menus, calendar archives, feeds, a root hreflang sitemap, Pagefind, and incremental site generation through cancellable section task groups.
- Navigable generated-route preview in the app or system browser, with draft database overlays and published filesystem content.
- Optional one-shot AI translation, description, analysis, taxonomy, and language-detection operations run in background tasks with editor-level waiting indicators, using independent online and local OpenAI-compatible profiles. Each profile has secure credentials, persistently discovered chat/title/image model selections, explicit tool/vision overrides, chat testing, and status-bar airplane-mode routing.
- Persistent conversational AI with safe Markdown, streamed and cancellable responses, model/session/token tracking, bounded project-aware blog tools, and localized conversation management in the Chat workspace. Allowlisted render tools add persistent native cards, charts, forms, lists, metrics, mind maps, tables, and tabs without executing assistant-provided HTML or JavaScript.

View File

@@ -915,7 +915,9 @@ fn terminate_child(child: &mut std::process::Child) {
let _ = child.kill();
}
fn prepend_tool_paths(_command: &mut Command) {
fn prepend_tool_paths(command: &mut Command) {
#[cfg(not(target_os = "macos"))]
let _ = command;
#[cfg(target_os = "macos")]
{
let mut paths = vec![

View File

@@ -674,6 +674,12 @@ fn build_language_routes(
for (category, records) in category_posts {
let slug = slugify(&category);
let display_name = category_settings
.get(&category)
.and_then(|settings| settings.title.as_deref())
.map(str::trim)
.filter(|title| !title.is_empty())
.unwrap_or(&category);
routes.extend(paginated_route_specs(
&records,
per_page,
@@ -682,7 +688,7 @@ fn build_language_routes(
language_root_prefix(language, metadata)
),
page_title.clone(),
Some(json!({"kind": "category", "name": category})),
Some(json!({"kind": "category", "name": display_name})),
category_settings
.get(&category)
.and_then(|settings| settings.list_template_slug.clone()),

View File

@@ -609,7 +609,7 @@ fn generation_respects_category_list_settings_and_writes_bundled_images() {
db.conn(),
&make_list_template(
"featured-list",
"FEATURED:{% for day_block in day_blocks %}{% for post in day_block.posts %}[{{ post.title }}|{{ post.show_title }}]{% endfor %}{% endfor %}",
"FEATURED:{% if archive_context %}{% if archive_context.kind == 'category' %}{{ archive_context.name }}{% endif %}{% endif %}:{% for day_block in day_blocks %}{% for post in day_block.posts %}[{{ post.title }}|{{ post.show_title }}]{% endfor %}{% endfor %}",
),
)
.unwrap();
@@ -629,7 +629,7 @@ fn generation_respects_category_list_settings_and_writes_bundled_images() {
(
"featured".to_string(),
CategorySettings {
title: None,
title: Some("Featured Archive".to_string()),
render_in_lists: true,
show_title: false,
post_template_slug: None,
@@ -692,7 +692,7 @@ fn generation_respects_category_list_settings_and_writes_bundled_images() {
let featured_html =
std::fs::read_to_string(dir.path().join("category/featured/index.html")).unwrap();
assert!(featured_html.contains("FEATURED:[Featured Post|false]"));
assert!(featured_html.contains("FEATURED:Featured Archive:[Featured Post|false]"));
let rss = std::fs::read_to_string(dir.path().join("rss.xml")).unwrap();
assert!(rss.contains("hidden-post"));

View File

@@ -60,7 +60,7 @@ fn preview_post_target() -> &'static Mutex<Option<String>> {
#[cfg(target_os = "macos")]
fn title_bar_metrics() -> Value {
json!({"macos_left_inset": 72})
serde_json::json!({"macos_left_inset": 72})
}
#[cfg(not(target_os = "macos"))]

View File

@@ -28,6 +28,7 @@ surface PublishingPreferencesSurface {
}
value CategoryRenderSettings {
title: String?
render_in_lists: Boolean
show_title: Boolean
post_template_slug: String?