Skip to content

chore(accounts): move off the untagged interface-cache pseudo-version onto go/cache v0.4.1 #1207

Closed

Description

@antoinetoussaint-byte

module/services/accounts/code/go.mod depends on the cache library by an untagged
pseudo-version
:

github.com/codefly-dev/interface-cache/go/cache v0.2.2-0.20260926205419-327a6e1d9aba
github.com/codefly-dev/service-redis/cache v0.2.0

That is a commit from 2026-09-26 on a v0.2.x line. The library is at
go/cache/v0.4.1 and the driver at cache/v0.3.0. A pseudo-version also
means nobody can tell from the file whether this is ahead of or behind a release,
and go get -u will not move it onto a tagged line on its own.

Used in pkg/infra/redis.go, pkg/membership/membership.go, and asserted on in
pkg/business/cardinality_quota_test.go and pkg/membership/membership_test.go.

What the gap contains

Between that commit and v0.4.1, the parts that change behaviour for a consumer:

  • Entry.Expires — an origin's own freshness bound, which narrows the stack's
    retention and never widens it. Without it a read-through origin's bound was
    discarded by stamp.
  • Entry.NoStore — serve this value once, store it in no tier. The shape that
    makes a value the cache must not keep (a partial or disagreeing read) safe to
    return.
  • retention clamp, and judge checking Expires before the mode switch, so a
    bounded entry is not served stale by a mode that would otherwise allow it.
  • observer-panic recovery in report() plus WithObserverErrors — a panicking
    observer no longer takes the request with it.
  • go/cache/cachetest — the contract suite (Modes, Pitfalls, Simulation, Stack)
    a driver and a consumer can both run, tightened in v0.4.1 to hold them to the
    Notifier contract a real driver keeps.

This is a migration, not a bump

The API moved across v0.3.0 and v0.4.0; expect the compile to break and expect
Capabilities/Declarer and the entry format to need attention on the driver side
(service-redis's own cache/go.mod is on go/cache v0.4.0, and its entry format
went to v2). Budget for reading the two tags' diffs rather than editing the version
string and running the tests.

Target:

github.com/codefly-dev/interface-cache/go/cache v0.4.1
github.com/codefly-dev/service-redis/cache v0.3.0

Then run the contract suite from cachetest against this consumer's stack rather
than only the existing unit tests — that is what the suite is for, and it is the
cheapest proof the migration is faithful.

Rebase order

Four open PRs already touch module/services/accounts/code/go.mod for unrelated
reasons — #1125 (Core v0.19.4), #1124 (operation child), #1076 (gateway
workload identity), #1027 (telemetry service removal). None of them touches the
cache dependencies, so there is no duplicated work, but whichever lands last pays
the go.mod/go.sum conflict. Check which have merged before starting and rebase
onto main rather than fighting a stale base.

Docs

A change in behaviour updates the docs describing it in the same PR; name them in
the PR body. Mention the dependency bump in whatever the module uses to record
dependency floors.

Filed alongside #1206 (the redis agent pin, which carries a live panic exposure).
These are deliberately separate: #1206 is a one-line pin that should ship without
waiting on this migration.

Activity

  1. antoinetoussaint-byte commented on Oct 22, 2026

    @antoinetoussaint-byte
    ContributorAuthor

    A lazybox agent is working on this. claude (Opus 5.5) started at 2026-10-21 20:09 UTC, last renewed the claim at 2026-10-29 16:40 UTC, and the claim lapses at 2026-10-29 17:40 UTC unless it is renewed again. A claim is an assertion with an expiry, not proof that a process is alive.

    claim detail
    Lazybox-Claim-Device: effacd542b611010656e
    Lazybox-Claim-Session: 629df4374c
    Lazybox-Claim-Workspace: github-codefly-dev-module-saas-starter-1207
    Lazybox-Claim-Agent: claude
    Lazybox-Claim-Model: Opus 5.5
    Lazybox-Claim-Started: 2026-10-21T20:09:48Z
    Lazybox-Claim-Heartbeat: 2026-10-29T16:40:35Z
    Lazybox-Claim-Expires: 2026-10-29T17:40:35Z
    
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

    workingClaimed by a lazybox agent; cleared when the session ends.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions