tools: walk up from CWD to find .beads for monorepo support

The .beads check now traverses parent directories so plan_* enforcement
works from any subdirectory of the repo, not just the root.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Levi Neely 2026-04-19 11:14:36 +02:00
parent c7fb791434
commit dc5356b242
4 changed files with 20 additions and 4 deletions

View File

@ -8,7 +8,14 @@ if len(sys.argv) < 3:
sys.exit(1)
import shutil
if os.environ.get('OLLIE_BEADS_ENABLE', '1') != '0' and shutil.which('bd') and os.path.exists('.beads'):
def _find_beads():
d = os.getcwd()
while d != os.path.dirname(d):
if os.path.isdir(os.path.join(d, '.beads')):
return True
d = os.path.dirname(d)
return False
if os.environ.get('OLLIE_BEADS_ENABLE', '1') != '0' and shutil.which('bd') and _find_beads():
print("error: beads is available — use 'bd' for planning instead of plan_check", file=sys.stderr)
sys.exit(2)

View File

@ -4,7 +4,8 @@
# Output: plan filename in pl/
set -euo pipefail
if [ "${OLLIE_BEADS_ENABLE:-1}" != "0" ] && command -v bd >/dev/null 2>&1 && [ -d ".beads" ]; then
_find_beads() { local d="$PWD"; while [ "$d" != "/" ]; do [ -d "$d/.beads" ] && return 0; d="$(dirname "$d")"; done; return 1; }
if [ "${OLLIE_BEADS_ENABLE:-1}" != "0" ] && command -v bd >/dev/null 2>&1 && _find_beads; then
echo "error: beads is available — use 'bd' for planning instead of plan_create" >&2
exit 2
fi

View File

@ -9,7 +9,14 @@ if len(sys.argv) < 2:
sys.exit(1)
import shutil
if os.environ.get('OLLIE_BEADS_ENABLE', '1') != '0' and shutil.which('bd') and os.path.exists('.beads'):
def _find_beads():
d = os.getcwd()
while d != os.path.dirname(d):
if os.path.isdir(os.path.join(d, '.beads')):
return True
d = os.path.dirname(d)
return False
if os.environ.get('OLLIE_BEADS_ENABLE', '1') != '0' and shutil.which('bd') and _find_beads():
print("error: beads is available — use 'bd' for planning instead of plan_finish", file=sys.stderr)
sys.exit(2)

View File

@ -4,7 +4,8 @@
# Output: new filename
set -euo pipefail
if [ "${OLLIE_BEADS_ENABLE:-1}" != "0" ] && command -v bd >/dev/null 2>&1 && [ -d ".beads" ]; then
_find_beads() { local d="$PWD"; while [ "$d" != "/" ]; do [ -d "$d/.beads" ] && return 0; d="$(dirname "$d")"; done; return 1; }
if [ "${OLLIE_BEADS_ENABLE:-1}" != "0" ] && command -v bd >/dev/null 2>&1 && _find_beads; then
echo "error: beads is available — use 'bd' for planning instead of plan_start" >&2
exit 2
fi