gitignore: exclude machine-local opencode.json and docs/ - #216
Merged
Conversation
Document that ambient CARGO_TARGET_DIR env var outranks the per-worktree .cargo/config.toml (Cargo precedence CLI > env > config), so #133's ambient-env case remains open. Also warn on the re-claim fast path.
…init, components, MCP, and auth_runner
Key: rust (not rust-analyzer). Built-in server, no custom command/extensions needed. Settings go in initialization options.
Built-in servers need command when overridden in config
Adds item action=\groom\: returns a priority+recency-ranked shortlist with full description plus server-computed stale/unassigned/blocked_by/ depended_on_by_count/possible_duplicates/size/unestimated signals and a pull_next list, in one MCP round trip instead of list + N x get. - dependencies_for_items(): bulk dependency-edge query for the shortlist - UpdateItem/item(update) now accepts metadata, so size:S|M|L can be set on existing items (was create-only) - also fixes a latent param_idx bug in item::update where sort_order never advanced the placeholder index, silently reusing it for any field added after it - groom parses metadata.size instead of regexing description prose - /pm:groom, /pm:plan, and the read-recipe/rubric skill docs now call groom directly instead of the old list+get+hand-scoring path - benchmark test (ignored by default) comparing groom vs list+15xget
Dogfooding item(create) with metadata={"size":"S"} via a live MCP call
stored a JSON string containing JSON instead of the object itself, so
groom's parsed_size() silently reported these items as unestimated.
parsed_size() now unwraps one extra string-encoding layer before giving
up. Regression test reproduces the exact stored shape.
Extends item action="groom" with an optional `capacity` param that additionally buckets the shortlist into now/next/later/needs_estimation, reusing the rank/blocked_by/unestimated signals groom already computes. Omitted from the response when capacity is unset (backward compatible). Extracted priority_rank/parsed_size/dependency_signals/near_duplicates/ capacity_buckets into named module-level functions in item.rs - the handler was accreting cognitive complexity with every addition and this keeps it as an orchestration function. /pm:plan now calls groom(capacity=N) directly instead of re-bucketing groom's shortlist itself.
Adds item action="standup": returns done (completed within cutoff_hours, default 24)/in_progress (grouped by assignee, "unassigned" as its own group)/stuck (in-progress older than staleness_days, default 7) computed server-side from one state-filtered read, instead of the caller bucketing a flat list result by hand. /pm:standup and the read-recipe skill doc now call it directly.
Adds item action="health": trailing weekly velocity series (oldest to newest) with an up/down/flat trend, WIP list+count, stuck items (WIP older than staleness_days, default 7), and a bottlenecks field. Velocity is a live scan over list_by_project, not a precomputed/event- populated rollup table: events::emit (agentflare-backend/src/events.rs) turned out to be outbound webhook delivery only, not a persisted log, and there's no handoff-history table either - handoff is assign + asset version + comment, not a separate audit log. Building either is real new migration work; at this project's actual scale a live scan is sub-millisecond (see the groom benchmark), so that infrastructure would be speculative today. bottlenecks is therefore always empty, with bottleneck_note explaining why, matching the skill's own documented "if none available, print no handoff history" fallback. /pm:health now calls the action directly instead of hand-computing the weekly buckets.
- cargo fmt --all: wraps a few lines the local dev-profile check didn't
flag (CI's fmt job uses --check with no width override)
- tests/caveman_cli.rs called the pre-rename `agentflare caveman compress`
subcommand, which no longer exists after the ponytail/caveman ->
optimize/flare-code rename; updated to `agentflare optimize output
compress` (FlareAction::Output { action: OutputAction::Compress },
src/cli/optimize.rs) and renamed the test function to match
Verified with the exact CI command set locally:
- cargo fmt --all --check: clean
- cargo clippy --locked --workspace --all-targets --all-features -- -D
warnings -A unsafe_code -A clippy::pedantic: clean
- cargo test --workspace: 543 passed, 1 ignored, 0 failed (plus all other
workspace crates' test suites, all passing)
- dependency_edges_for_items (was dependencies_for_items) now joins the dependency target's true state_group in SQL, instead of looking it up via a shortlist-scoped linear scan. Fixes a real bug: a completed dependency that fell outside the default state_group filter (e.g. "backlog,unstarted" excludes "completed") read back as "" from the old lookup and was treated as still-open, falsely blocking its dependent. - dependency_fanin_for_items counts dependents project-wide instead of only within the shortlist, fixing an undercounted depended_on_by_count when a dependent fell outside the shortlist/limit window. - standup's "done" filter and health's velocity bucketing now key off completed_at instead of updated_at. Editing an already-completed item (e.g. fixing a typo) bumps updated_at without re-completing it; using updated_at made old work spuriously reappear as "just done" or shift which week it counted toward. - window_weeks (health) and limit (groom) are now clamped (52, 200) instead of unbounded - an unbounded window_weeks drove a Vec allocation of that literal size while holding the backend DB lock. - Fixed two doc inaccuracies: read-recipe.md claimed item(get) returns labels (it doesn't - separate join table); staleness_days' schema description only mentioned groom's default, not standup/health's. 6 new regression tests, one per fix. cargo test --workspace: 548 passed, 1 ignored, 0 failed. cargo clippy --locked --workspace --all-targets --all-features: clean. cargo fmt --all --check: clean.
opencode.json carries per-machine MCP server paths and command overrides on top of the shared LSP config; untrack it so local additions stop showing as uncommitted repo changes. docs/ is machine-local doc-generation output, not project content.
# Conflicts: # opencode.json
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
💤 Files with no reviewable changes (1)
📝 WalkthroughWalkthroughChangesLocal configuration cleanup
Estimated code review effort: 1 (Trivial) | ~2 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Merged
6 tasks
This was referenced Jul 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
opencode.jsoncarries per-machine MCP server paths and command overrides on top of the shared LSP config; untracked it (git rm --cached) and added it to.gitignoreso local additions stop showing as uncommitted repo changes.docs/is machine-local doc-generation output, not project content — added to.gitignore.domain-research/(local skill-generated output) also added to.gitignore; dropped a pre-existing duplicate.worktrees/entry.recover-local-commits) was rebased/merged up to currentmaster(which already contains recover local commits + add server-side groom/standup/health/plan actions #214 and hook: deprecate inert PreCompact FTS5 scorer, keep as no-op stub #215) so it carries no stale history — the diff is scoped to just these two files.Test plan
RUSTFLAGS="-D warnings" cargo build --workspace --all-features— cleanSummary by CodeRabbit