fix(25-03): use double-quote YAML wrapping for lifecycle filter values

- Filters now contain single-quoted lifecycle values (e.g. lifecycle = 'fulltext_ready')
  which broke single-quote YAML wrapping; switched to double-quote wrapper
- Updated _render_views_section(), merge_base_views(), _build_base_yaml()
- Updated filter preservation test to use lifecycle-based filter strings
This commit is contained in:
Research Assistant 2026-05-04 11:35:17 +08:00
parent 9dc90b7a3b
commit 157fc4d0ff
2 changed files with 9 additions and 8 deletions

View file

@ -178,7 +178,7 @@ def _render_views_section(views: list[dict]) -> str:
for col in v["order"]:
lines.append(f" - {col}")
if v["filter"]:
lines.append(f" filter: '{v['filter']}'")
lines.append(f' filter: "{v["filter"]}"')
if v.get("sort"):
lines.append(" sort:")
for sort_item in v["sort"]:
@ -269,7 +269,7 @@ views:
for col in v["order"]:
rendered += f" - {col}\n"
if v["filter"]:
rendered += f" filter: '{v['filter']}'\n"
rendered += f' filter: "{v["filter"]}"\n'
else:
rendered += "\n"
if v.get("sort"):
@ -350,7 +350,7 @@ def _build_base_yaml(folder_filter: str, views: list[dict]) -> str:
for col in v["order"]:
views_yaml += f" - {col}\n"
if v["filter"]:
views_yaml += f" filter: '{v['filter']}'\n"
views_yaml += f' filter: "{v["filter"]}"\n'
else:
views_yaml += "\n"
if v.get("sort"):

View file

@ -110,16 +110,17 @@ class TestIncrementalMerge:
ensure_base_views(self.vault, self.paths, self.config, force=False)
content1 = domain_base.read_text(encoding="utf-8")
modified = content1.replace(
"filter: 'ocr_status = \"done\"'", "filter: 'ocr_status = \"done\" AND has_pdf = true'"
)
ocr_done_filter_old = "lifecycle = 'fulltext_ready' OR lifecycle = 'deep_read_done' OR lifecycle = 'ai_context_ready'"
ocr_done_filter_modified = "lifecycle = 'fulltext_ready' AND extra_check = true"
modified = content1.replace(ocr_done_filter_old, ocr_done_filter_modified)
domain_base.write_text(modified, encoding="utf-8")
ensure_base_views(self.vault, self.paths, self.config, force=False)
refreshed = domain_base.read_text(encoding="utf-8")
assert "filter: 'ocr_status = \"done\"'" in refreshed
assert "has_pdf = true" not in refreshed
assert ocr_done_filter_old in refreshed
assert ocr_done_filter_modified not in refreshed
def test_new_domain_base_is_created_on_first_run(self):
"""First run creates domain base if none exists."""