• v1.0.0 883112d2a3

    v1.0.0
    All checks were successful
    tag / tag (push) Successful in 13m44s
    check / go (push) Successful in 3m32s
    check / web (push) Successful in 9m15s
    release / binaries (push) Successful in 9m17s
    release / docs (push) Successful in 9m52s
    release / image (push) Successful in 11m7s
    release / android (push) Successful in 14m8s
    release / module (push) Successful in 3m56s
    release / manifests (push) Successful in 4m54s
    release / release (push) Successful in 24s
    Stable

    nalum released this 2026-08-11 21:21:22 +00:00 | 377 commits to main since this release

    Breaking changes

    • feat!: rename FAM_ env prefix to EAG_ (d86e1dc)
    • feat!: rename famorgasy to Eagraí Clainne (089765b)

    Features

    • feat(docs): mount the app's real header widgets on /docs (04b1142)
    • feat(docs): /docs header renders the app header proper (3ed9c30)
    • feat(docs): serve embedded /docs inside the app shell (a1e2f30)
    • feat(mcp): export_my_data tool, self-scoped and size-capped (cfe333d)
    • feat(android): download my data from Settings (261bbb5)
    • feat(web): personal data export in Settings and Admin (287eaeb)
    • feat(cli): famorgasy user export (f643831)
    • feat(system): per-user data export RPC (ADR-0027) (cdd4db6)
    • feat(deploy): TrueNAS SCALE custom app compose (557edcd)
    • feat(server): healthcheck subcommand for container probes (288319e)
    • feat(android): points and owner on the quick-add step form (203a09a)
    • feat(web): points field on the quick-add step form (ff26dc9)
    • feat(android): points on steps in the job sheet (3b54efe)
    • feat(web): points on steps in the job sheet (912d1ef)
    • feat(web): Today's job cards open the job sheet (32f2f80)
    • feat(android): points balance chip in the top bar (56c0029)
    • feat(web): points balance chip in the header (1745a7f)
    • feat(android): job sheet opens as a view before editing (7effde9)
    • feat(web): job sheet opens as a view before editing (06bf21d)
    • feat(mcp): sub-tasks on get_item and add_item (6c3dccf)
    • feat(cli): sub-task management commands (7da9b4f)
    • feat(android): sub-tasks in the job sheet (1de7577)
    • feat(web): sub-tasks in the job sheet (a4691ba)
    • feat(item): clone sub-tasks onto repeat successors (85055f2)
    • feat(item): parent_uid field, SetParent RPC and sub-task guards (3ecf7ce)
    • feat(docs): domain-grouped API sidebar with scroll tracking (99aef39)
    • feat(web): docs entry in the me-menu (ed4193d)
    • feat(docs): API reference sidebar and home link (46d0315)
    • feat(web): publish docs-theme hint for the docs pages (8c73d91)
    • feat(server): serve the docs site at /docs (3105fb7)
    • feat(docs): generated docs site via cmd/docsgen (eb541ca)
    • feat(cli): webhook commands (465a36b)
    • feat(web): webhooks admin tab (0eb6400)
    • feat(webhook): admin RPCs (fad79dd)
    • feat(webhook): dispatch seam (406353b)
    • feat(db): webhook table (bfd88ab)
    • feat(proto): WebhookService for outbound event targets (6c30919)
    • feat(system): admin toggle for the /mcp endpoint, default off (d65fe47)
    • feat(web/a11y): skip-to-content link in the shell (b395fc1)
    • feat(android): per-member language choice, synced like the web (5ace462)
    • feat(android): server address in the colophon on every board (07eee78)
    • feat(system): import and restore from backup archives (798c8d3)
    • feat(system): admin data export, backup and portable modes (2a9b053)
    • feat(deploy): sqlite PVC deployment, CNPG becomes the optional path (e703bea)
    • feat(server): db-driver and db-path config, sqlite default (d944d10)
    • feat(database): sqlite dialect with containment translation (25ea2be)
    • feat(android): profile switching parity - parked tokens, PIN pad (cea9f61)
    • feat(web): the switch-user sheet, PIN pad and parked profiles (ae4c369)
    • feat(auth): quick profile switching with parked chains and PINs (6ed37fe)
    • feat(web,android): the offline strip replaces the saved banner (0146dab)
    • feat(android): offline parity — full write queue, sync chip (7666f63)
    • feat(web): only the server ends a session (53bf46b)
    • feat(web): offline writes — a FIFO queue with replay (6172989)
    • feat(web): offline reads and service-worker shell (95049cd)
    • feat(server): accept client-minted uids on creates (3770116)
    • feat(rewards,family): close recorded parity gaps (c2b4820)
    • feat(calendar): the Android calendar closes its 2026-08-06 parity gaps (818c131)
    • feat(jobs): bring the full web job sheet and new-job flow to Android (e74295f)
    • feat(shell): the sign-in screen reaches Android parity (c0744b3)
    • feat(today): event sheet closes its two Today-board gaps (90ba759)
    • feat(family): the Family page reaches Android parity (7c68eab)
    • feat(shell): the web's motion canon arrives on Android (915a03e)
    • feat(shell): boards learn the web's job-grid on wide screens (d9b09dc)
    • feat(settings): the Settings page reaches Android parity (abcadfe)
    • feat(shell): move sign out from settings into the me-menu (03d0ef9)
    • feat(boards): every card joins the tilt (922b649)
    • feat(shell): web header locks in place like the app's (fae3fe8)
    • feat(shell): the me-menu converges across surfaces (57193f2)
    • feat(rewards): the Rewards page reaches Android parity (da44696)
    • feat(meals): the Meals page reaches Android parity; nav goes cal-nav (48a8414)
    • feat(android): the Lists pages reach web parity (d8fde22)
    • feat(android): the Watch stream brings live updates (9eb7b05)
    • feat(android): jobs board becomes the web's two views (8197ea5)
    • feat(calendar): back-to-today becomes a fixture between the arrows (97aa202)
    • feat(android): the calendar agenda carries the whole day (902e359)
    • feat(android): theme follows the member — settings sync lands (039e92a)
    • feat(android): the calendar opens to a month from 900dp (f098f39)
    • feat(android): port the web's Today board and Rewards claim flow (ef26952)
    • feat(android): port the web shell — boards, header, me-menu, bell (4bb3db1)
    • feat(android): the noticeboard look lands; Android 17 LAN fix (00912a5)
    • feat(parity): the rule-1 gaps close (1fa4c2c)
    • feat(make): the integration suite finds its Postgres (3e11da7)
    • feat(android): marks arrive (1243daf)
    • feat(ci,deploy): every artifact carries a seal (839a4c2)
    • feat(android): the app reaches parity's edge (ea38002)
    • feat(android,deploy): the phone hears the bell (5ed0363)
    • feat(android,auth): the app signs in and pulls its weight (e58774d)
    • feat(android): the app takes its first breath (415bef6)
    • feat(auth): sessions learn to outlive their tokens (9fb7ac7)
    • feat(web): the rota board goes up (a452ae8)
    • feat(seed): the sample rota (687f787)
    • feat(client,mcp): expose the meal rota to the assistant (85408d9)
    • feat(reminder): the board learns to speak first (a316205)
    • feat(mealrota,notify): the rota takes charge (66e337d)
    • feat(db): shelves for the rota (b500d9d)
    • feat(proto): the standing rota — MealRota and its service (f3c0742)
    • feat(meal): the pantry opens for business (8d0b44d)
    • feat(domain): meal helpers (80f2a75)
    • feat(db): a meal shelf joins the pantry (1809ba1)
    • feat(proto): add the meal library service (ce0fbba)
    • feat(web): the board taps you on the shoulder (4c2f79e)
    • feat(push): the whisper finds its voice (0c7504e)
    • feat(push): the board learns to whisper beyond its walls (ea2af8b)
    • feat(deploy): the board steps onto the LAN (ee9df99)
    • feat(web): the board learns its own version (a15f286)
    • feat(web): move language into the profile sheet (0b72ea0)
    • feat(web): the name in the corner opens a pinned note (1c156e3)
    • feat(i18n): the last strings pack their bags (94a8941)
    • feat(i18n): the household translates (d1f69c1)
    • feat(i18n): the calendar keeps ISO time but learns its month names (e9eadbc)
    • feat(i18n): translate the working day (62d082c)
    • feat(i18n): the front door greets in Irish (1e60a67)
    • feat(i18n): the shell speaks (9a2a221)
    • feat(i18n): the scaffolding goes up (215471b)
    • feat(web): the noticeboard look moves in (011282e)
    • feat(release): publish rendered manifests (bd75202)
    • feat(release): the timoni module rides the registry too (9115161)
    • feat(release): jobs pass the baton (a8ab5fe)
    • feat(server): the server introduces itself (920f075)
    • feat(release): flow versions from tag to binary (619e67d)
    • feat(mcp): the tools answer follow-ups (651f66a)
    • feat(svc): responses name their people (447cf04)
    • feat(web): the admin page manages api keys (ADR-0016 p7) (ecb0ee0)
    • feat(client): api keys reach the CLI (ADR-0016 p6) (996e4c9)
    • feat(mcp): the server speaks MCP at /mcp (436cfe9)
    • feat(auth): reward-bearing writes demand a human actor (ADR-0016 p4) (92a5db6)
    • feat(apikey): mint, list and revoke keys (ADR-0016 p3) (f0aed3e)
    • feat(auth): the interceptor speaks api_key (ADR-0016 p2) (387a8f0)
    • feat(auth): api keys are records first (ADR-0016 p1) (41a23f4)
    • feat(web): header mode toggle; tour mark step opens the 'My mark' sheet (519495c)
    • feat(auth): password changes orphan every earlier token (c59f34b)
    • feat(auth): the web session rides an httpOnly cookie (d2564ad)
    • feat(auth): every request resolves its subject from the record (cc5ae79)
    • feat(auth): the dev secret unpins and tokens live half a day (02e329e)
    • feat(db): the server applies its own schema on boot (92286c1)
    • feat(seed): the family command grows a whole tree on a fresh database (9c0e571)
    • feat: the family name greets from the header, tab, sign-in and TUI (c8e5781)
    • feat(calendar): who and what filters over the board (f8dad3a)
    • feat(calendar): the span cancel confirm names its dates (6c609ab)
    • feat(calendar): events span days — all day, one block, or daily times (6896ea4)
    • feat(tour): theme pick step after the mark (32f2005)
    • feat(admin): syntax highlighting on the raw JSON peeks (de55599)
    • feat(admin): raw JSON peek for members and audit events (d58160a)
    • feat(tour): role-based first-login walkthrough (9649133)
    • feat(auth): sliding token renewal and session-expiry handling (c9eb92b)
    • feat(admin): admin area — members, audit log, system settings (793e849)
    • feat(users): manual ex-partner links and household halo in the tree (9afb63e)
    • feat(events): repeating events — derived occurrences with overrides (fb00ad8)
    • feat(items): takers see the whole jobs board (bc63d3e)
    • feat(notify): live data feed — pages refresh over the stream (f4fcf1e)
    • feat(notify): claim announcements and points in completion news (57f48c5)
    • feat(notify): notifications — inboxes, live stream, bell, toasts (a551e03)
    • feat(items): repeating jobs — close-out mints the successor (7a4385e)
    • feat(users): self-service change password (03ef537)
    • feat(web): mark menagerie, fitting room everywhere, settings as cards (e7897c7)
    • feat(settings): sync theme and mark to the server (06aa429)
    • feat(web): split tree-only members out of the family grid (2c9cb78)
    • feat(web): tabs deep-link via ?view= in the URL (5b93c86)
    • feat(web): unclaimed jobs lead the Everyone view (9d1b587)
    • feat(web): up-for-grabs preview on the Today board (4acc41d)
    • feat(users): record-only members — living family without login (ac80488)
    • feat(tree): stronger family grouping in the tree layout (e01395c)
    • feat(seed): lists and linked points rewards (361e185)
    • feat(web): job points (bacc78b)
    • feat(web): lists land — index, detail, quick-add (6576c95)
    • feat(server): points auto-claim; reward link rules + LinkItem (a9d3af4)
    • feat(server): item lists (84ee4c0)
    • feat(rewards): claimed-only points balance; web reward delete (3dc7b1c)
    • feat(proto): item lists — ListRef, SetList, ItemListService (badf5aa)
    • feat(web): SVG chevrons for calendar navigation; wider day sheet (e0ac4b0)
    • feat(web): SVG close icon for sheets (19df759)
    • feat(web): day-view header with centred title, sticky above the clock (2e435cf)
    • feat(web): previous and next day navigation in the day view (fe0afae)
    • feat(web): calendar day timeline view (bdd51cf)
    • feat(seed): busy calendar days with 3-5 events (4aff303)
    • feat(seed): reusable dev-data seeder for the existing family (c99316b)
    • feat(web): rewards UI catches up with the points ledger (ADR-0003) (1d52017)
    • feat(web): job sheet and take-ownership UI (ADR-0014) (875386c)
    • feat(items): job ownership and editing rules (ADR-0014, backend) (2bab609)
    • feat(roles): widen role gates for members and children (b2f2839)
    • feat(web): colour-coded tree lines, sibling arcs, and a legend (6d3658f)
    • feat(web): family tree view (ADR-0005) (ab63f8f)
    • feat(setup): first-time setup flow via SystemService/SetupStatus (18f9d6f)
    • feat(domain): derive the family graph (ADR-0004) (3fc146d)
    • feat(rewards): points ledger with costed claims (ADR-0003) (02ed2ed)
    • feat(observability): provision the Grafana dashboard set (8819b56)
    • feat(svc): entity mutation counter and domain event counters (6acd5fe)
    • feat(auth): login, token and authorization-denial metrics (f8cda8d)
    • feat(db): operation duration histogram and pool gauges (d3b8df2)
    • feat(otel): global meter provider, runtime metrics, telemetry package (eee85bb)
    • feat: service authz, CLI user reference, profile self-service (3f9ea23)
    • feat(web): frontend foundation, sign-in profile picker, and Today board (af5895d)
    • feat(domain): restrict user deletion on live references (b2dd080)
    • feat(domain): extract entity behaviour into internal/domain (ce7bd99)
    • feat(user): scrub password_hash via svc.SanitizeInterceptor (adeec8e)
    • feat(observability): add config-driven OTLP exporters (f021284)
    • feat(cli): implement table formatter and shell completion (ed6eb47)
    • feat(api): add List RPCs across all services (2f7936c)
    • feat(deploy): add Kubernetes deployment via kind, CNPG, Timoni and Flux (4114dc0)
    • feat(reward): implement service handlers (001de39)
    • feat(item): implement service handlers (687055d)
    • feat(event): implement remaining service handlers (4484728)
    • feat(user): implement Delete handler (3ffd58b)
    • feat(database): add Delete primitive to Table and TxTable (bb52583)
    • feat(cli): add Makefile targets for CLI build (bc4b30d)
    • feat(cli): add all service commands (user, event, item, reward) (068b029)
    • feat(cli): add login/logout commands and output formatters (354d8c3)
    • feat(cli): add foundation with config and version command (4e11e06)
    • feat(client): expose all proto fields in reward params structs (12728be)
    • feat(rbac): define roles and permissions in protobuf (RFC 004) (adc8326)
    • feat: add Go client package for CLI tools and applications (ebe1db0)
    • feat(logging): add context-aware structured logging to reward service (bc724e2)
    • feat(logging): add context-aware structured logging to item service (69ba4fe)
    • feat(logging): add context-aware structured logging to event service (463595c)
    • feat(logging): add context-aware structured logging (372d89f)
    • feat(user): implement rfc-002 phase 4 role management (2bd8a97)
    • feat(auth): implement rfc-002 phase 3 (interceptor) (a20cfa9)
    • feat: implement rfc-002 phase 2 (AssignRoles, CompleteItem) (03942c0)
    • feat(auth): implement rfc-002 phase 1 (permissions) (be97e5e)
    • feat: implement RFC-001 (99a4808)
    • feat: update version package to match semver spec (4ded920)
    • feat: update services to work with new database structure (fdedaad)
    • feat: refactor to use cobra (4a48897)
    • feat: set up dagger and the version package (c73781f)
    • feat: create internal service packages (3f1cb67)
    • feat: create proto api and generate go code (3e35382)

    Fixes

    • fix: update the cosign public key (8144874)
    • fix(docs): concrete webhook envelope example in event reference (57b053c)
    • fix(docs): guides at clean URLs, API TOC nested under its entry (94ba31f)
    • fix(android): no refresh error line for the network's absence (9b284a3)
    • fix(android): docs entry in the me-menu (e9d27e9)
    • fix(android): Today job cards learn steps and open the job sheet (ac2b695)
    • fix(android): reachability learns from traffic and a heartbeat (e107e63)
    • fix(android): sync chip becomes a strip under the offline bar (3bd68c2)
    • fix(web): sync chip becomes a strip under the offline bar (5419d5b)
    • fix(android): keep Activity reachable through the member-locale context (3ffde81)
    • fix(web): step editors open under their own row (23fef05)
    • fix(web): day strip sits under the header; Today cards learn steps (1e6e13d)
    • fix(web): day view nav icon and pinned all-day strip (65eb2d1)
    • fix(audit): queue entries off the request path (baa2e1f)
    • fix(mcp): authenticate before revealing the disabled state (6532345)
    • fix(web/tree): let family-tree text follow the text-size setting (45c24d9)
    • fix(web/a11y): tie validation errors to their fields (09cbe80)
    • fix(web/a11y): announce save completion to screen readers (0cc58f4)
    • fix(web/i18n): set document language on locale switch (0a74e78)
    • fix(web,android): surface-on-danger for the offline strip (fd4841d)
    • fix(web): the strip rises unprompted; 5xx reloads keep the shell (f4fe28c)
    • fix(web,android): offline holes the real phone found (7571c47)
    • fix(calendar): month cells take the web's fixed dress and day-spread (e89f1a9)
    • fix(android): the bell hears its own stream — Subscribe joins Watch (26ae3ce)
    • fix(notifications): make the bell's badge an accent dot (bf20b6c)
    • fix(android): resolve every Material3 colour role via FamTokens (a30693b)
    • fix(mealrota): the cook ref goes unnamed (6440330)
    • fix(style): danger buttons get icons and the date canon its ruling (6645381)
    • fix(auth): close the setup window behind the first admin (566a1b1)
    • fix(android): every failure names its reason (570e46b)
    • fix(notification): route MarkAllRead through the svc seams (60fae06)
    • fix(android): the app wears its own face (d7659b4)
    • fix(android,ci): derive APK version from the release tag (b098829)
    • fix(android): give UnifiedPush the Activity it always wanted (f39efd4)
    • fix(ci): the android platform learns its full name (37cac9d)
    • fix(ci): absorb SIGPIPE from the sdkmanager license pipe (4349c4c)
    • fix(web): failures name their reason (8b39b7e)
    • fix(auth,web): the session survives a closed tab (a84c49c)
    • fix(push,deploy): opening-night stumbles smoothed (98c092d)
    • fix(web): narrow screens breathe (421480f)
    • fix(web): the board's mark rides the bottom bar too (c32bd26)
    • fix(i18n): family default reaches everyone who never chose (2e84580)
    • fix(deploy): OTLP export ships off by default (618fe4c)
    • fix(proto): codegen comes home (05f3f1f)
    • fix(deploy): the published module serves ClusterIP (27e2f1c)
    • fix(release): the module takes the plain name timoni under the org roof (9234382)
    • fix(deploy): the module default follows the repo to its org (f6d2852)
    • fix(release): artifacts speak v3 (8fbb4a9)
    • fix(ci): the lint's one quibble yields; buf pins its version (39b98e7)
    • fix(ci): caches wait for a reachable cache server (8e9465c)
    • fix(web): focus rings survive their scroll boxes (ed88d11)
    • fix(docs): the corner-pill tag sits above its positioned card (82e3e0b)
    • fix(calendar): the who filter lists active members only (8344965)
    • fix(calendar): the stretch cancel is called Cancel Span (5e5bb73)
    • fix(calendar): the whole-stretch cancel stands in plain sight (b5408a6)
    • fix(tour): steps pin heading and actions like the sheets (ef703e5)
    • fix(admin): the Everyone filter chip wears a mark (daf80e0)
    • fix(admin): audit filters wear the site's own controls (52dbdf8)
    • fix(admin): Add member sits beside the page title (edc7056)
    • fix(marks): prune departed members from the device caches (2d8161b)
    • fix(items): repeat successors compute in the rule's own time zone (661fac6)
    • fix(events): occurrence math runs in the family's timezone (4f9cad8)
    • fix(items): shared list entries are visible to takers (56552df)
    • fix(web): a deadline time without a date means today (15a0be2)
    • fix(web): dedupe optimistic adds against live-refreshed data (9ae7ca5)
    • fix(web): server verdicts reach the user instead of connection copy (42fea8d)
    • fix(rewards): linked-claim guard and two display gaps (a3f0d46)
    • fix(client): send explicit Complete=true in CompleteItem (fd0ca24)
    • fix(web): fixed-width day nav pills (478c63f)
    • fix(web): day-view header layout (90f36c9)
    • fix(web): cap calendar day cells at three rows (5ea8e80)
    • fix(web): keep the calendar grid inside the viewport (708c8d1)
    • fix(web): sink rootless tree nodes; dash ex-partner arcs (b7b8ad9)
    • fix(family): mirror partnerships in derived relations (4901572)
    • fix(client): read the auth token at request time, not at New (353df15)
    • fix(security): bump Go to 1.25.12 and patch vulnerable deps (d3e5fef)
    • fix(user): persist uid on create and preserve identity fields on update (0e04b81)
    • fix(auth): grant List RPCs the same roles as service Read (1f0a1e9)
    • fix(database): quote reserved-word table identifiers and migrate to pgx (29cb013)
    • fix(deploy): drop stray server subcommand arg from Timoni deployment (53d8010)
    • fix: bump deps and replace interface{} with any (afdf836)
    • fix: resolve golangci-lint errors in server, event, and logging (8eedeeb)
    • fix: bind cobra flags to viper and add mapstructure tags to config (87fe7b1)
    • fix: remove dep review as it needs a license (215e34c)
    • fix(ci): bump the go version and repair the auth test (96725ce)
    • fix: resolve golangci-lint errors (1ebfe91)
    • fix(ci): align golangci-lint and the go version (c80c82c)
    • fix: correct the go.mod module name (f5b3535)

    Other

    • ci: derive registry and mail domain from server URL (883112d)
    • refactor: purge residual fam- prefixes from icons and dashboards (3c2cf59)
    • docs(site): promote webhook events page into the nav bar (8c683cc)
    • docs(site): add webhook event trigger reference (f0ce33e)
    • docs(site): drop TrueNAS install guide from docs site (24cf210)
    • test(integration): per-user export end-to-end (99ce1af)
    • docs: TrueNAS install guide and distribution ADR (50c3961)
    • ci: attach TrueNAS compose to releases (c361efb)
    • test(integration): sub-task lifecycle coverage (84cd408)
    • docs: add ADR-0025 sub-tasks (200f059)
    • ci: build and release the docs site (4a50afd)
    • test(integration): webhook coverage over the wire (bd33de7)
    • test(mcp): enable the endpoint before the integration specs speak MCP (644fba6)
    • docs(adr): ADR-0024 outbound webhooks (188d4f1)
    • i18n(web): extract the accessibility strings (4ac9f01)
    • docs(frontend): use the real icon set throughout the plan page (460a1d0)
    • docs(frontend): drop the build order from the plan (caf3bcd)
    • docs(frontend): make the HTML plan the single canonical doc (af82e7e)
    • docs(frontend): icon inventory section in the design plan (6813f6b)
    • docs: record sqlite-default storage in the development guide (a8a884f)
    • test(integration): hermetic sqlite harness default, postgres opt-in (f844f5b)
    • refactor(database): introduce storage dialect seam (c13f140)
    • docs(adr): profile switching and quick-switch PINs (ADR-0020) (9309868)
    • docs(web): sketch the switch-user profile sheet in the frontend plan (01c7137)
    • chore: refresh devbox.lock after a devbox update (ac8c65c)
    • test(changes): the live-update hub gets its own specs (2f43547)
    • chore(deploy): the last two moving images freeze (63f2bb1)
    • docs(agents): the development guide finally enters the repo (8061df7)
    • chore: everything states its version (87eb7a1)
    • docs(parity): the deliberate gaps get their ledger (9a96a80)
    • docs(adr): ADR-0017 writes the sessions story down (b8a4a6b)
    • ci(release): republish exorcises the ghost (76d58af)
    • ci(release): no seal, no ship — APK job demands signing secrets (e4eedd6)
    • ci: an empty nudge to re-fire the workflows (083b55e)
    • ci(tag): tag only when every sibling workflow is green (e24a731)
    • ci: third-party actions state their address (c1b867f)
    • ci: follow the runner's relabel from ubuntu-latest to Linux (9b229cf)
    • chore(deploy,ci): the forge changes its name (e405f33)
    • docs(agents): the law goes above the lore (692cbf8)
    • ci(release): publish only after every artifact lands (f751116)
    • ci(release): a half-dressed keystore refuses to sign (937ad3d)
    • ci(release): no bell without a clapper — the APK gates the release (91c9435)
    • ci(android): the generated clients answer for themselves (a5404f1)
    • chore(deploy): a bell tower for testing — ntfy on the cluster (48d139d)
    • ci(release): packages walk themselves home (df169a1)
    • ci(release): the tag push wears a real token so the release wakes (0a15719)
    • ci(gitea): the cache server answers at the LAN door (68549c5)
    • ci(gitea): the NAS takes the checks (2f40cb4)
    • refactor(roles): the auth shim retires (435b419)
    • chore: root directory sheds its pre-kind era (7696c36)
    • docs(adr): ADR-0016 accepted; api keys and /mcp reach the README (af1adf7)
    • docs(demos): the scroll finds its tempo — quicker wheel ticks (f98eea6)
    • docs(demos): add a gliding cursor and stepped scrolling (dc876eb)
    • docs(demos): a scripted camera crew (82706b5)
    • docs(adr): ADR-0016 proposes the MCP endpoint and admin-managed API keys (88f44d7)
    • refactor(web): create/edit forms in sheets with pinned actions (36ed823)
    • docs(adr): ADR-0015 item lists and points auto-claim (d5fbda1)
    • revert(web): drop sibling arcs from the tree (fce4c1b)
    • docs(adr): record the metrics instrumentation decision (ADR-0013) (a562c3b)
    • docs: mark A–E shipped in integrity & intake review (closeout layout) (f0fb12f)
    • refactor(domain): move the user intake rules onto the domain module (be055b2)
    • refactor(services): absorb the create protocol into a svc.Create seam (57753d7)
    • refactor(database): hoist the row protocol onto a runner seam (525c7fc)
    • docs: add architecture review (integrity & intake proposal) (711c78f)
    • docs: mark A–E shipped in edge & provenance review (closeout layout) (308f59a)
    • refactor(services): drop dead ctx fields, unify Read error map (8d2022f)
    • test(roles): prove the permission matrix covers every RPC (3d475ca)
    • refactor(services): answer actor provenance once in svc (5125265)
    • refactor(domain): speak verdicts in one shape (40d6617)
    • refactor(cli): funnel the command run protocol through a run seam (2c3357a)
    • refactor(server): extract handler assembly into internal/server (552725c)
    • docs: add architecture review (edge & provenance proposal) (2baf84a)
    • docs: reformat domain-behaviour review to match sibling closeout layout (85922b5)
    • refactor(auth): centralise RPC authorization behind auth.Allow (e949cce)
    • refactor(services): add svc.RequireFields validation seam (f254041)
    • refactor(client): funnel unary calls through a generic invoke seam (4485a68)
    • docs: add architecture review (domain-behaviour proposal) (f690852)
    • docs: mark A–D shipped in architecture review (b2ea624)
    • refactor(database): extract generic table constructors (b4006f4)
    • refactor(user): propagate found bool from findUserByEmail (663f485)
    • refactor(services): collapse List handlers onto svc.List seam (7576742)
    • docs: add architecture review report (2026-07-22) (4978668)
    • refactor(services): add Mutate/Delete seam for read-modify-write (99bcd3f)
    • docs(adr): record JSONB query convention (ADR-0001) (071d83f)
    • refactor(database): add query seam (List/Count/FindBy/FindAllBy) (2f5854b)
    • refactor(database): add WithinTx transaction seam and sweep handlers (b30a73a)
    • docs: add architecture review report (2026-07-21) (c624790)
    • ci: run integration tests against a real Postgres service (cbc4197)
    • test(integration): add real-Postgres integration test harness (31b55ad)
    • build(devbox): add Timoni and Kubernetes tooling (19a85ac)
    • chore: add /server to .gitignore (ac0de89)
    • chore(deps): bump go.opentelemetry.io/otel/exporters/stdout/stdoutmetric (5d71df1)
    • chore(deps): bump github.com/onsi/gomega from 1.38.2 to 1.39.0 (4aabd7b)
    • docs: add comprehensive local development configuration and automation (5ec8fcb)
    • test: add comprehensive test coverage for reward service (6977ebf)
    • test: add comprehensive test coverage for item service (1615c46)
    • test: add comprehensive test coverage for event service (7bfbcd6)
    • test: add comprehensive test coverage for untested packages (9ca4e65)
    • refactor: move module path to famorgasy.ie (d21d3d5)
    • chore(deps): bump golang.org/x/crypto from 0.43.0 to 0.46.0 (db1f376)
    • chore(deps): bump go.opentelemetry.io/otel/exporters/stdout/stdouttrace (1c888ac)
    • chore(deps): bump golang.org/x/crypto (f9cf30c)
    • docs: complete rfc-002 phase 5 testing and documentation (c38b01b)
    • chore: add Viper configuration management (3b6d1e0)
    • chore(deps): bump golang.org/x/net from 0.46.0 to 0.47.0 (3dd7d5a)
    • chore: update go version (db6e25c)
    • chore(deps): bump go.opentelemetry.io/otel/exporters/stdout/stdoutmetric (9d491b5)
    • chore(deps): bump connectrpc.com/otelconnect from 0.7.2 to 0.8.0 (d57a40b)
    • chore(deps): bump connectrpc.com/connect from 1.18.1 to 1.19.1 (5460137)
    • chore: remove unsupported workflows (23f5461)
    • chore: enable code scanning (15e7b89)
    • ci: add the github workflows (197a93f)
    • chore(deps): bump google.golang.org/protobuf from 1.36.6 to 1.36.10 (6351f8b)
    • chore(deps): bump go.opentelemetry.io/otel/exporters/stdout/stdouttrace (d58d0fb)
    • chore: refine rfc-002 and rfc-003 (f93595e)
    • docs: add rfcs for authN functionality (f9e7cf7)
    • refactor(database): restructure the package (f93a855)
    • chore: format code (b47ead6)
    • chore(deps): bump go.opentelemetry.io/otel/exporters/stdout/stdoutlog (1aade87)
    • chore(deps): bump golang.org/x/net from 0.40.0 to 0.41.0 (2421c00)
    • chore(deps): bump go.opentelemetry.io/otel/exporters/stdout/stdouttrace (e582ee8)
    • chore(deps): bump go.opentelemetry.io/otel/exporters/stdout/stdoutmetric (3e27d8d)
    • chore(deps): bump go.opentelemetry.io/otel/sdk/log from 0.12.2 to 0.13.0 (7b88bae)
    • chore(deps): bump go.opentelemetry.io/otel/sdk/metric (76abc16)
    • chore: expand dagger pipeline (53075dd)
    • ci: add dependabot config (74b8a4d)
    • chore: add gitignore, license and readme (5a3bd08)
    Downloads