fix(warehouse): surface out-of-scope dirty file count in status/contribute#148
Conversation
…ibute Both `abc warehouse status` (no-arg) and `abc warehouse contribute` filter git status through the project's beacon.yaml-tracked set, so warehouse files outside that scope were invisible. Users saw "clean" / "no changes" while `git status` inside the warehouse showed dirty files, and concluded the CLI was broken. Add a `dirty_outside_scope_count` to `StatusResult` and `ContributeResult` and surface it in both CLI handlers when the in-scope set is clean but the warehouse has out-of-scope dirty files. Existing in-scope behavior unchanged. Closes PER-159.
OpenCode ReviewModel: Findings
Open Questions
Notes
Token UsageInput tokens: |
Supervisor triage — bot round 1Bot review: Findings
Notes / residual risks (bot's "Notes" section)
No fix-up needed. Handing off to UI merge. |
Summary
abc warehouse statusandabc warehouse contributefiltergit statusthrough the project'sbeacon.yaml-tracked set — so warehouse files outside that scope were silently invisible. Users saw "✓ Working tree is clean." / "No uncommitted changes to contribute." whilegit statusin the warehouse showed dirty files, and concluded the CLI was broken.This PR adds a
dirty_outside_scope_countfield toStatusResultandContributeResult, computes it via line-count subtraction of unfiltered vs filteredgit status --porcelain, and surfaces it in both CLI handlers when the in-scope set is clean.Closes PER-159.
Behavior matrix
✓ Working tree is clean.✓ Working tree is clean.(misleading)Note: N dirty file(s) ... outside this project's beacon.yaml scope.--allto inspect the rest)--allmodeabc warehouse status <path>abc warehouse contribute --paths <p>(out-of-scope path)Test plan
uv run pytest libs/beacon/tests/unit/warehouse/test_status.py libs/beacon/tests/unit/warehouse/test_contribute.py -q— 29 passeduv run pytest libs/beacon/tests/unit -q— 1047 passed, 2 skipped~/Code/knowledge/hl-knowledge-marketwarehouse — both commands now show the count✓ Working tree is clean.--allsmoke — still surfaces everything🤖 Generated with Claude Code