Skip to content

Releases: userFRM/rpg-encoder

v0.8.3 — drift maintenance + RPG-first tool preference + sub-agent dispatch

14 Apr 19:32
26b24ee

Choose a tag to compare

[0.8.3] - 2026-04-14

Added

  • lifting_status now tracks stale-feature drift across calls. A
    persistent per-server set records entities whose source was modified
    after they were lifted; the dashboard reports stale_features: N entities modified since last lift and the NEXT STEP state machine
    prompts re-lift even when coverage is 100%.
  • get_entities_for_lifting(scope="*") now returns stale entities
    alongside unlifted ones, so a single call covers both "never lifted"
    and "lifted-but-outdated" work.
  • lifting_status emits a sub-agent dispatch recommendation when the
    remaining work (unlifted + stale) is ≥100 entities. The response
    contains LOOP / DISPATCH / FALLBACK blocks so callers delegate
    directly without first loading a batch of source into their own
    context.
  • get_entities_for_lifting batch-0 emits a one-line dispatch hint
    when ≥10 token-aware batches are queued, pointing back to
    lifting_status for the full recommendation.
  • submit_lift_results NEXT action is now scale-aware — when remaining
    work ≥100 entities, it redirects the caller to lifting_status
    instead of encouraging another foreground batch.
  • build_rpg response now emits an action-oriented NEXT STEP directing
    the agent to lift immediately. Small scope lifts inline; large scope
    dispatches a sub-agent with the LOOP pattern embedded.
  • New USE RPG FIRST top section in server_instructions.md with a
    mapping table from shell patterns (grep -r, cat, find, wc -l,
    chained greps) to the RPG tool that replaces them.
  • New DRIFT MAINTENANCE section in server_instructions.md
    explaining the three auto-sync notice variants and framing re-lift
    as part of definition-of-done for any task that wrote code.
  • Tool descriptions for search_node, fetch_node, explore_rpg,
    rpg_info, semantic_snapshot, context_pack, impact_radius,
    plan_change, analyze_health, detect_cycles, find_paths, and
    slice_between now open with a PREFER THIS OVER ... marker naming
    the shell command or workflow they replace.
  • .claude/skills/rpg/SKILL.md and README.md carry the same
    RPG-first mapping table as the server prompt.
  • Crate-visible LARGE_SCOPE_ENTITIES (100) and LARGE_SCOPE_BATCHES
    (10) constants replace duplicated magic numbers across
    server.rs/tools.rs with doc comments describing the
    heuristic-vs-authoritative relationship.
  • Canonical lock-order invariant documented on the RpgServer struct
    so reviewers don't have to re-derive it from scattered call sites.
  • reload_config_with_warning helper on RpgServer that distinguishes
    missing .rpg/config.toml (silent default) from malformed TOML
    (stderr warning, keeps previous in-memory config).

Changed

  • lifting_status NEXT STEP is runtime-neutral. No specific runtime's
    dispatch syntax appears in the response; callers use whatever
    sub-agent or cheaper-model mechanism their runtime exposes. Explicit
    fallbacks: scoped lifting for callers with no delegation mechanism,
    and rpg-encoder lift --provider anthropic|openai for callers with
    an API key and no sub-agent support.
  • Batch-size estimates in NEXT STEP messages read from the live
    encoding.max_batch_tokens config instead of a hard-coded ~12K
    figure, so the estimate scales when the user overrides the budget.
  • NEXT STEP: remains a single parseable line; dispatch detail is
    emitted in labeled blocks immediately below.
  • Auto-sync notice now prescribes a verb: it distinguishes per-update
    delta from pre-existing backlog and separates new-entity drift from
    stale-feature drift, so an agent that commits code and sees the
    notice is told to re-lift rather than informed of a count.
  • CLI fallback in large-scope guidance is gated to cases with actual
    unlifted work, with a note that rpg-encoder lift does not re-lift
    stale entities (it filters to entities with no features).
  • get_routing_candidates response header no longer includes the
    graph revision hash — it moved to the NEXT_ACTION block at the
    bottom. Keeps the stable preamble (instructions + entity table)
    cache-eligible while still surfacing the revision where the agent
    needs to read it back.
  • server_instructions.md LIFTING FLOW sub-section rewritten and
    shortened.
  • set_project_root on project switch now loads the new project's
    .rpg/config.toml independently; on parse failure it falls back to
    RpgConfig::default() rather than preserving the previous project's
    config. Same-project reload_rpg preserves the previous config on
    parse failure (different flow, different correctness requirement).

Fixed

  • lifting_status previously reported Graph is complete as soon as
    every entity had some features, ignoring stale features from
    modified sources. The state machine now considers
    remaining + stale_features combined.
  • get_entities_for_lifting(scope="*") previously returned zero
    entities when all drift was stale (features present, sources
    modified) because resolve_scope filters to entities with no
    features. It now augments the resolved scope with tracked stale
    entities and routes them through the LLM loop.
  • Auto-sync notice previously conflated per-update delta with global
    backlog, so a one-line edit on a partially-lifted repo could claim
    "50 new entities unlifted" when only 1 was actually new.
  • finalize_lifting fallback guidance previously said to call it
    after each scoped subtree. That auto-routes pending entities
    against incomplete signals and locks the hierarchy early. Guidance
    now says to call finalize_lifting once after all scopes complete.
  • rpg-encoder lift --provider ... (CLI fallback) left the MCP
    server on a stale in-memory graph. All docs that mention the CLI
    fallback now specify that the caller must call reload_rpg
    afterward.
  • set_project_root and reload_rpg previously used
    unwrap_or_default() on config loads, collapsing missing-config
    and malformed-TOML into identical silent behavior.
  • set_project_root failed to refresh self.config on project
    switch; the server kept serving the previous project's encoding
    settings.
  • lifting_status large-scope recommendation previously ran off raw
    unlifted count, before auto-lift had reduced the set. On repos full
    of trivial entities (getters, setters, constructors) it could
    recommend delegation for ~0 LLM calls. The large-scope branch now
    signals likely-large and defers the authoritative check to the
    post-auto-lift batch count in get_entities_for_lifting.
  • rpg_info error wording ("No RPG found") was miscited as a
    friendly status string; corrected to "any RPG tool returns 'No RPG
    found'".
  • build_rpg NEXT STEP and lifted: X/Y header previously counted
    Module entities against the unlifted total, while
    lifting_status and get_entities_for_lifting exclude them. The
    two could disagree by hundreds of entities on large codebases,
    tripping the delegation threshold in build_rpg when
    lifting_status would still recommend foreground lifting. Both
    paths now use lifting_coverage() (non-module) for the count, and
    the header reads liftable_entities: X/Y.
  • submit_lift_results previously emitted DONE as soon as coverage
    reached 100%, which could terminate a stale-only re-lift loop after
    batch 1 while later batches were still queued. The NEXT/DONE
    branch now counts unlifted + stale remaining.
  • update_rpg now feeds summary.modified_entity_ids into the
    stale-tracking set so its needs_relift: N reply aligns with what
    lifting_status and get_entities_for_lifting(scope="*") report.
  • Server startup auto-update now feeds modified_entity_ids into
    the stale-tracking set and seeds the auto-sync changeset hash for a
    clean workdir. Previously modifications between the last lift and
    a session restart silently dropped off the dashboard.
  • auto_lift on a non-* scope now drains stale entries for every
    in-scope entity. The pipeline freshens features for each
    regardless of existing state, so stale markers for those IDs are
    invalid after the call; the unconditional drain also handles the
    identical-features case where a cosmetic edit re-lifts to the
    same output.
  • Auto-lifted features for entities previously flagged stale now
    drain the stale-tracking set inline in
    get_entities_for_lifting, so the count doesn't inflate when the
    auto-lifter writes fresh features directly.
  • reload_rpg now prunes the stale-tracking set against the newly
    loaded graph rather than clearing it wholesale. The CLI / isolated
    sub-agent re-lift flow only refreshes entities with no features —
    stale entities survive it, so clearing would let lifting_status
    report 100% coverage while re-lift work remained.
  • reload_rpg drift-tracking reset now sits on the success path,
    after storage::load returns Ok. Transient read errors no longer
    wipe the backlog while leaving the previous graph in memory.
  • build_rpg now prunes the stale-tracking set against the newly
    built graph so dead entity IDs don't accumulate across rebuilds.
  • build_semantic_hierarchy sharded init no longer acquires
    hierarchy_session.write() before graph.read(). The original
    order formed a deadlock cycle with update_rpg's
    graph-then-session order under concurrent scheduling. The init
    path now collapses decision + snapshot into a single
    hierarchy_session.write() held under graph.read() and packages
    the work into an Action enum so there's no peek-then-trust.
  • build_batch_0_domain_discovery and build_cluster_batch now take
    &RPGraph and (where applicable) clusters as parameters instead
    of re-reading self.graph / self.hierarchy_session. Closes two
    TOCTOU windows: a session-clear race where a concurrent
    build_rpg/update_rpg could panic on session.as_mut().unwrap(),
    and a graph-replace race where a concurrent set_project_root
    could panic on `graph....
Read more

v0.8.2

14 Apr 09:47
a2782ec

Choose a tag to compare

What's Changed

  • feat: set_project_root MCP tool — switch project within a session (v0.8.2) by @userFRM in #86

Full Changelog: v0.8.1...v0.8.2

v0.8.1

14 Apr 07:56
e1423ad

Choose a tag to compare

What's Changed

  • docs: README redesign with Gemini 3 generated diagrams by @userFRM in #82
  • feat: auto-sync on workdir changes (not just HEAD) by @userFRM in #83
  • fix: v0.8.0 workdir auto-sync was a no-op (Codex catch) + v0.8.1 release by @userFRM in #84

Full Changelog: v0.8.0...v0.8.1

v0.8.0

13 Apr 21:28
6ceaa02

Choose a tag to compare

What's Changed

  • feat: add Claude Code skill and Gemini CLI extension by @userFRM in #68
  • fix: handle root scope in shared search by @VooDisss in #70
  • feat: auto-staleness, semantic snapshot, MCP annotations by @userFRM in #71
  • overhaul: cleanup, Claude Code hooks, README rewrite by @userFRM in #72
  • feat: hot spots in snapshot + tool waste marketing by @userFRM in #73
  • feat: auto_lift MCP tool — autonomous lifting via external LLM API by @userFRM in #74
  • fix: deadlock, graph loss, API key leak (audit criticals) by @userFRM in #75
  • fix: address all remaining audit findings (#4, #5, #6, #7, #14) by @userFRM in #76
  • fix: address all Codex audit findings (8/8) by @userFRM in #77
  • release: v0.8.0 — version bump, CHANGELOG, honest docs by @userFRM in #78
  • chore: sync npm package.json to v0.8.0 by @userFRM in #79
  • fix: release CI — macOS Intel + aarch64-linux build failures by @userFRM in #80
  • fix: drop x86_64-apple-darwin target (macos-13 deprecated) by @userFRM in #81

Full Changelog: v0.7.0...v0.8.0

v0.7.0

27 Feb 15:50

Choose a tag to compare

What's Changed

  • feat: implement rpg_analyze_health tool - Code Health Meter by @VooDisss in #59
  • PR: Add detect_cycles MCP Tool for Circular Dependency Detection by @VooDisss in #61
  • refactor: clean up cycles.rs code quality by @userFRM in #65
  • feat: add workspaceFolder variable expansion to MCP server by @VooDisss in #63
  • feat: autonomous LLM-driven lifting (rpg-lift crate) by @userFRM in #67

Full Changelog: v0.6.7...v0.7.0

v0.6.7

24 Feb 18:02

Choose a tag to compare

Full Changelog: v0.6.6...v0.6.7

v0.6.6

24 Feb 17:28

Choose a tag to compare

Full Changelog: v0.6.5...v0.6.6

v0.6.5

24 Feb 09:03

Choose a tag to compare

What's Changed

  • fix: detect deletion of untracked files during update_rpg by @userFRM in #57

Full Changelog: v0.6.4...v0.6.5

v0.6.4

23 Feb 10:25

Choose a tag to compare

What's Changed

  • feat: feature-gate embeddings for ARM64 Linux support by @userFRM in #55

Full Changelog: v0.6.3...v0.6.4

What's Changed

  • feat: feature-gate embeddings for ARM64 Linux support by @userFRM in #55

Full Changelog: v0.6.3...v0.6.4

v0.6.3

22 Feb 08:01

Choose a tag to compare

What's Changed

  • fix: normalize paths in MCP tools for cross-platform consistency (tested manually - issue fixed) by @VooDisss in #53

New Contributors

Full Changelog: v0.6.2...v0.6.3