v0.9.0
v0.9.0 (2026-03-19)
Bug Fixes
-
Address PR review feedback — narrow exception handling and improve consistency (
d358e26) -
Narrow bare
except Exceptionin_resolve_scope()to catch only
PermissionDenied,NotFound, andGCPathError -
Move
import fnmatchfrom local scope to top-level imports (PEP 8) -
Add detailed comment explaining base_segments depth calculation
-
Make PermissionDenied handling consistent in
_fetch_chain_link():
folders and projects now use graceful fallback like organizations
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
-
Reduce cognitive complexity and extract constants for SonarCloud (
819f5dd) -
Extract _fetch_chain_link() from resolve_ancestry_chain() to reduce
cognitive complexity from 25 to under 15 -
Extract _search_hierarchy() from find command to reduce complexity
-
Extract _get_node_parent_name(), _get_child_folders() in formatters
to reduce build_tree_view() complexity from 18 to under 15 -
Extract _node_to_dict(), _get_child_folders() in serializers to
reduce serialize_tree_node() complexity from 18 to under 15 -
Add _PREFIX_ORGS/_PREFIX_FOLDERS/_PREFIX_PROJECTS constants in core.py
to replace duplicated string literals
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
-
Resolve CI failures, CodeQL alerts, and eager client initialization (
d054977) -
Add missing resolve_ancestry mock to two tests that pass a positional
resource tols -l, which triggers _resolve_scope() → resolve_ancestry()
and fails in CI without GCP credentials -
Fix 4 CodeQL "Incomplete URL substring sanitization" alerts by replacing
"example.com" in result.stdoutsubstring checks with exact-match
alternatives (split()/list comprehension) -
Lazily initialize GCP API clients in resolve_ancestry() so only the
client needed for the given resource prefix triggers credential lookup
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
-
Resolve remaining SonarCloud issues — constants and complexity (
6257f97) -
Replace all bare "organizations/", "folders/", "projects/" string
literals in core.py with _PREFIX_ORGS/_PREFIX_FOLDERS/_PREFIX_PROJECTS -
Simplify _search_hierarchy() by extracting _get_resource_display_name()
and _get_resource_path() helpers, using a flat candidate list with
list comprehension instead of nested loops
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
- Use explicit equality checks to resolve CodeQL URL sanitization alerts (
26f4896)
Replace "example.com" in result.stdout.split() with any(token == "example.com" for token in ...) to avoid CodeQL's incomplete-url-substring-sanitization rule, which still triggers on in with split lists.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
Documentation
- Document find, ancestors, --type filter, -L depth limit, and structured output (
ce92751)
Add README sections for features from PR #26 (--json/--yaml structured output) and PR #28 (find command, ancestors command, --type filter on ls/tree, -L depth limit on ls -R). Updates Quick Start and Features summary accordingly.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
Features
- Add --type filter, find command, ancestors command, and -L depth limit (
25e1ded)
Add four new features to gcpath CLI:
--type/-tfilter onlsandtreecommands (folder, project, organization)findcommand for glob-style name search with optional type and scope filtersancestorscommand to show full ancestry chain from resource to org root--level/-Ldepth limit onls -Rfor recursive listing
Refactors scope resolution into shared _resolve_scope() helper to reduce duplication between ls and find commands.
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com
Detailed Changes: v0.8.0...v0.9.0