Skip to content

Day 168 — Month 6 Review + Tag v1.0.0 (Graduation)

Month 6 · Week 4 · ⬅ Day 167 · Month 6 review ➡ · Journal index

🎯 Learning Objective

Close out Week 4 and Month 6: consolidate the capstone, prove retention with recall, and ship v1.0.0 — the graduation tag for the whole six-month journey.

📚 Topics

  • Capstone retro (architecture → APIs → persistence/cache → observability/deploy → tests → docs)
  • Release: semantic version v1.0.0 · annotated git tag · release notes

📖 Reading / Sources

📝 Notes

  • This is a light consolidation day; the full week retro, re-quiz, and metrics live in the week review, and the six-month wrap-up in the month review.
  • One-line thread of the capstone: the same link.Service is wrapped by REST and gRPC, backed by Postgres-behind-a-port with a Redis cache-aside, made observable by slog/metrics/traces sharing one correlation id, shipped as a distroless image that drains on SIGTERM, and proven by a unit→integration test pyramid.
  • v1.0.0 signals a stable public contract (SemVer): breaking changes now require v2. The annotated tag carries release notes; the binary stamps its version via runtime/debug.ReadBuildInfo (from [[day-148]]).

💻 Code Examples

# Graduation release: annotated tag + notes, version baked into the binary.
git tag -a v1.0.0 -m "linkr capstone: REST+gRPC link shortener (Month 6 complete)"
git push origin v1.0.0
go build -ldflags="-X main.version=v1.0.0" ./cmd/linkr   # see day-148 buildinfo

Build-info stamping is runnable: examples/month-06/buildinfo · Run: go run ./examples/month-06/buildinfo

🏋️ Exercises / Practice

Exercise Status Link
shortcode · linkstore · lrucache (all go test green) exercises/month-06/week-4/

🐛 Mistakes Made

  • Almost tagged v1.0.0 from a dirty tree — tag a clean, CI-green commit so the version maps to exactly what was tested.

❓ Open Questions

  • What's the first v1.1.0 feature? (Custom vanity codes + per-link analytics are the obvious next increment.)

🧠 Active Recall (answer without looking)

  1. Q: Trace one resolve request through linkr, naming the component at each layer.
    A

REST/gRPC transport decodes the request and starts a span → middleware mints/propagates a correlation id and times it → link.Service.Resolve runs business rules → the Redis cache-aside layer checks the cache (hit returns; miss falls through) → the pgx Postgres adapter ByCode queries the source of truth and maps ErrNoRowsErrNotFound → hit count is recorded best-effort → the transport encodes the response, metrics/log/trace are emitted, all sharing the correlation id. 2. Q: What does tagging v1.0.0 promise under SemVer, and how does the binary know its own version?

A

v1.0.0 promises a stable public API — backward-incompatible changes require a major bump to v2. The binary reads its version from runtime/debug.ReadBuildInfo() (VCS revision when built from a tagged commit) or an -ldflags="-X"-injected var, exposed on a /version endpoint.

🪶 Feynman Reflection

Six months ago "production Go" was a phrase; today it's a checklist I can execute — layer the code so the core is testable, expose it over the right transports, persist and cache it correctly, make it observable, ship it small and graceful, test the real wiring, document the why, and tag a stable release. The capstone isn't new knowledge so much as proof that the month's pieces compose into one running thing.

🕳️ Knowledge Gaps

  • See the month review "Areas for Improvement" — chiefly real load-testing numbers and trace sampling at scale.

✅ Summary

Month 6 and the journey are complete: linkr is a documented, observable, deployable REST+gRPC service tagged v1.0.0. Full retros are in the week and month reviews.

⏭️ Next Steps / Prep for Tomorrow

  • Maintain the spaced-repetition deck; pick a v1.1.0 feature; start contributing the patterns back to open source.

Time spent Difficulty Confidence
75 min 🟦⬜⬜⬜⬜ 🟦🟦🟦🟦⬜

Suggested commit: docs(journal): month 6 review + tag v1.0.0 graduation (day 168)