- Created daily log entries for May 13, 14, 18, 19, 20, and 21, capturing work done, findings, and next steps. - Established a daily logs index for easy navigation of daily notes. - Developed templates for daily logs, decisions, meeting notes, people, systems, and work items to standardize documentation. - Introduced base files for filtering and displaying various types of project knowledge, including daily notes, decisions, people, systems, work items, and workstreams. - Added maps for current work, fidelity apps, and fidelity domain to enhance project navigation and context.
77 lines
3.2 KiB
Python
77 lines
3.2 KiB
Python
#!/usr/bin/env python3
|
|
|
|
from __future__ import annotations
|
|
|
|
import importlib.util
|
|
import json
|
|
import sys
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
from unittest.mock import patch
|
|
|
|
|
|
INDEXER_PATH = Path(__file__).with_name("indexer.py")
|
|
SPEC = importlib.util.spec_from_file_location("aiw_indexer", INDEXER_PATH)
|
|
indexer = importlib.util.module_from_spec(SPEC)
|
|
assert SPEC.loader is not None
|
|
sys.modules[SPEC.name] = indexer
|
|
SPEC.loader.exec_module(indexer)
|
|
|
|
|
|
class IndexerTests(unittest.TestCase):
|
|
def test_build_skips_templates_and_searches_canonical_files(self) -> None:
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
root = Path(tmp)
|
|
real = root / "workspaces" / "fidelity" / "project-knowledge" / "03-context" / "project.md"
|
|
template = root / "workspaces" / "fidelity" / "project-knowledge" / "09-templates" / "daily.md"
|
|
real.parent.mkdir(parents=True)
|
|
template.parent.mkdir(parents=True)
|
|
real.write_text("# XFlow\nDismissal lifecycle context", encoding="utf-8")
|
|
template.write_text("# XFlow\nTemplate-only text", encoding="utf-8")
|
|
|
|
with patch.object(indexer, "ROOT", root):
|
|
manifest = indexer.write_index("fidelity")
|
|
result = indexer.search_index("fidelity", "dismissal lifecycle", limit=5)
|
|
|
|
self.assertEqual(manifest["file_count"], 1)
|
|
self.assertEqual(len(result["matches"]), 1)
|
|
self.assertIn("03-context/project.md", result["matches"][0]["path"])
|
|
|
|
def test_status_reports_unindexed_profile(self) -> None:
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
root = Path(tmp)
|
|
with patch.object(indexer, "ROOT", root):
|
|
result = indexer.status("fidelity")
|
|
|
|
self.assertFalse(result["indexed"])
|
|
self.assertIn(".aiw/indexes/fidelity/project-knowledge.jsonl", result["index_path"])
|
|
|
|
def test_cli_search_payload_is_json_serializable(self) -> None:
|
|
payload = {"matches": [{"path": "workspaces/fidelity/project-knowledge/01-current/current-work.md", "score": 1.0}]}
|
|
self.assertIsInstance(json.dumps(payload), str)
|
|
|
|
def test_build_uses_workspace_json_paths(self) -> None:
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
root = Path(tmp)
|
|
config = root / "profiles" / "demo" / "workspace.json"
|
|
real = root / "workspaces" / "demo" / "project-knowledge" / "03-context" / "project.md"
|
|
config.parent.mkdir(parents=True)
|
|
real.parent.mkdir(parents=True)
|
|
config.write_text(json.dumps({
|
|
"knowledge_dir": "workspaces/demo/project-knowledge",
|
|
"index_dir": ".aiw/indexes/demo",
|
|
}), encoding="utf-8")
|
|
real.write_text("# Demo\nReusable profile memory", encoding="utf-8")
|
|
|
|
with patch.object(indexer, "ROOT", root):
|
|
manifest = indexer.write_index("demo")
|
|
result = indexer.search_index("demo", "profile memory", limit=5)
|
|
|
|
self.assertEqual(manifest["source"], "workspaces/demo/project-knowledge")
|
|
self.assertEqual(result["matches"][0]["path"], "workspaces/demo/project-knowledge/03-context/project.md")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|