feat(chat): invalidate saved chats on sources sync — versioned stamps, stale marker, Regenerate against the new index
This commit is contained in:
@@ -4,7 +4,9 @@ kind).
|
||||
|
||||
Drives ``scripts.import_docs`` end to end with a fake ``clone_or_pull``
|
||||
(no real git, no network) and a recording fake ``import_sources`` (no
|
||||
real DB), covering:
|
||||
real DB), covering: the phase-53 version bump is stubbed in the
|
||||
``main()`` tests the same way (the ``sources_version=`` summary token
|
||||
is asserted against the canned value).
|
||||
|
||||
- Effective sources set (phase 35: the shared resolver — stubbed here,
|
||||
keeping this file's no-real-DB style) → each git URL is cloned/pulled
|
||||
@@ -83,6 +85,20 @@ def _fake_clone_factory() -> tuple[list[tuple[str, Path]], object]:
|
||||
return calls, fake_clone_or_pull
|
||||
|
||||
|
||||
def _stub_bump(monkeypatch: pytest.MonkeyPatch) -> list[None]:
|
||||
"""Stub the phase-53 version bump (this file keeps its no-real-DB
|
||||
style for the counter — the fake import already avoids the KB
|
||||
tables). Returns the call record; the canned new version is 1."""
|
||||
bumps: list[None] = []
|
||||
|
||||
def fake_bump(session: object) -> int:
|
||||
bumps.append(None)
|
||||
return 1
|
||||
|
||||
monkeypatch.setattr(import_docs, "bump_sources_version", fake_bump)
|
||||
return bumps
|
||||
|
||||
|
||||
# --- repo_name -------------------------------------------------------------
|
||||
|
||||
|
||||
@@ -210,6 +226,7 @@ def test_main_git_sources_clone_then_import(
|
||||
monkeypatch.setattr(import_docs, "clone_or_pull", fake)
|
||||
fake_import = FakeImportSources()
|
||||
monkeypatch.setattr(import_docs, "import_sources", fake_import)
|
||||
bumps = _stub_bump(monkeypatch)
|
||||
|
||||
rc = import_docs.main([])
|
||||
|
||||
@@ -227,11 +244,19 @@ def test_main_git_sources_clone_then_import(
|
||||
for dest in (tmp_path / "bor" / "homelab", tmp_path / "bor" / "deploy"):
|
||||
assert (dest / "notes.md").is_file()
|
||||
# The final summary print reflects the import (added > 0).
|
||||
assert "added=1" in capsys.readouterr().out
|
||||
out = capsys.readouterr().out
|
||||
assert "added=1" in out
|
||||
# Phase 53: a KB-changing run bumps the sources version exactly
|
||||
# once and reports it (stubbed — this file keeps its no-real-DB
|
||||
# style for the counter, like the fake import above).
|
||||
assert len(bumps) == 1
|
||||
assert "sources_version=1" in out
|
||||
|
||||
|
||||
def test_main_cli_source_still_imports_manual_dir(
|
||||
monkeypatch: pytest.MonkeyPatch, tmp_path: Path
|
||||
monkeypatch: pytest.MonkeyPatch,
|
||||
tmp_path: Path,
|
||||
capsys: pytest.CaptureFixture[str],
|
||||
) -> None:
|
||||
manual = tmp_path / "manual"
|
||||
manual.mkdir()
|
||||
@@ -243,6 +268,7 @@ def test_main_cli_source_still_imports_manual_dir(
|
||||
monkeypatch.setattr(import_docs, "clone_or_pull", fake)
|
||||
fake_import = FakeImportSources()
|
||||
monkeypatch.setattr(import_docs, "import_sources", fake_import)
|
||||
bumps = _stub_bump(monkeypatch)
|
||||
|
||||
rc = import_docs.main(["--source", str(manual)])
|
||||
|
||||
@@ -250,6 +276,10 @@ def test_main_cli_source_still_imports_manual_dir(
|
||||
assert calls == []
|
||||
assert fake_import.calls[0]["sources"] == [manual]
|
||||
assert fake_import.calls[0]["prune"] is False
|
||||
# Phase 53: a manual --source run that changes the KB bumps exactly
|
||||
# once (the CLI is the other canonical sync path).
|
||||
assert len(bumps) == 1
|
||||
assert "sources_version=1" in capsys.readouterr().out
|
||||
|
||||
|
||||
def test_resolve_sources_mixed_git_and_local(
|
||||
|
||||
Reference in New Issue
Block a user