Merge ticket 052: allow clearing all params and re-extracting from ingested logs
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XFUNZwCvz3kcod3352ZR2o
This commit is contained in:
@@ -1,79 +0,0 @@
|
||||
# 052 — Allow clearing all params, then re-extract them from already-ingested logs
|
||||
|
||||
## Summary
|
||||
|
||||
There is no bulk "clear params" action. The engine already supports
|
||||
removing a single param declaration internally —
|
||||
`EngineMessage::RemoveParamDeclaration { name, respond_to }`
|
||||
(`src/engine.rs:85-92`), handled at `src/engine.rs:190-197` by removing
|
||||
the `IndexKey::ParamDeclaration` entry — but it is only ever invoked from
|
||||
`reload_engine_declarations` (`src/api.rs:664-682`), a profile-switch
|
||||
cleanup path that filters out auto-derived params (comment at
|
||||
`src/api.rs:665-668`) and removes the rest one at a time. There is no
|
||||
route exposing this to the user, no persistence-side removal method
|
||||
(`src/profile.rs` has `record_param_declaration` at `profile.rs:606` but
|
||||
nothing to un-record it), and no webapp affordance
|
||||
(`webapp/src/lib/api.ts:283-287` only exposes `getParams`/`declareParam`).
|
||||
|
||||
The harder half of this request — "logs get re-iterated to extract
|
||||
params from them" — is not just a rewording of `auto_declare_params`.
|
||||
That function runs once, at ingest time, against each incoming line
|
||||
(`src/engine.rs:154`, `auto_declare_params` defined at
|
||||
`src/engine.rs:307-325`, backed by `extract_pairs` in `src/logfmt.rs`) and
|
||||
is never replayed. Re-extraction after a clear means running that same
|
||||
logic again, after the fact, against lines already sitting in the index.
|
||||
This is structurally possible: raw ingested text is retained as
|
||||
`IndexKey::IngestedLog { sequence, timestamp } -> DataValue::LogLiteral`
|
||||
in the same `BTreeMap` (`src/engine.rs:148-152`), occupying the index
|
||||
range between `IndexKey::Start` and `IndexKey::LogParamSplit`
|
||||
(iterated at `src/engine.rs:1166`, `1181`) — but only for lines that
|
||||
haven't already been evicted by `max_logs`/`evict_excess_logs`
|
||||
(`src/engine.rs:151-156`). Lines evicted before a clear+re-extract cannot
|
||||
regain their params; this bound should be surfaced to the user, not
|
||||
silently ignored.
|
||||
|
||||
Note `main.rs:75-96`'s `profile::load_into_engine` replay path is not
|
||||
directly reusable here — it replays *declarations* into a fresh engine
|
||||
before ingest starts, whereas this feature must re-run *extraction*
|
||||
against logs the engine already holds.
|
||||
|
||||
## Scope
|
||||
|
||||
- Add a bulk "clear params" `EngineMessage` (or reuse
|
||||
`RemoveParamDeclaration` in a loop, mirroring
|
||||
`reload_engine_declarations`'s existing pattern at
|
||||
`src/api.rs:664-682`) that removes all declared params — deciding
|
||||
whether auto-derived and manually-declared params are both cleared or
|
||||
only one category, and stating that choice in the PR (the existing
|
||||
`reload_engine_declarations` precedent excludes auto-derived ones for a
|
||||
reason worth re-reading before copying it here).
|
||||
- Add a persisted-removal counterpart in `src/profile.rs`/`src/settings.rs`
|
||||
so cleared params don't reappear from `settings.json` on next load.
|
||||
- After clearing, re-run `auto_declare_params` against every retained
|
||||
`IndexKey::IngestedLog` entry still in the index (oldest to newest, to
|
||||
preserve declaration-order semantics), producing a fresh param set from
|
||||
currently-available log text.
|
||||
- Expose this as a single user-facing action (`DELETE /api/params` or
|
||||
similar in `src/api.rs`, plus a button in whatever webapp component
|
||||
hosts the params list) — not a per-param loop the user has to drive
|
||||
from the UI.
|
||||
- Surface to the user (via response body or UI copy) that re-extraction
|
||||
only covers logs still retained in memory, not lines already evicted by
|
||||
`max_logs`.
|
||||
|
||||
## Acceptance criteria
|
||||
|
||||
- Triggering "clear params" removes all param declarations from
|
||||
`GET /api/params` and they do not reappear after a restart.
|
||||
- Immediately after clearing, params re-appear derived from the log text
|
||||
still held in the engine's index, without requiring new lines to be
|
||||
ingested, verified with a seeded fixture where params are cleared and
|
||||
re-extracted from a fixed set of already-ingested lines.
|
||||
- If some lines have been evicted before the clear, the re-extracted
|
||||
param set reflects only the retained subset, and this is not reported
|
||||
as an error.
|
||||
|
||||
## Depends on
|
||||
|
||||
None (touches the same `RemoveParamDeclaration`/`reload_engine_declarations`
|
||||
seam used by profile switching).
|
||||
Reference in New Issue
Block a user