Add daily logs and templates for project fidelity
- 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.
This commit is contained in:
@@ -56,8 +56,8 @@ Current fields:
|
||||
|
||||
```json
|
||||
{
|
||||
"knowledge_dir": "project-knowledge",
|
||||
"inbox_dir": "ai/inbox",
|
||||
"knowledge_dir": "workspaces/fidelity/project-knowledge",
|
||||
"inbox_dir": "workspaces/fidelity/inbox",
|
||||
"index_dir": ".aiw/indexes/fidelity"
|
||||
}
|
||||
```
|
||||
|
||||
@@ -17,8 +17,8 @@ ROOT = Path(__file__).resolve().parents[2]
|
||||
|
||||
|
||||
DEFAULT_WORKSPACE = {
|
||||
"knowledge_dir": "project-knowledge",
|
||||
"inbox_dir": "ai/inbox",
|
||||
"knowledge_dir": "workspaces/{profile}/project-knowledge",
|
||||
"inbox_dir": "workspaces/{profile}/inbox",
|
||||
"index_dir": ".aiw/indexes/{profile}",
|
||||
}
|
||||
|
||||
@@ -52,12 +52,12 @@ def resolve_path(raw: str | None, *, profile: str, root: Path | None = None, fal
|
||||
|
||||
def knowledge_dir(profile: str, root: Path | None = None) -> Path:
|
||||
config = load_workspace_config(profile, root=root)
|
||||
return resolve_path(config.get("knowledge_dir"), profile=profile, root=root, fallback="project-knowledge")
|
||||
return resolve_path(config.get("knowledge_dir"), profile=profile, root=root, fallback="workspaces/{profile}/project-knowledge")
|
||||
|
||||
|
||||
def inbox_dir(profile: str, root: Path | None = None) -> Path:
|
||||
config = load_workspace_config(profile, root=root)
|
||||
return resolve_path(config.get("inbox_dir"), profile=profile, root=root, fallback="ai/inbox")
|
||||
return resolve_path(config.get("inbox_dir"), profile=profile, root=root, fallback="workspaces/{profile}/inbox")
|
||||
|
||||
|
||||
def index_dir(profile: str, root: Path | None = None) -> Path:
|
||||
|
||||
@@ -23,8 +23,8 @@ 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 / "project-knowledge" / "03-context" / "project.md"
|
||||
template = root / "project-knowledge" / "09-templates" / "daily.md"
|
||||
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")
|
||||
@@ -48,7 +48,7 @@ class IndexerTests(unittest.TestCase):
|
||||
self.assertIn(".aiw/indexes/fidelity/project-knowledge.jsonl", result["index_path"])
|
||||
|
||||
def test_cli_search_payload_is_json_serializable(self) -> None:
|
||||
payload = {"matches": [{"path": "project-knowledge/01-current/current-work.md", "score": 1.0}]}
|
||||
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:
|
||||
|
||||
@@ -34,12 +34,12 @@ class ProfileTests(unittest.TestCase):
|
||||
self.assertEqual(profile.inbox_dir("demo", root=root), root / "workspaces" / "demo" / "inbox")
|
||||
self.assertEqual(profile.index_dir("demo", root=root), root / ".aiw" / "indexes" / "demo")
|
||||
|
||||
def test_defaults_preserve_current_root_paths(self) -> None:
|
||||
def test_defaults_use_isolated_workspace_paths(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp)
|
||||
|
||||
self.assertEqual(profile.knowledge_dir("missing", root=root), root / "project-knowledge")
|
||||
self.assertEqual(profile.inbox_dir("missing", root=root), root / "ai" / "inbox")
|
||||
self.assertEqual(profile.knowledge_dir("missing", root=root), root / "workspaces" / "missing" / "project-knowledge")
|
||||
self.assertEqual(profile.inbox_dir("missing", root=root), root / "workspaces" / "missing" / "inbox")
|
||||
self.assertEqual(profile.index_dir("missing", root=root), root / ".aiw" / "indexes" / "missing")
|
||||
|
||||
def test_relative_to_root_handles_external_paths(self) -> None:
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Read local Mattermost mirror evidence for agent prompts.
|
||||
|
||||
The proxy mirror under ai/inbox/mattermost-mirror is the preferred Mattermost
|
||||
The proxy mirror under the active profile inbox is the preferred Mattermost
|
||||
evidence source when present. This reader gives commands a stable way to load a
|
||||
small focused view and fall back to the older sync artifacts when the mirror is
|
||||
not available.
|
||||
|
||||
@@ -56,7 +56,7 @@ class ContextMCPTests(unittest.TestCase):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp)
|
||||
profile = root / "profiles" / "fidelity" / "profile.md"
|
||||
current = root / "project-knowledge" / "01-current" / "current-work.md"
|
||||
current = root / "workspaces" / "fidelity" / "project-knowledge" / "01-current" / "current-work.md"
|
||||
profile.parent.mkdir(parents=True)
|
||||
current.parent.mkdir(parents=True)
|
||||
profile.write_text("# Fidelity", encoding="utf-8")
|
||||
@@ -79,7 +79,7 @@ class ContextMCPTests(unittest.TestCase):
|
||||
def test_communication_latest_reads_bounded_records(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp)
|
||||
latest = root / "ai" / "inbox" / "mattermost-mirror" / "latest.jsonl"
|
||||
latest = root / "workspaces" / "fidelity" / "inbox" / "mattermost-mirror" / "latest.jsonl"
|
||||
latest.parent.mkdir(parents=True)
|
||||
for index in range(3):
|
||||
latest.write_text("", encoding="utf-8") if index == 0 else None
|
||||
@@ -96,7 +96,7 @@ class ContextMCPTests(unittest.TestCase):
|
||||
def test_communication_latest_filters_to_profile_channels_by_default(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp)
|
||||
latest = root / "ai" / "inbox" / "mattermost-mirror" / "latest.jsonl"
|
||||
latest = root / "workspaces" / "fidelity" / "inbox" / "mattermost-mirror" / "latest.jsonl"
|
||||
profile_config = root / "profiles" / "fidelity" / "context-sources.json"
|
||||
latest.parent.mkdir(parents=True)
|
||||
profile_config.parent.mkdir(parents=True)
|
||||
@@ -122,7 +122,7 @@ class ContextMCPTests(unittest.TestCase):
|
||||
def test_communication_latest_can_include_all_channels(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp)
|
||||
latest = root / "ai" / "inbox" / "mattermost-mirror" / "latest.jsonl"
|
||||
latest = root / "workspaces" / "fidelity" / "inbox" / "mattermost-mirror" / "latest.jsonl"
|
||||
profile_config = root / "profiles" / "fidelity" / "context-sources.json"
|
||||
latest.parent.mkdir(parents=True)
|
||||
profile_config.parent.mkdir(parents=True)
|
||||
@@ -146,8 +146,8 @@ class ContextMCPTests(unittest.TestCase):
|
||||
def test_project_search_skips_templates(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp)
|
||||
real = root / "project-knowledge" / "03-context" / "project.md"
|
||||
template = root / "project-knowledge" / "09-templates" / "daily.md"
|
||||
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("Important XFlow context", encoding="utf-8")
|
||||
@@ -167,7 +167,7 @@ class ContextMCPTests(unittest.TestCase):
|
||||
index.parent.mkdir(parents=True)
|
||||
index.write_text(json.dumps({
|
||||
"chunk_id": "abc",
|
||||
"path": "project-knowledge/03-context/project.md",
|
||||
"path": "workspaces/fidelity/project-knowledge/03-context/project.md",
|
||||
"heading": "XFlow",
|
||||
"text": "Dismissal lifecycle sequencing for XFlow",
|
||||
"mtime": 1.0,
|
||||
@@ -185,7 +185,7 @@ class ContextMCPTests(unittest.TestCase):
|
||||
def test_memory_hybrid_search_falls_back_without_index(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp)
|
||||
real = root / "project-knowledge" / "03-context" / "project.md"
|
||||
real = root / "workspaces" / "fidelity" / "project-knowledge" / "03-context" / "project.md"
|
||||
real.parent.mkdir(parents=True)
|
||||
real.write_text("Important XFlow context", encoding="utf-8")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user