Skip to content

gitignore: exclude machine-local opencode.json and docs/ - #216

Merged
getappz merged 16 commits into
masterfrom
recover-local-commits
Jul 16, 2026
Merged

gitignore: exclude machine-local opencode.json and docs/#216
getappz merged 16 commits into
masterfrom
recover-local-commits

Conversation

@getappz

@getappz getappz commented Jul 16, 2026

Copy link
Copy Markdown
Owner

Summary

  • opencode.json carries per-machine MCP server paths and command overrides on top of the shared LSP config; untracked it (git rm --cached) and added it to .gitignore so 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.
  • This branch (recover-local-commits) was rebased/merged up to current master (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 — clean

Summary by CodeRabbit

  • Chores
    • Updated local project ignore rules for workspace files, documentation, research materials, and configuration files.
    • Removed a local development configuration file containing Rust language tooling settings.

getappz added 16 commits July 16, 2026 19:19
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.
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.
@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 1fbd971d-cf36-4498-bf42-d06c97ca6541

📥 Commits

Reviewing files that changed from the base of the PR and between 230279d and 208c15e.

📒 Files selected for processing (2)
  • .gitignore
  • opencode.json
💤 Files with no reviewable changes (1)
  • opencode.json

📝 Walkthrough

Walkthrough

Changes

Local configuration cleanup

Layer / File(s) Summary
Ignore and tooling configuration updates
.gitignore, opencode.json
.gitignore now ignores local research, worktree, documentation, and OpenCode files, while the previous trailing worktree pattern is removed. opencode.json and its Rust analyzer settings are deleted.

Estimated code review effort: 1 (Trivial) | ~2 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly matches the main change: updating .gitignore for machine-local opencode.json and docs output.
Description check ✅ Passed The description covers the summary and test plan, but omits the template's reviewer notes section.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch recover-local-commits

Comment @coderabbitai help to get the list of available commands.

@getappz
getappz merged commit 2b58ffd into master Jul 16, 2026
15 checks passed
@getappz
getappz deleted the recover-local-commits branch July 16, 2026 19:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant