Skip to main content

RFC โ€” Remove satori/go.uuid (EOL) โ€” standardize on google/uuid

Bucket item: A4 ยท Class: ๐ŸŸก Standard ยท Jira Story: TF-3504 ยท Epic: TF-3500

Context / Problemโ€‹

The service pulls two UUID libraries:

LocusPackage
go.mod:29github.com/satori/go.uuid v1.2.0 โ€” deprecated / unmaintained
go.mod:17github.com/google/uuid v1.6.0 โ€” maintained, already vendored

satori/go.uuid is abandoned and had randomness/security advisories in older tags. Two UUID libraries create inconsistency. Remove satori/go.uuid and standardize on google/uuid (already present).

Proposed changeโ€‹

Replace all satori/go.uuid call sites with google/uuid, then drop the dependency.

Execution plan (call to action)โ€‹

  1. grep -rn "satori/go.uuid" โ€” enumerate every import + call site.
  2. Port each: uuid.NewV4() โ†’ google/uuid uuid.NewRandom() / uuid.New(); uuid.FromString โ†’ uuid.Parse. Watch byte-order/format parity where UUIDs are persisted or compared.
  3. Remove satori/go.uuid from go.mod; go mod tidy; build + test.
  4. Confirm no wire/DB-format change for any persisted UUID (guard-rail: existing rows still parse).

Risks & rollbackโ€‹

  • Risk: low-medium โ€” API differences (NewV4 error-return, FromStringโ†’Parse) and any place relying on satori's exact string/byte formatting.
  • Rollback: revert the call-site diff + go.mod change; both libraries coexist as before.

Open questionsโ€‹

  1. Any persisted or externally-exchanged UUID whose format must remain byte-identical?
  2. Any transitive dependency that itself pulls satori/go.uuid (so it can't be fully dropped yet)?