Commit Graph
32 Commits
Author SHA1 Message Date
mr.zeroandClaude Fable 5 d2b4b67e44 Phase 5: ship the catalog ActiveAdmin resources from the engine
- the 7 catalog admin files (softwares, releases, external_links,
  platform_links, images, files page, downloads) move to the engine's
  app/admin; the host ActiveAdmin instance loads them via
  ActiveAdmin.application.load_paths (single admin, URLs unchanged)
- engine initializers: Zeitwerk ignore for app/admin (production eager load)
  and load_paths + watchable_dirs registration, guarded by defined?(ActiveAdmin)
  so the admin-less dummy app boots
- images admin reads image owners from WarpEngine.config.image_owners; the
  host registers the Member owner in config/initializers/warp_engine.rb;
  the interim ImageUsage registry is gone
- fix: SoftwareImage.distinct.pluck clashed with its order(:position)
  default scope on MySQL (unscope(:order)) — introduced in phase 0, caught
  by the first authenticated /admin/images smoke test
- files page: download links use the public /file/ URL instead of the raw
  container path; the picker's stored path comes from config

Verified: both suites green, zeitwerk:check (production) clean, JSON
baselines intact, authenticated admin smoke test on every page incl.
the 3-level nested software form and Files picker mode.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 19:18:28 +02:00
mr.zeroandClaude Fable 5 b79a73d62d Phase 4: move catalog controllers and routes into WarpEngine
- update, files and the 6 /api catalog controllers now live in the engine on
  a new WarpEngine::ApiController base (same rescue/mime behavior as host)
- engine routes serve /update, /file/*path, /api/software*, /api/builds*,
  /api/image/:id, /api/download at unchanged public paths via the root mount;
  host routes keep only TTG endpoints (events, members, wiki, rss, swagger)
- /update secret comes from WarpEngine.config.update_secret and an
  unconfigured secret now rejects every request (previously an empty
  UPDATE_SECRET env accepted empty secrets)
- apipie-rails is an engine dependency (DSL in engine controllers); dummy app
  configures apipie with validation off, mirroring the host
- engine request specs: catalog controller specs moved from host plus new
  /update auth contract spec

Verified: engine suite 53 green, host suite 6 green, /api/software and
/api/builds byte-identical to baselines, /update 401/400 behavior intact,
admin and TTG endpoints OK.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 19:09:11 +02:00
mr.zeroandClaude Fable 5 2f6cc4cdc2 Phase 1: warp_engine gem skeleton (path gem, mounted engine)
- libs/ruby/warp_engine: gemspec, WarpEngine::Engine (isolate_namespace with
  empty table_name_prefix), WarpEngine.configure surface (container paths,
  update_secret, image_owners), empty engine routes
- host Gemfile: path gem; host routes: mount WarpEngine::Engine => "/" as
  the last entry so host routes always win
- docker: api build context moved to repo root so libs/ is visible at
  bundle-install time; ./libs:/libs runtime mount; root .dockerignore to keep
  data/ and node_modules out of the build context

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 18:44:32 +02:00
mr.zeroandClaude Fable 5 bf921c589d Phase 0: in-place decoupling before WarpEngine extraction
- FileService/DownloadService: lazy container-path resolution instead of
  class-load-time realpath (boot no longer requires /softwares to exist)
- downloadCount/totalDownloads: single grouped query passed as Blueprinter
  option instead of per-release association counts (fixes N+1)
- admin Images: Member coupling replaced with ImageUsage owner registry
  (precursor of the WarpEngine.config.image_owners hook)
- Image: UPLOAD_PATH constant replaced with call-time upload_path accessor
- proper test environment (config/environments/test.rb, softwares_test DB,
  hosts.clear) — suite previously ran against the development DB
- spec fixes: case-insensitive uniqueness matchers (MySQL ai_ci collation),
  DB-cascade has_many expectations, PlatformLink::SUPPORTED_PLATFORMS
- JSON baselines of /api/software and /api/builds for post-extraction diffing

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 18:39:20 +02:00
mr.zero 77f269d9e0 build concerns, build matrix 2026-08-04 08:37:49 +02:00
mr.zero a170eff37a isAdmin trick 2026-07-29 13:27:39 +02:00
mr.zero 598a4722cc new datetime format for admin 2026-07-29 09:56:45 +02:00
mr.zero 60b3948522 menu emojis 2026-07-29 09:53:48 +02:00
mr.zero 31e7fad4a0 go to site fix 2 2026-07-29 09:48:53 +02:00
mr.zero c885da200d go to site fix 2026-07-29 09:46:15 +02:00
mr.zero 9219dd08bc howtos rss 2026-07-29 09:42:42 +02:00
mr.zero 922ceed996 links 2026-07-29 08:20:58 +02:00
mr.zero 608f1b5931 swagger api docs fix 2026-07-28 13:14:20 +02:00
mr.zero 397f828315 swagger api docs 2026-07-28 13:10:13 +02:00
mr.zero ae9f376b9c api docs 2026-07-28 13:04:12 +02:00
mr.zero 6ea7a8ae69 downloads endpoint route fix 2026-07-28 10:55:30 +02:00
mr.zero 4afa440b12 rss feed and download stats 2026-07-28 10:42:39 +02:00
mr.zero 3f2abe1eaf admin index fix 2026-07-27 11:01:30 +02:00
mr.zero a6bfe60d65 remove admin dashboard 2026-07-27 08:38:06 +02:00
mr.zero 8875307668 grav interation 2026-06-07 23:24:29 +02:00
mr.zero 0aede08d80 wasm mimetype 2026-05-06 22:00:21 +02:00
mr.zero 911e0b5b70 routes fix 2026-05-06 15:35:27 +02:00
mr.zero 5e16685229 files controller fix
fix

fix

fix

fix

fix
2026-05-06 13:08:23 +02:00
mr.zero 4aaed0607c image admin 2026-05-05 22:53:55 +02:00
mr.zero d544b4da76 member model 2026-05-05 22:15:07 +02:00
mr.zero 69379edc29 session fix 3 2026-05-05 20:06:42 +02:00
mr.zero 1da2381379 session fix 2 2026-05-05 20:04:24 +02:00
mr.zero 7b6cead6d5 session fix 2026-05-05 20:02:39 +02:00
mr.zero 130be14c59 events api 2026-05-05 19:49:24 +02:00
mr.zero c8e7e9ffd5 direct domain to hosts 2026-05-05 19:37:34 +02:00
mr.zero 14aab62dd8 env fix 2026-05-05 19:34:22 +02:00
mr.zero 93849795e3 replace catalog service to api 2026-05-05 19:27:29 +02:00