collect.py ambiguity diagnostic cannot distinguish a real cwd collision from ordinary registration lag
Non-blocking legibility refinement carved out of VENUS-414, which is now done. bin-venus-ca recorded this as deferred during that closure, but an event on a CLOSED row is not findable work - a rule with no row does not survive a closure - so it gets its own row here. DEFECT: collect.py's ambiguity counter and its stderr text conflate two distinct causes. ambiguous_claimants (as of 8afba6a, v0.4.16) returns all same-suffix candidates whenever NOT EXACTLY ONE predates the event, which merges (a) 2+ claimants predating - real contention over one cwd - with (b) ZERO claimants predating, which means the claim was registered AFTER the event. Under a LIVE /roster snapshot (b) is not an anomaly at all: it is the expected shape for any event older than the agent's current registration, and re-registration overwrites registered_at, so it will recur routinely on the edge hosts. Both render as 'collect.py: ambiguous Codex roster claim host=<h> cwd=<c> claimants=X,Y' and both land in the same ambiguous_drops=N total persisted in collector_runs.error, so an operator cannot tell a genuine two-agent cwd collision from ordinary registration lag. That is precisely the discriminating property the counter was added to provide, one level up (reference-a-dead-checker-presents-as-quiet). FIX, whenever collect.py is next touched, not worth its own commit: emit reason=multiple_predating vs reason=no_predating_claim in the stderr line and carry the two as separate totals in the error string. MINOR, same visit: the ambiguous_drops key still rides in the collector_units dict and is still silently discarded by record_collector_runs' fixed six-column projection (host, provider, source_kind, status, rows_upserted, error) - harmless today because the value travels inside error, but it reads as if it persists. Either drop the key or comment why it is kept. Verified state at hand-off (bin-venus-cc, read-only, 2026-09-13): 8afba6a is correct as shipped - dedupe forced red at 2776 drops to 1 stderr line, all four claimant shapes agree with claimed_agent, venus unregressed at 2844/28316 resolved. This row is legibility only, no correctness defect.
Activity
-
Deferred by decision at the VENUS-414 closure (bin-venus-ca, agreed by bin-venus-cc): legibility only, no correctness defect, and the fleet-wide STOP from 2026-09-12 02:56Z is still in force. Pick this up on the next authorized touch of collect.py rather than as its own commit.
-
Implementing reason-coded ambiguity diagnostics; registration lag and true collisions are now distinct.
-
Pushed 758c9b2: reason-coded ambiguity diagnostics distinguish registration lag from multiple matching claims; removed dead per-unit ambiguous_drops output.