Skip to content

Latest commit

 

History

History
84 lines (64 loc) · 6.96 KB

File metadata and controls

84 lines (64 loc) · 6.96 KB

Changelog

[Unreleased]

  • Document push notification setup in CLAUDE.md (detailed) and README (feature lists, marked paid-clients only) (#76)
  • Add test coverage for google/FCM device registration and rejection of unsupported platform values (#75)
  • Connect to the APNs sandbox server in development (connect_to_development_server: Rails.env.development?). A Xcode debug build registers a sandbox token; pushing it to the production APNs host returned 400 BadDeviceToken, which the gem treats as TokenError and destroys the device row. Development now matches the sandbox; staging/production keep production (#74)
  • Add Noticed::Event and Noticed::Notification to the madmin dashboard, with cross-linkable associations (#73)
  • Add ApplicationPushDevice to the madmin dashboard (#72)
  • Fix push delivery crashing with TypeError (no implicit conversion of nil into Hash): ItemTagNotifier now sets the with_apple/with_google/with_data options (Action Push Native does {}.merge(option) and rejects nil). Also fix the notification url to the shallow api_v1_shopkeeper_item_tag_path route (item_tags is declared shallow: true) (#71)
  • Fix is_admin serializing as null for non-admin members: Rolified role predicates now coerce to a real boolean instead of returning nil when the role key is absent from the roles JSON (#70)
  • Upgrade noticed from 2.9.3 to 3.0.0 (#69)
  • Bump gems within Gemfile constraints (bootsnap, faraday, httpx, jwt, marcel, pagy, rubocop, rubocop-rails, selenium-webdriver, tailwindcss-ruby, zeitwerk) (#68)
  • Ignore CVE-2026-40295 (devise Timeoutable open redirect) in bundler-audit — :timeoutable isn't enabled and devise_token_auth ~> 1.2 pins devise < 5 (#67)
  • Populate APNs/FCM credentials for development, staging, and production so config/push.yml resolves Action Push Native config at runtime (#66)
  • Update Ruby from 4.0.2 to 4.0.3
  • Update gems within Gemfile constraints (action_text-trix, bootsnap, json, mailbin, multi_xml, rubocop-rails, rubyzip)
  • Wire ItemTagNotifier to the ItemTag AASM complete event via after_commit. On state transition idled → completed, the notifier fires to all shopkeepers in the shop's account except the completer (completed_by). Only the AASM trigger — APNs/FCM provider credentials still pending (bin/rails credentials:edit once the keys are provisioned).
  • Drop the standalone Device model and consolidate push-token registration onto ApplicationPushDevice (subclass of ActionPushNative::Device) so deliver_by :action_push_native actually fires for tokens registered via POST /api/v1/shopkeeper/devices. The custom devices table is dropped; action_push_native_devices is rebuilt with UUID primary key + UUID polymorphic owner + bundle_id / last_active_at columns + unique (platform, token) index.
  • API contract change (still pre-mobile-client): device.platform enum is now [apple, google] (matches Action Push Native's APNs/FCM service convention) instead of [ios, android]. Mobile substrate clients (PRs #3-5) will register with apple or google.
  • Renames: DeviceApplicationPushDevice, Api::Shopkeeper::DevicePolicyApi::Shopkeeper::ApplicationPushDevicePolicy, DeviceSerializerApplicationPushDeviceSerializer (JSONAPI type stays device); Shopkeeper has_many :deviceshas_many :application_push_devices, as: :owner.

2026-05-10

  • Add push notifications scaffolding via noticed v2 (#58)
  • New Device model + migration (UUID primary key, unique on [platform, token], last_active_at for staleness scope)
  • New Api::V1::Shopkeeper::DevicesController — POST /devices is idempotent upsert (rebinds token to current shopkeeper); DELETE /devices/:id unregisters
  • Add ApplicationNotifier base class + example ItemTagNotifier with deliver_by :action_push_native wiring (Apple + Google push via Rails-native action_push_native 0.3.x)
  • Generate ApplicationPushNotification / ApplicationPushDevice / ApplicationPushNotificationJob and config/push.yml (APNs/FCM credentials still placeholders — provision via bin/rails credentials:edit before enabling delivery; ItemTag AASM trigger lands in a follow-up)
  • Note: the existing Device registration API (POST /api/v1/shopkeeper/devices) writes to the custom Device model, not ApplicationPushDevice — bridging the two (so registered tokens flow into Action Push Native delivery) is a follow-up
  • Shopkeeper has_many :devices, :notifications; new locale entries under notifiers.item_tag — title/body deliberately kept generic (%{name} / %{shop} only, no state-verbs like "completed" or "ready") so the agent's domain-adapt step can rewrite richer per-domain copy without fighting baked-in queue semantics
  • 21 new test runs (Device model + DevicesController + notifier); full suite still 0 failures

2026-05-02

  • Phase 1: Rails API substrate v2 refactor (#45) — turn queue-specific template into generic single-resource CRUD substrate (Shop → ItemTag)
  • Rename ItemTag.queue_numbername; add description, position, composite (shop_id, position) index; drop scan_state, customer_read_at, already_completed and the (shop_id, queue_number) unique index
  • Drop NFC/QR scan flows: remove POST /scan, GET /scan_customer, the entire display/ namespace, DELETE /shops/:id/reset, app root + static controller
  • Rename PATCH /item_tags/:id/reset/idle (matches AASM event name)
  • Auto-create one "Sample" ItemTag on Shop creation (was 10 A001–A010 queue numbers); drop lib/tasks/shop.rake
  • Collapse AccountsShopkeeper::ROLES from 7 tiers (admin/senior_manager/junior_manager/senior_member/junior_member/guest) to 2 (admin/member); ItemTagPolicy resolves to Shop permissions
  • Inline state transitions and completed_by/completed_at writes in controller actions; drop scan_tag!/complete_tag!/reset! model methods
  • Regenerate docs/openapi.yaml; refresh brakeman.ignore fingerprint; update locales and Madmin resources
  • Update gems within Gemfile constraints (bigdecimal, bootsnap, erb, ffi, irb, json, minitest, net-imap, nokogiri, pagy, parallel, parser, propshaft, puma, regexp_parser, rubocop, rubocop-ast, tailwindcss-ruby)

2026-03-10

  • Update Rails from 7.1.5.1 to 8.1
  • Update Brakeman from 7.0.2 to 7.1.2
  • Add brakeman.ignore for mass assignment false positive
  • Add comprehensive test coverage for models, policies, serializers, and controllers (205 tests)
  • Update app icons with transparent backgrounds
  • Add Active Storage migrations and Rails 7.2 framework defaults
  • Add static error pages (404, 406, 500)
  • Fix RuboCop offenses in Active Storage migrations
  • Add CLAUDE.md for Claude Code guidance

2025-06-21

  • Update Brakeman gem

2025-03-06

  • Fix item_tag uniqueness error

2025-03-01

  • Add item_tags table
  • Remove BundleAssets

2025-02-08

  • Migrate from Sprockets to Propshaft
  • Update Madmin

2025-02-07

  • Update Ruby and gems
  • Update Brakeman gem
  • Fix fail updating shopkeeper

2024-10-30

  • First commit