Skip to content

Remove curation - #123

Merged
dacorvo merged 4 commits into
mainfrom
remove_curation
Aug 28, 2026
Merged

Remove curation#123
dacorvo merged 4 commits into
mainfrom
remove_curation

Conversation

@dacorvo

@dacorvo dacorvo commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator

This removes the curation verb and the whole concept of project memory store. My own experiments with huggingface/funes-memory showed me that it is far easier to do an agent assisted curation than to use the awkward tools I had developped. Lesson learnt: don't develop a user interface when the agent is a better interface.

dacorvo and others added 3 commits August 28, 2026 14:33
`--sessions` makes the list the decision: exactly those sessions' chunks ship,
no curation consulted. Omitted, every existing path is unchanged. This is the
contract that lets curation publish without a ledger, so it lands before
anything is deleted.

An unrecognized session id fails the push: publishing the subset that resolved
would report success while sessions stayed behind, on a path with no retraction.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Curation becomes strictly agent-assisted, so the machinery built for a human
picker has nothing left to do: `push --sessions` carries the selection, and the
stamp that named a project memory existed only to switch the ledger on.

Gone: the include/exclude ledger and its staleness tracking, the push gate,
project naming and its schema stamp, the pending-review reporting in `push` and
`status`, `funes curate` entirely, and the TUI engine whose last consumer was
its picker. `ids_by_session` and `sanitize` move into `push`, `is_scaffolding`
into `recall` — the only caller each has left.

BREAKING: a push with no `--sessions` publishes everything the remote does not
already hold. Existing ledgers under `$FUNES_HOME/curation/` stay on disk, inert.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Its last caller was the curation picker's preview pane; the CLI path went when
`get` became agent-only. That takes the whole human-rendering half of the module
with it — mark highlighting, the tool one-liner and its payload extraction, and
the wrapping — since nothing else called any of it. `dim` stays: `ask` uses it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR removes the curate command / “project memory” concept (including the TUI review flow and its gating behavior) and replaces it with an explicit publishing mechanism: funes push --sessions …, where the session list itself is the publish decision.

Changes:

  • Remove funes curate command, curation state/files, and the in-process TUI picker used for interactive review.
  • Extend funes push to optionally publish only explicitly named sessions (--sessions), updating CLI, docs, and tests accordingly.
  • Simplify UI rendering by keeping only the stable agent-format output for read verbs; remove now-unused human-view rendering paths and dependencies (e.g., nucleo-matcher).

Reviewed changes

Copilot reviewed 19 out of 20 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
tests/push_round_trip.rs Updates push invocations to pass the new sessions slice parameter.
tests/push_card.rs Updates push invocations to pass the new sessions slice parameter.
tests/curate_gating.rs Deletes the e2e test that depended on project-memory curation gating.
src/ui/tui/curate.rs Deletes the curation-specific TUI picker model.
src/ui/tui.rs Deletes the generic list+preview TUI engine used by curate.
src/ui/render.rs Updates docs/comments and removes the human get rendering helpers/tests, keeping agent-format rendering.
src/ui.rs Removes the tui module export now that TUI curation is gone.
src/memory/remote.rs Removes schema-metadata amend helper used for project-memory “naming”.
src/main.rs Removes Curate subcommand; adds --sessions support to Push and wires through to run_push.
src/commands/recall.rs Removes curate dependency; inlines is_scaffolding logic needed for session prompt extraction and updates status output.
src/commands/push.rs Implements --sessions-based selection, removes curation gating logic, and adds helpers for session→chunk resolution.
src/commands/curate.rs Deletes the entire curation/project-memory implementation.
src/commands.rs Removes the curate module export.
README.md Updates docs pointers/command list to remove curate and describe selection publishing.
docs/storage.md Updates terminology from “curated project memory” to “published selection”.
docs/push.md Replaces the “Project memories: funes curate” section with “Publishing a selection: --sessions”.
docs/configuration.md Removes curation/ from $FUNES_HOME layout and related environment variable docs.
docs/add.md Removes mention of preserving curation decisions.
Cargo.toml Removes nucleo-matcher; updates ratatui comment to reflect remaining usage.
Cargo.lock Removes nucleo-matcher from the lockfile.
Suppressed comments (1)

src/commands/push.rs:413

  • When --sessions is used on a first publish (remote missing/empty), rows_to_push(..., first_publish=true) disables the id IN (...) filter and ends up scanning/publishing the entire local dataset, ignoring the session selection. This can leak unintended sessions on the initial publish.
        return Ok(format!("{}: up to date ({} chunks)\n{note}", target.label(), remote_ids.len()).into());

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread src/commands/push.rs Outdated
`rows_to_push` skips the `id IN (…)` filter on a first publish, since every
local id would be in the list. That held while an empty remote could only ever
be published whole; `--sessions` makes a scoped first publish reachable, and the
shortcut ignored the selection — naming one session shipped every local session
to a remote that cannot retract it.

The shortcut is now the unnamed case only, and the parameter says what it
controls rather than when it happens.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 19 out of 20 changed files in this pull request and generated no new comments.

Suppressed comments (3)

Previously missed (3) — in code that hasn't changed since the last review.

src/commands/push.rs:324

  • The error message for unknown session ids is grammatically incomplete ("lists what is"), which makes it harder to understand what the user should do next.
        bail!(
            "not in your local memory: {} — `funes sessions` lists what is",
            unknown.join(", ")
        );

src/commands/push.rs:289

  • ids_by_session always scans the entire local dataset (id + session_id for every row). For large memories, funes push --sessions ... will pay an O(N) full-table scan even when publishing a single session; this is a noticeable performance regression for the selection workflow.
/// A memory's rows as session → chunk ids, the shape a selection is resolved against.
pub(crate) async fn ids_by_session(ds: &Dataset) -> Result<HashMap<String, Vec<String>>> {
    let batches = dataset::scan_rows(ds, &["id", "session_id"], None, None).await?;

docs/storage.md:18

  • This table header still says "Published project", but the surrounding text and the rest of the table now describe a published selection. Updating the header keeps the terminology consistent.
| | Local development | Published project |

@dacorvo
dacorvo merged commit 2112a39 into main Aug 28, 2026
9 checks passed
@dacorvo
dacorvo deleted the remove_curation branch August 28, 2026 15:37
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.

2 participants