Skip to content

get_object_locking carries the freshness stamp its latest-anchored read owes, and the shrink-only census shrinks back (Erik's ruling on #3878's roster call) #3880

Closed

Description

@erikdarlingdata

Erik's ruling on the judgment call recorded in #3878 / PR #3879: stamp it, don't roster it.

#3879's fix made DarlingObjectStatsReader.IndexLockingSql visible to the latest-anchored-reads census for the first time (its old per-name anchor sat inside a CTE, which the scanner ignores as picking a set — the defect itself had hidden the read). The lane rostered it on the shrink-only LatestAnchoredReadsWithoutTheirStamp list with the pre-existing-debt-made-visible argument. Erik prefers the better end state: the read gains a real freshness stamp and the roster shrinks back.

Work:

  • get_object_locking's payload gains the house freshness stamp for latest-anchored reads — mirror exactly how the already-stamped snapshot reads in DarlingObjectStatsReader.cs / the McpLatestSnapshotStampTests swept set carry theirs (field name, semantics, and placement come from the existing pattern, not invented; the collection_health_age_seconds family is the reference for age-style stamps if that is the house shape here).
  • Remove the IndexLockingSql entry Darling's four object-locking reads anchor on the server's latest capture, not on per-name groups (#3878) #3879 added to LatestAnchoredReadsWithoutTheirStamp in McpPayloadContractCensusTests — the census resumes shrinking, which is its designed direction.
  • McpLatestSnapshotStampTests' sweep already includes GetIndexLockingAsync; verify the read now satisfies the stamped arm rather than the roster exemption.
  • Tool Description (and the get_object_locking instructions row, if one exists) documents the field the way the stamped siblings do.
  • Cross-SKU parity check: if Lite's get_object_locking twin (Lite/Mcp/McpObjectStatsTools.cs) is the same latest-anchored-unstamped shape, stamp it identically; if Lite's censuses have no such roster, note the asymmetry rather than inventing one.
  • The Darling's four object-locking reads anchor on the server's latest capture, not on per-name groups (#3878) #3879 live rename pin (DarlingIndexLockingRenamedDatabaseLivePostgresTests) parses the tool envelope — extend it (or the surface pin) to assert the stamp is present and sane.

Follow-up to #3876 → #3877 (Lite fix), #3878 → #3879 (Darling twin + the roster call this reverses by ruling).

Activity

  1. erikdarlingdata commented on Sep 22, 2026

    @erikdarlingdata
    OwnerAuthor

    Claimed — filed by the pm-user-worker seat itself as the rule-11 standalone for Erik's direct ruling ("stamp it") on the #3878/PR #3879 roster call. Lane fix/3880-object-locking-freshness-stamp is in flight; the production commit (both SKUs' get_object_locking stamped with the snapshot timestamp, mirroring the stamped siblings' pattern) is already banked, pins and census-shrink in progress.

  2. erikdarlingdata commented on Sep 22, 2026

    @erikdarlingdata
    OwnerAuthor

    Closed by the watcher: delivered in PR #3883, merged to dev.

  3. erikdarlingdata commented on Sep 22, 2026

    @erikdarlingdata
    OwnerAuthor

    Done in the squash above (PR #3883): both SKUs' get_object_locking payloads carry the snapshot's own collection_time — projected on the row statement rather than re-read, so a capture landing mid-read cannot mis-stamp — the sweep takes the read through its stamped arm on both suites, the roster entry #3879 added is removed (the shrink-only census resumes shrinking), and the live rename pin asserts the stamp against a real store. Ships with the next nightly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions