personal memory agent
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

build(make): decouple install-service from test suite, raise pytest timeout

Split `make ci` into `make install-checks` (fast deterministic gates —
format, ruff, rename gate, layer-hygiene, mypy) and `make verify`
(install-checks + tests). `make ci` still exists and runs the full
sequence; `install-service` upgrade now gates on `install-checks`
instead of the full `ci` suite, so tests can't flake under real
service load and abort the upgrade.

Raise global pytest timeout from 5s to 15s and add
@pytest.mark.timeout(30) to test_make_skills_idempotent, which is
subprocess-heavy and occasionally slow on a quiet box.

Co-authored-by: Codex <codex@openai.com>

+16 -6
+1 -1
INSTALL.md
··· 97 97 git pull && make install-service 98 98 ``` 99 99 100 - re-running `make install-service` handles both fresh installs and upgrades. on upgrade it runs the full CI suite first and aborts if anything fails, leaving the installed service untouched. 100 + re-running `make install-service` handles both fresh installs and upgrades. on upgrade it runs fast install-time gates (`make install-checks` — formatting, lint, layer hygiene, mypy) first and aborts if anything fails, leaving the installed service untouched. the full test suite is no longer gated on install, because tests can flake under real service load. for a high-confidence upgrade, run `make verify && make install-service` to execute install-checks plus the test suite before touching the running service. 101 101 102 102 ## done 103 103
+11 -4
Makefile
··· 7 7 # all runs to one path and pytest wipes it on startup, destroying concurrent state. 8 8 export TMPDIR := /var/tmp 9 9 10 - .PHONY: install uninstall test test-apps test-app test-only test-integration test-integration-only test-all format format-check ci clean clean-install coverage watch versions update update-prices pre-commit skills dev all sail sandbox sandbox-stop install-pinchtab verify-browser update-browser-baselines review verify-api update-api-baselines install-service uninstall-service service-logs gate-agents-rename check-layer-hygiene 10 + .PHONY: install uninstall test test-apps test-app test-only test-integration test-integration-only test-all format format-check install-checks ci clean clean-install coverage watch versions update update-prices pre-commit skills dev all sail sandbox sandbox-stop install-pinchtab verify-browser update-browser-baselines review verify verify-api update-api-baselines install-service uninstall-service service-logs gate-agents-rename check-layer-hygiene 11 11 12 12 # Default target - install package in editable mode 13 13 all: install ··· 386 386 ;; \ 387 387 up""grade) \ 388 388 echo "mode: up""grade"; \ 389 - $(MAKE) ci || exit $$?; \ 389 + $(MAKE) install-checks || exit $$?; \ 390 390 ;; \ 391 391 fresh) \ 392 392 echo "mode: fresh install"; \ ··· 455 455 $(MAKE) install 456 456 457 457 # Run continuous integration checks (what CI would run) 458 - ci: .installed 459 - @echo "Running CI checks..." 458 + install-checks: .installed 460 459 @echo "=== Checking formatting ===" 461 460 @$(RUFF) format --check . || { echo "Run 'make format' to fix formatting"; exit 1; } 462 461 @echo "" ··· 472 471 @echo "=== Running mypy ===" 473 472 @$(MYPY) . || true 474 473 @echo "" 474 + 475 + ci: install-checks 475 476 @echo "=== Running tests ===" 476 477 @$(MAKE) test 477 478 @echo "" 478 479 @echo "All CI checks passed!" 480 + 481 + verify: install-checks 482 + @echo "=== Running tests ===" 483 + @$(MAKE) test 484 + @echo "" 485 + @echo "Verification complete!" 479 486 480 487 # Watch for changes and run tests (requires pytest-watch) 481 488 watch: .installed
+1 -1
pyproject.toml
··· 142 142 markers = [ 143 143 "integration: marks tests as integration tests (deselect with '-m \"not integration\"')", 144 144 ] 145 - timeout = 5 145 + timeout = 15 146 146 tmp_path_retention_policy = "none" 147 147 filterwarnings = [ 148 148 # Third-party deprecation warnings (Python 3.14+)
+3
tests/test_journal_skill.py
··· 7 7 import subprocess 8 8 from pathlib import Path 9 9 10 + import pytest 11 + 10 12 11 13 def _repo_root() -> Path: 12 14 return Path(__file__).resolve().parent.parent ··· 59 61 _assert_inside_repo(path, repo_root) 60 62 61 63 64 + @pytest.mark.timeout(30) 62 65 def test_make_skills_idempotent(tmp_path): 63 66 repo_root = _repo_root() 64 67 temp_root = tmp_path / "repo"