Sync ctx a706ed5 (part 3)
Browse filesGitHub commit: a706ed5fdeafbf649456f4a9c05443d2e8d1585e
src/tests/test_ctx_init.py
CHANGED
|
@@ -1010,6 +1010,7 @@ def test_runtime_graph_install_without_full_entities_is_not_full_install(
|
|
| 1010 |
def test_graph_install_force_prunes_stale_generated_files(
|
| 1011 |
tmp_path: Path,
|
| 1012 |
monkeypatch,
|
|
|
|
| 1013 |
) -> None:
|
| 1014 |
archive = _write_graph_archive(tmp_path)
|
| 1015 |
claude = tmp_path / "home"
|
|
@@ -1031,6 +1032,9 @@ def test_graph_install_force_prunes_stale_generated_files(
|
|
| 1031 |
"--force",
|
| 1032 |
"--model-mode", "skip",
|
| 1033 |
]) == 0
|
|
|
|
|
|
|
|
|
|
| 1034 |
assert not stale.exists()
|
| 1035 |
assert (claude / "skill-wiki" / "entities" / "skills" / "current.md").is_file()
|
| 1036 |
|
|
|
|
| 1010 |
def test_graph_install_force_prunes_stale_generated_files(
|
| 1011 |
tmp_path: Path,
|
| 1012 |
monkeypatch,
|
| 1013 |
+
capsys,
|
| 1014 |
) -> None:
|
| 1015 |
archive = _write_graph_archive(tmp_path)
|
| 1016 |
claude = tmp_path / "home"
|
|
|
|
| 1032 |
"--force",
|
| 1033 |
"--model-mode", "skip",
|
| 1034 |
]) == 0
|
| 1035 |
+
out = capsys.readouterr().out
|
| 1036 |
+
assert "full graph install expands the markdown LLM-wiki" in out
|
| 1037 |
+
assert "runtime mode is enough for recommendations" in out
|
| 1038 |
assert not stale.exists()
|
| 1039 |
assert (claude / "skill-wiki" / "entities" / "skills" / "current.md").is_file()
|
| 1040 |
|
src/tests/test_feature_user_story_tracker.py
CHANGED
|
@@ -12,6 +12,8 @@ from ctx.monitor import routes as monitor_routes # noqa: E402
|
|
| 12 |
|
| 13 |
TRACKER = repo_root / "docs" / "qa" / "feature-user-story-status.csv"
|
| 14 |
README = repo_root / "README.md"
|
|
|
|
|
|
|
| 15 |
|
| 16 |
|
| 17 |
def _tracker_rows() -> list[dict[str, str]]:
|
|
@@ -41,7 +43,13 @@ def test_feature_user_story_tracker_has_no_empty_core_fields() -> None:
|
|
| 41 |
for row in rows:
|
| 42 |
for key in required:
|
| 43 |
assert row[key].strip(), f"{row.get('feature_id', '<unknown>')} missing {key}"
|
| 44 |
-
assert row["status"] in
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
|
| 46 |
|
| 47 |
def test_feature_user_story_tracker_covers_all_console_scripts() -> None:
|
|
|
|
| 12 |
|
| 13 |
TRACKER = repo_root / "docs" / "qa" / "feature-user-story-status.csv"
|
| 14 |
README = repo_root / "README.md"
|
| 15 |
+
PASS_STATUSES = {"Tested Pass", "Retested Pass"}
|
| 16 |
+
ACTIONABLE_STATUSES = PASS_STATUSES | {"Needs Fix"}
|
| 17 |
|
| 18 |
|
| 19 |
def _tracker_rows() -> list[dict[str, str]]:
|
|
|
|
| 43 |
for row in rows:
|
| 44 |
for key in required:
|
| 45 |
assert row[key].strip(), f"{row.get('feature_id', '<unknown>')} missing {key}"
|
| 46 |
+
assert row["status"] in ACTIONABLE_STATUSES
|
| 47 |
+
if row["status"] not in PASS_STATUSES:
|
| 48 |
+
for key in ("error_id", "error_summary", "fix_status"):
|
| 49 |
+
assert row[key].strip(), (
|
| 50 |
+
f"{row.get('feature_id', '<unknown>')} has "
|
| 51 |
+
f"{row['status']} without {key}"
|
| 52 |
+
)
|
| 53 |
|
| 54 |
|
| 55 |
def test_feature_user_story_tracker_covers_all_console_scripts() -> None:
|