Repository navigation
feat(lifecycle): update and uninstall directory targets via recorded ownership - #354
Conversation
# Conflicts: # tests/test_community_policy.py
# Conflicts: # internal/cli/doctor.go # internal/skillroot/resolve.go # tests/test_community_policy.py
Fleet review (glm)Lens: requirements + adversarial. The update flow fails closed correctly on a target with no prior state, and the parser correctly rejects unknown and mutually exclusive arguments. One blocking finding: uninstall of a nonexistent target directory reports success (exitOK), contradicting issue #342's acceptance criterion that update/uninstall against a directory with no prior Cortex ownership fails closed — and it is internally inconsistent with the same function, which returns exitConflict for an existing unowned directory. Questions cover two acceptance criteria whose tests do not verify what they promise ("reports what was left", "only affected owned files with manifest refresh"), plus an unexplained weakening of the foundation-documents test. Blocking (1)
Suggestion (1)
Question (3)
Verdict: not ready |
Fleet review (qwen38)Lens: evidence. This is the lifecycle slice (issue #342): update/uninstall dispatch, directory update/uninstall paths, and three end-to-end tests driving the real install → update → uninstall flow through runWithDependencies. The fails-closed update test and the foreign-file isolation test are strong, representative evidence. Weaker spots are all evidence gaps, not demonstrated defects: 'rewrites only affected owned files, with readback and manifest refresh' is asserted by only one of its three clauses; the uninstall 'no prior ownership' branch is untested; and the acceptance phrase 'reports what was left' is not visibly implemented. The Python policy-test edit again shows mechanical conflict residue (three duplicated assertEqual(404) pairs) and the same unexplained de-pinning of 'docs/README.md'. No blocking findings. Suggestion (2)
Question (3)
Verdict: ready to merge |
Post-merge QA (glm)Update and uninstall for directory targets (issue #342). All three acceptance criteria have real coverage: plan is read-only and apply refreshes the projected skill; update refuses a target with no prior state (not_installed) instead of turning an update into a first install; uninstall removes owned files and the state file while keeping a foreign sentinel and reporting the remaining tree. parseUpdateArgs enforces runtime/target-dir mutual exclusion and requires --catalog. Two minor gaps: the 'rewrites only affected owned files' criterion is not directly asserted (no check that unchanged owned files stay untouched), and the uninstall test does not assert that the output reports which foreign files were left. Question (2)
Verdict: clean |
Post-merge QA (deepseek)Lens: evidence + test design. The merge covers #342 with real end-to-end evidence: Two defects and two evidence gaps. The main one: Blocking (1)
Suggestion (2)
Question (1)
Verdict: blocking |
Stacked on the directory install target.
cortex update --target-dir <dir> --catalog <dir> [--apply]refreshes a previously installed directory target; a target with no prior state is refused withreason=not_installedinstead of becoming a first install.cortex uninstall --target-dir <dir>removes exactly the owned files (state file, skills) and never touches foreign files; the uninstall backup stays under the target's.cortexas rollback evidence.Full
go test ./internal/...green;go vetclean.Fixes #342