feat(procedures): query the titw vendor store; byte-safe scans - #33
Conversation
- stores.sh: VENDOR_STORES=(titw) — queried by query-records.sh, never linted/backfilled (D23 in drewdrewthis/titw: vendored records are validated by titw check at publish) - query-records.sh: ALL_STORES includes vendor stores; export LC_ALL=C so one non-UTF-8 corpus byte no longer aborts BSD cut/grep under a UTF-8 locale (reproduced on macOS) - scout Boundaries + how-do-i tooling note name the titw store; store-list-drift covers VENDOR_STORES; functional bats tests for vendor-store hits and locale byte-safety Mirrors orchard-codex upstream commit 5be2a738 (develop-local-mac) — no unmarked drift. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Warning Review limit reached
Next review available in: 29 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (6)
📝 WalkthroughWalkthroughThe query system now searches the ChangesVendor Store Query Support
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@plugins/procedures/agents/procedure-scout.md`:
- Around line 153-157: Replace the frozen store-path list in
plugins/procedures/agents/procedure-scout.md:153-157 with a reference to the
live query/store discovery mechanism. Update
plugins/procedures/skills/how-do-i/SKILL.md:24-27 to document the configured
query surface without duplicating store paths. Modify
plugins/procedures/hooks/tests/store-list-drift.bats:23-35 to verify the
discovery reference and retain only the mistakes.jsonl exception, removing
enumeration of STORES and VENDOR_STORES.
In `@plugins/procedures/hooks/tests/query-records.bats`:
- Around line 682-688: Add explicit status assertions after the --kind principle
and --id prin.vendored-sample invocations, matching the existing [ "$status" -eq
0 ] check for the keyword query, while preserving the current output assertions.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: b7d1f769-a8af-4d1a-92e0-6d9dac0ca8b3
📒 Files selected for processing (6)
plugins/procedures/agents/procedure-scout.mdplugins/procedures/hooks/tests/query-records.batsplugins/procedures/hooks/tests/store-list-drift.batsplugins/procedures/scripts/lib/stores.shplugins/procedures/scripts/query-records.shplugins/procedures/skills/how-do-i/SKILL.md
…cation Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…stores Space-separated, root-relative store paths appended to the scan list. Env on purpose: settings env maps stack by scope (user -> project -> local), so a project can add a store with no plugin release. Extras are queried, never linted, like vendor stores. Scout Boundaries + SKILL tooling note document the knob; bats test proves a store is invisible by default and scanned when named. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@plugins/procedures/scripts/lib/stores.sh`:
- Around line 34-43: Keep QUERY_RECORDS_EXTRA_STORES separate from the static
VENDOR_STORES array by introducing a dedicated extras array in the shown shell
block and appending parsed values there. Update query-records.sh’s ALL_STORES
construction to include the extras array, while leaving VENDOR_STORES unchanged
so store-list-drift.bats and its vendor documentation contract only inspect
managed vendor stores.
- Around line 39-42: Update the QUERY_RECORDS_EXTRA_STORES handling in stores.sh
to validate each entry before adding it to VENDOR_STORES: reject absolute paths,
normalize . and .. components, require the resolved path to remain under ROOT,
and preserve wildcard characters literally without shell glob expansion. Replace
the shellcheck directive with valid disable= syntax and ensure invalid entries
are rejected rather than appended.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 8ad84f5f-f005-487e-981c-9e92166b4adb
📒 Files selected for processing (4)
plugins/procedures/agents/procedure-scout.mdplugins/procedures/hooks/tests/query-records.batsplugins/procedures/scripts/lib/stores.shplugins/procedures/skills/how-do-i/SKILL.md
…om VENDOR_STORES - extras no longer pollute VENDOR_STORES (which the drift test binds to the doc contract); query-records.sh composes STORES + VENDOR_STORES + EXTRA_STORES, empty-safe under set -u on bash 3.2 - entries validated: absolute paths, .., and glob characters rejected loudly on stderr; glob expansion disabled during the split - valid shellcheck directive syntax; SC2034 silenced for arrays consumed by sourcing scripts - bats: validation test (invalid entries dropped with notice, valid one still scanned) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…d store list Owner call (2026-08-09), reversing the earlier inlined-list convention: agents scope searches to `query-records.sh --list-stores` output instead of a hand-maintained enumeration in prose. Scout Boundaries and the how-do-i tooling note now reference the mechanism; store-list-drift.bats pins the discovery contract (flag lists STORES + VENDOR_STORES + env extras; docs reference the flag) instead of patrolling prose copies. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Two changes to the query surface, proven live in the titw dogfood run (2026-08-09):
titw vendor store (D23)
drewdrewthis/titw DECISIONS D23 (ratified 2026-08-09): titw-installed packages project into
~/.claude/titw/<pkg>/…and the plugin queries them as one extra store.stores.sh: newVENDOR_STORES=(titw)array — queried, never linted/backfilled. Kept out ofSTORESso every existing consumer (lint-frontmatter, backfill, path guards) is untouched; vendored records are validated bytitw checkat publish time instead.query-records.sh:ALL_STORES=STORES+VENDOR_STORES.store-list-drift.batsbindsVENDOR_STORESto both prose surfaces; functional test proves a vendored record is found by--keyword/--kind/--id.Byte-safe scans
export LC_ALL=Cinquery-records.sh: one non-UTF-8 byte anywhere in the corpus makes BSDcut/grepabort withIllegal byte sequenceunder a UTF-8 locale — reproduced on macOS against the live corpus (--keywordqueries returned nothing). Regression test writes an invalid byte into a fixture record and asserts the scan still succeeds underLC_ALL=en_US.UTF-8.Evidence
bats hooks/tests: 160/160 ok (was 155; +5 new).@drewdrewthis/orchard-codex@0.1.0, installed via titw on the mac, projected corpus queried through these scripts — 27 results for--keyword worktreefrom the projection vs 27 from the live codex (identical answers).5be2a738(develop-local-mac) — no unmarked drift.🤖 Generated with Claude Code
Summary by CodeRabbit
titw/vendor store, enabling discovery by keyword, type, and ID.QUERY_RECORDS_EXTRA_STORES.