refactor(presence): execute the extinction_sec/anneal_sec withdrawal
docs/SPEC.md specified this removal, listed its parts, and ended "grep
for both names and expect no survivors". There were about forty.
docs/requirements.md meanwhile recorded both constants as Withdrawn and
"deleted rather than retained at zero", on the grounds that a field
naming a mechanism the pipeline no longer has is actively misleading.
Neither statement was true of the code: Config still carried
extinction_sec 57.4 and anneal_sec 35.5, --extinction and --anneal still
parsed, and SceneTrackerFunc still ran its keep-alive in both shipped
pipelines, announcing its timeout at every startup.
SceneTrackerFunc is replaced by FrameAnnotationFunc, which is stateless:
same ports, same output type, no keep-alive. Presence belongs to
TrackRegistry (AR-012), where a window is the extent of a track an actor
owned and ends at the last sighting (AR-013). The keep-alive answered
that question a second time and answered it worse, by re-opening exactly
the trailing cool-down AR-013 refuses.
Visible change: --verbosity standard's frames[].identified listed every
actor inside the keep-alive, including ones absent from the frame. It
now lists what was matched in that frame. Minimal and xray output is
untouched -- both were already built from registry claims and never
consulted this node. No schema bump: the published extraction block
reports track_extinction_sec, a different knob that bounds
re-association and never extends a claim.
TrackRegistry::Config::extinction_sec is renamed track_extinction_sec to
match the Config field feeding it, so the grep SPEC.md asks for now
returns nothing rather than one confusing false positive.
Two targets turned out to have been silently dead, both since the
AR-007/AR-008 tracker redesign, and both for the same reason -- they
construct FaceTrackerFunc from a Config alone, a signature that stopped
existing when association moved into probability space:
- scene_preview is fixed here. It now mirrors main.cpp's construction
order exactly (matcher, then registry, then tracker) and wires the
registry's claims into the sink, which it was not doing. DP-001 says
modes are front-ends that must not fork pipeline logic; this one had
forked it and then rotted.
- sae_kpn is not fixed. Restructuring the seam so the tracker can reach
a calibration that only exists once the matcher is built is VR-011's
rewrite, not a patch, and presence claims do not cross the seam at all
today. It is now behind SAE_BUILD_KPN_BINDINGS=OFF with the reason
recorded, so `cmake --build` succeeds and the breakage is attributed
rather than rediscovered.
That second one is worth stating plainly: VR-002 ("replay drives the
real KPN nodes, not a reimplementation") is marked Done, and the module
that makes replay possible has not compiled for some time. The .so in a
stale build/ predates the change.
Python side: the two names are gone from optimize.py, replay.py and
run_holdout_all_models.py as Config keys. anneal_sec survives as
REPLAY_LOCAL_KEYS -- it still configures replay.py's own windowing,
which is a Python reimplementation that no longer matches the sink and
is documented as such. That divergence is VR-011's.
TRACES: AR-012, AR-013 | DP-001 | SR-002
This commit is contained in:
+19
-10
@@ -151,16 +151,25 @@ struct Config {
|
||||
double track_extinction_sec{5.0};
|
||||
|
||||
// ── Scene tracking ────────────────────────────────────────────────────────
|
||||
// extinction_sec re-tuned by DE against X-Ray per-second presence, 4-film rep4
|
||||
// matrix (docs/rep4-optimizer-results.md). Reverses the earlier "short is better"
|
||||
// finding: with a stricter prob_threshold, a long extinction window bridges real
|
||||
// presence gaps (occlusion, turned face) instead of just smearing FPs — every
|
||||
// model's best config pushed to ~90%+ of the search ceiling (tried up to 60s).
|
||||
// The ceiling kept getting hit, so treat 60 as "good enough", not a proven optimum.
|
||||
double extinction_sec{57.4}; // keep actor active this many seconds after last detection
|
||||
// anneal_sec: previously found INSENSITIVE at a 1–30s range; the wider rep4 sweep
|
||||
// (1–60s) also pushed this to the ceiling alongside extinction_sec (see above).
|
||||
double anneal_sec{35.5}; // merge actor windows separated by less than this into one epoch
|
||||
// TRACES: AR-012, AR-013 | SR-002
|
||||
// extinction_sec (57.4) and anneal_sec (35.5) are GONE, along with
|
||||
// SceneTrackerFunc, which is what read the first of them. docs/SPEC.md
|
||||
// specified this removal and ended it "grep for both names and expect no
|
||||
// survivors"; there were about forty, and the register meanwhile recorded
|
||||
// both as Withdrawn and "deleted rather than retained at zero" on the
|
||||
// grounds that a field naming a mechanism the pipeline no longer has is
|
||||
// actively misleading.
|
||||
//
|
||||
// Both existed to bridge gaps between isolated accepted frames. A track
|
||||
// that survives its own gaps leaves them nothing to do: AR-012 makes a
|
||||
// window the extent of a track an actor owns, and AR-013 ends it at the
|
||||
// last sighting. The keep-alive answered the same question again and
|
||||
// answered it worse, by re-opening exactly the trailing cool-down AR-013
|
||||
// refuses.
|
||||
//
|
||||
// track_extinction_sec above is NOT the same knob under a new name. It
|
||||
// bounds how long a lost track stays available for re-association, which is
|
||||
// a tracking question; it never extends a presence claim.
|
||||
|
||||
// ── Per-film gallery expansion ────────────────────────────────────────────
|
||||
// Within one uncut track every face is the same physical person — a free
|
||||
|
||||
Reference in New Issue
Block a user