From 64f3a61335d3e8696e444479afdba9f0feb8cd6c Mon Sep 17 00:00:00 2001 From: Aaron Allen Date: Wed, 22 Jul 2026 12:44:55 -0500 Subject: [PATCH] revert: restore repository to the 0.7.5 release state Reverts the apps/ monorepo relocation and CI redesign (b5ca05383..781dc8b42): - refactor(repo): inherit desktop package metadata from workspace - refactor(repo): inherit desktop dependencies from the workspace manifest - ci: redesign release.yml for wall-clock on the apps/ layout - ci: redesign build.yml to cut redundant per-OS compiles - refactor(repo): relocate marketing site to apps/marketing - refactor(repo): relocate desktop crate and telemetry worker into apps/ Not ready to ship the restructure yet; the tree is restored to exactly the 0.7.5 tag. --- .config/taplo.toml | 2 +- .github/r2/README.md | 2 +- .github/workflows/build.yml | 55 ++++---- .github/workflows/deploy-pages.yml | 10 +- .github/workflows/release.yml | 86 ++++++------- .gitignore | 4 +- Cargo.toml | 111 +++++++++++++---- apps/desktop/Cargo.toml | 117 ------------------ .../fonts/JetBrainsMono-Italic.ttf | Bin .../assets => assets}/fonts/JetBrainsMono.ttf | Bin .../fonts/SpaceGrotesk-Medium.ttf | Bin .../fonts/SpaceGrotesk-Regular.ttf | Bin .../fonts/SpaceGrotesk-SemiBold.ttf | Bin .../images/icons/abyssals.svg | 0 .../images/icons/alert-triangle.svg | 0 .../images/icons/archive.svg | 0 .../images/icons/arrow-out.svg | 0 .../images/icons/arrow-right.svg | 0 .../assets => assets}/images/icons/assets.svg | 0 .../assets => assets}/images/icons/bell.svg | 0 .../assets => assets}/images/icons/block.svg | 0 .../assets => assets}/images/icons/bold.svg | 0 .../assets => assets}/images/icons/budget.svg | 0 .../images/icons/calendar.svg | 0 .../images/icons/captains-log.svg | 0 .../assets => assets}/images/icons/cart.svg | 0 .../assets => assets}/images/icons/check.svg | 0 .../images/icons/chevron.svg | 0 .../images/icons/chevrons-up.svg | 0 .../assets => assets}/images/icons/clock.svg | 0 .../assets => assets}/images/icons/close.svg | 0 .../images/icons/compare.svg | 0 .../images/icons/contact-sync.svg | 0 .../images/icons/contracts.svg | 0 .../assets => assets}/images/icons/copy.svg | 0 .../assets => assets}/images/icons/corp.svg | 0 .../assets => assets}/images/icons/cross.svg | 0 .../assets => assets}/images/icons/doc.svg | 0 .../images/icons/download.svg | 0 .../assets => assets}/images/icons/draft.svg | 0 .../assets => assets}/images/icons/drop.svg | 0 .../images/icons/facilities.svg | 0 .../images/icons/faction.svg | 0 .../assets => assets}/images/icons/filter.svg | 0 .../images/icons/fitting.svg | 0 .../assets => assets}/images/icons/flask.svg | 0 .../assets => assets}/images/icons/fleet.svg | 0 .../images/icons/folder-open.svg | 0 .../images/icons/forward.svg | 0 .../assets => assets}/images/icons/grip.svg | 0 .../assets => assets}/images/icons/heart.svg | 0 .../assets => assets}/images/icons/help.svg | 0 .../images/icons/image-missing.svg | 0 .../images/icons/inbox-all.svg | 0 .../assets => assets}/images/icons/inbox.svg | 0 .../images/icons/industry.svg | 0 .../assets => assets}/images/icons/info.svg | 0 .../images/icons/inventory.svg | 0 .../assets => assets}/images/icons/italic.svg | 0 .../images/icons/journal.svg | 0 .../assets => assets}/images/icons/layout.svg | 0 .../assets => assets}/images/icons/link.svg | 0 .../assets => assets}/images/icons/live.svg | 0 .../assets => assets}/images/icons/lock.svg | 0 .../assets => assets}/images/icons/mail.svg | 0 .../images/icons/market-tree.svg | 0 .../assets => assets}/images/icons/market.svg | 0 .../assets => assets}/images/icons/moon.svg | 0 .../images/icons/mutamarket.svg | 0 .../images/icons/notif-clone.svg | 0 .../images/icons/notif-combat.svg | 0 .../images/icons/notif-contact.svg | 0 .../images/icons/notif-contract.svg | 0 .../images/icons/notif-corp.svg | 0 .../images/icons/notif-fw.svg | 0 .../images/icons/notif-incursion.svg | 0 .../images/icons/notif-industry.svg | 0 .../images/icons/notif-insurance.svg | 0 .../images/icons/notif-market.svg | 0 .../images/icons/notif-mission.svg | 0 .../images/icons/notif-reward.svg | 0 .../images/icons/notif-standing.svg | 0 .../images/icons/notif-structure.svg | 0 .../images/icons/notif-system.svg | 0 .../images/icons/notif-war.svg | 0 .../assets => assets}/images/icons/office.svg | 0 .../assets => assets}/images/icons/pencil.svg | 0 .../images/icons/personal.svg | 0 .../assets => assets}/images/icons/pin.svg | 0 .../assets => assets}/images/icons/planet.svg | 0 .../assets => assets}/images/icons/plans.svg | 0 .../images/icons/plus-minus.svg | 0 .../assets => assets}/images/icons/plus.svg | 0 .../assets => assets}/images/icons/pulse.svg | 0 .../images/icons/reply-all.svg | 0 .../assets => assets}/images/icons/reply.svg | 0 .../assets => assets}/images/icons/reset.svg | 0 .../assets => assets}/images/icons/roster.svg | 0 .../assets => assets}/images/icons/search.svg | 0 .../assets => assets}/images/icons/send.svg | 0 .../images/icons/settings.svg | 0 .../assets => assets}/images/icons/shield.svg | 0 .../assets => assets}/images/icons/skills.svg | 0 .../assets => assets}/images/icons/slash.svg | 0 .../assets => assets}/images/icons/snooze.svg | 0 .../assets => assets}/images/icons/spark.svg | 0 .../assets => assets}/images/icons/squads.svg | 0 .../assets => assets}/images/icons/star.svg | 0 .../images/icons/stockpiles.svg | 0 .../images/icons/storefront.svg | 0 .../assets => assets}/images/icons/tack.svg | 0 .../assets => assets}/images/icons/tag.svg | 0 .../assets => assets}/images/icons/target.svg | 0 .../images/icons/tier-all.svg | 0 .../images/icons/tier-constellation.svg | 0 .../images/icons/tier-region.svg | 0 .../images/icons/tier-station.svg | 0 .../images/icons/tier-system.svg | 0 .../assets => assets}/images/icons/tilde.svg | 0 .../images/icons/tracker.svg | 0 .../assets => assets}/images/icons/trash.svg | 0 .../assets => assets}/images/icons/trend.svg | 0 .../assets => assets}/images/icons/upload.svg | 0 .../assets => assets}/images/icons/users.svg | 0 .../images/icons/utilities.svg | 0 .../assets => assets}/images/icons/values.svg | 0 .../images/icons/view-cards.svg | 0 .../images/icons/view-compact.svg | 0 .../images/icons/view-list.svg | 0 .../assets => assets}/images/icons/wallet.svg | 0 .../images/identity/128x128.png | Bin .../images/identity/256x256.png | Bin .../images/identity/32x32.png | Bin .../images/identity/icon.icns | Bin .../images/identity/icon.ico | Bin .../images/identity/pod-mark.svg | 0 .../assets => assets}/images/items/.no-icon | 0 .../desktop/assets => assets}/locales/de.toml | 0 .../assets => assets}/locales/en-us.toml | 0 .../desktop/assets => assets}/locales/en.toml | 0 .../desktop/assets => assets}/locales/es.toml | 0 .../desktop/assets => assets}/locales/fr.toml | 0 .../desktop/assets => assets}/locales/ja.toml | 0 .../desktop/assets => assets}/locales/ko.toml | 0 .../desktop/assets => assets}/locales/ru.toml | 0 .../desktop/assets => assets}/locales/zh.toml | 0 apps/desktop/build.rs => build.rs | 0 ...-ci-gate-folding-and-single-saver-cache.md | 109 ---------------- ...oupled-packaging-and-commit-time-mtimes.md | 102 --------------- docs/design/README.md | 4 - docs/process/release.md | 6 +- .../0001_create_sync_ledger.sql | 0 .../0002_create_items.sql | 0 .../0003_create_orgs.sql | 0 .../0004_create_maps.sql | 0 .../0005_create_skill_metadata.sql | 0 .../0006_create_certificates.sql | 0 .../0007_create_dogma_attributes.sql | 0 .../0008_create_http_cache.sql | 0 .../0009_create_credentials.sql | 0 .../0010_create_outbox.sql | 0 .../0011_create_tags.sql | 0 .../0012_create_character_attributes.sql | 0 .../0013_create_character_implants.sql | 0 .../0014_create_character_skills.sql | 0 .../0015_create_character_skillqueue.sql | 0 .../0016_create_character_telemetry.sql | 0 .../0017_create_character_clones.sql | 0 .../0018_create_character_jump_clones.sql | 0 .../0019_create_character_clone_implants.sql | 0 .../0020_create_character_contacts.sql | 0 .../0021_create_character_contact_labels.sql | 0 .../0022_create_character_standings.sql | 0 .../0023_create_squads.sql | 0 .../0024_create_corporation_member_roles.sql | 0 .../0025_create_character_killmails.sql | 0 .../0026_create_character_notifications.sql | 0 .../0027_create_skill_plans.sql | 0 .../0028_create_character_assets.sql | 0 .../0029_create_corporation_assets.sql | 0 .../0030_create_abyssal_items.sql | 0 .../0031_create_abyssal_module_stats.sql | 0 .../0032_create_stockpiles.sql | 0 .../0033_create_stockpile_items.sql | 0 .../0034_create_character_wallet_journal.sql | 0 ...35_create_character_wallet_transaction.sql | 0 .../0036_create_market_orders.sql | 0 .../0037_create_market_prices.sql | 0 .../0038_create_character_contracts.sql | 0 ...039_create_corporation_wallet_division.sql | 0 ...0040_create_corporation_wallet_journal.sql | 0 ..._create_corporation_wallet_transaction.sql | 0 ...42_create_character_net_worth_snapshot.sql | 0 ..._create_corporation_net_worth_snapshot.sql | 0 .../0044_create_type_price_histories.sql | 0 .../0045_create_character_mail.sql | 0 .../0046_create_character_mail_body.sql | 0 .../0047_create_character_mail_recipients.sql | 0 .../0048_create_character_mail_labels.sql | 0 ...create_character_mail_label_membership.sql | 0 .../0050_create_mail_triage.sql | 0 .../0051_create_mail_snooze.sql | 0 .../0052_create_mail_folder_assignment.sql | 0 .../0053_create_character_state.sql | 0 .../0054_create_owned_characters.sql | 0 .../0055_create_owned_corporations.sql | 0 ...0056_create_active_clone_with_implants.sql | 0 .../0057_create_character_contract_escrow.sql | 0 ..._character_net_worth_snapshot_combined.sql | 0 ...create_character_wallet_period_summary.sql | 0 .../0060_create_mail_unified.sql | 0 .../0061_create_character_financials.sql | 0 .../0062_add_killmail_value_provenance.sql | 0 .../0063_create_saved_asset_filters.sql | 0 .../0064_unify_asset_name.sql | 0 .../0065_create_character_calendar.sql | 0 ...66_create_character_calendar_attendees.sql | 0 .../0067_create_npc_agents.sql | 0 .../0068_create_character_industry_jobs.sql | 0 .../0069_create_corporation_industry_jobs.sql | 0 .../0070_create_character_blueprints.sql | 0 .../0071_create_corporation_blueprints.sql | 0 ...072_create_blueprint_activity_products.sql | 0 ...73_create_blueprint_activity_materials.sql | 0 .../0074_create_killmail_detail.sql | 0 .../0075_create_blueprint_activity_meta.sql | 0 .../0076_create_industry_cost_indices.sql | 0 .../0077_create_industry_plans.sql | 0 .../0078_create_industry_plan_types.sql | 0 .../0079_add_credential_reauth_status.sql | 0 .../0080_create_pinned_structures.sql | 0 .../0081_create_corporation_standings.sql | 0 .../0082_create_corporation_contacts.sql | 0 .../0083_create_corporation_killmails.sql | 0 .../0084_create_contract_detail.sql | 0 .../0085_create_moons.sql | 0 ..._create_corporation_mining_extractions.sql | 0 ...0087_add_industry_plan_types_use_stock.sql | 0 .../0088_add_hot_path_indexes.sql | 0 .../0089_stockpile_character_scope.sql | 0 .../0090_drop_mail_triage_pin.sql | 0 ...add_mail_folder_assignment_assigned_at.sql | 0 .../0092_create_mail_drafts.sql | 0 .../0093_create_budget.sql | 0 .../0094_create_budget_entry_assignments.sql | 0 .../0095_create_budget_scope_seeded.sql | 0 .../0096_add_market_prices_source.sql | 0 ...097_recreate_character_financials_muta.sql | 0 .../0098_create_corporation_abyssal_items.sql | 0 ...0099_add_budget_entry_assignment_owner.sql | 0 .../0100_create_budget_rules.sql | 0 .../0101_create_industry_plan_segments.sql | 0 .../0102_repair_budget_assignments.sql | 0 .../0103_create_notifications.sql | 0 .../0104_backfill_split_owner_assignments.sql | 0 .../0105_add_notifications_keyset_index.sql | 0 .../0106_create_type_materials.sql | 0 .../0107_purge_non_participant_killmails.sql | 0 .../0108_scope_tags.sql | 0 .../0109_dedupe_scoped_tags.sql | 0 .../0110_rekey_wallet_journal_per_wallet.sql | 0 .../0111_create_industry_facility_storage.sql | 0 .../0112_budget_journal_only.sql | 0 .../0113_create_sync_lists.sql | 0 .../0114_skill_plan_templates.sql | 0 .../0115_facility_intel_snapshot.sql | 0 .../0116_drop_pinned_structures.sql | 0 .../0117_skill_plan_milestones.sql | 0 .../0118_skill_plan_position.sql | 0 .../0119_captains_log.sql | 0 .../0120_killmail_report.sql | 0 .../0121_skill_completion.sql | 0 .../0122_calendar_event_note.sql | 0 .../0123_field_notes.sql | 0 ...ombined_net_worth_include_corporations.sql | 0 .../0125_captains_log_prompt_config.sql | 0 ...126_create_corporation_hangar_division.sql | 0 ...alue_to_corporation_net_worth_snapshot.sql | 0 ...8_combined_net_worth_value_corp_assets.sql | 0 .../0129_create_objectives.sql | 0 .../0130_create_character_dossier.sql | 0 .../0131_create_character_sp_snapshot.sql | 0 .../0132_create_industry_completion.sql | 0 .../0133_add_eft_to_facility_intel.sql | 0 .../0134_create_market_default.sql | 0 .../0135_create_market_watchlist.sql | 0 .../0136_create_market_alert_state.sql | 0 .../0137_create_corporation_market_orders.sql | 0 .../0138_create_character_planets.sql | 0 .../0139_create_character_planet_pins.sql | 0 ...0_create_character_planet_pin_contents.sql | 0 .../0141_create_character_planet_routes.sql | 0 .../0142_create_character_planet_links.sql | 0 .../0143_create_planet_schematics.sql | 0 .../0144_create_planet_schematic_types.sql | 0 .../0145_create_structure_state.sql | 0 .../0146_create_customs_offices.sql | 0 .../0147_add_watch_location_scope.sql | 0 .../0148_create_market_comparison.sql | 0 ...49_add_is_corporation_to_market_orders.sql | 0 ...aracter_financials_exclude_corp_escrow.sql | 0 .../0151_add_market_watchlist_sort_order.sql | 0 .../0152_create_market_cart.sql | 0 .../0153_create_market_comparison_pins.sql | 0 .../0154_create_market_lot_dismissal.sql | 0 ...155_drop_market_watchlist_character_id.sql | 0 .../0156_drop_market_comparison.sql | 0 .../0157_create_observed_market_orders.sql | 0 scripts/ci/commit-mtime | 11 -- scripts/ci/rust-cache | 23 +--- scripts/format/rust | 2 +- scripts/generate/flatpak | 4 +- scripts/generate/item-images | 6 +- scripts/generate/item-images-cache | 2 +- scripts/lint/rust | 2 +- scripts/package | 1 - scripts/test/crap | 8 +- {apps/desktop/src => src}/app.rs | 0 {apps/desktop/src => src}/app/boot.rs | 0 {apps/desktop/src => src}/app/dispatch.rs | 0 {apps/desktop/src => src}/app/graphics.rs | 0 {apps/desktop/src => src}/app/image_heal.rs | 0 {apps/desktop/src => src}/app/lease.rs | 0 {apps/desktop/src => src}/app/lifecycle.rs | 0 {apps/desktop/src => src}/app/logging.rs | 0 {apps/desktop/src => src}/app/navigation.rs | 0 .../src => src}/app/notification_center.rs | 0 {apps/desktop/src => src}/app/pack_open.rs | 0 {apps/desktop/src => src}/app/palette.rs | 0 {apps/desktop/src => src}/app/settings_ops.rs | 0 {apps/desktop/src => src}/app/shortcuts.rs | 0 .../src => src}/app/snooze_scheduler.rs | 0 {apps/desktop/src => src}/app/status_bar.rs | 0 .../src => src}/app/trash_purge_scheduler.rs | 0 {apps/desktop/src => src}/app/windows.rs | 0 {apps/desktop/src => src}/clients.rs | 0 {apps/desktop/src => src}/clients/esi.rs | 0 .../src => src}/clients/esi/alliance.rs | 0 .../src => src}/clients/esi/bloodlines.rs | 0 .../src => src}/clients/esi/character.rs | 0 .../src => src}/clients/esi/corporation.rs | 0 .../desktop/src => src}/clients/esi/dogma.rs | 0 .../src => src}/clients/esi/faction.rs | 0 .../src => src}/clients/esi/industry.rs | 0 .../src => src}/clients/esi/killmail.rs | 0 .../desktop/src => src}/clients/esi/market.rs | 0 .../desktop/src => src}/clients/esi/models.rs | 0 .../clients/esi/models/alliance.rs | 0 .../src => src}/clients/esi/models/assets.rs | 0 .../clients/esi/models/bloodlines.rs | 0 .../clients/esi/models/blueprint.rs | 0 .../clients/esi/models/character.rs | 0 .../clients/esi/models/corporation.rs | 0 .../src => src}/clients/esi/models/dogma.rs | 0 .../src => src}/clients/esi/models/faction.rs | 0 .../clients/esi/models/industry.rs | 0 .../clients/esi/models/killmail.rs | 0 .../src => src}/clients/esi/models/market.rs | 0 .../src => src}/clients/esi/models/races.rs | 0 .../clients/esi/models/universe.rs | 0 .../desktop/src => src}/clients/esi/races.rs | 0 .../desktop/src => src}/clients/esi/scopes.rs | 0 .../src => src}/clients/esi/universe.rs | 0 .../desktop/src => src}/clients/eve_image.rs | 0 {apps/desktop/src => src}/clients/eve_sso.rs | 0 {apps/desktop/src => src}/clients/http.rs | 0 .../src => src}/clients/muta_market.rs | 0 {apps/desktop/src => src}/clients/sde.rs | 0 .../desktop/src => src}/clients/telemetry.rs | 0 .../desktop/src => src}/clients/zkillboard.rs | 0 {apps/desktop/src => src}/config.rs | 0 {apps/desktop/src => src}/features.rs | 0 {apps/desktop/src => src}/features/assets.rs | 0 .../src => src}/features/assets/abyssals.rs | 0 .../features/assets/abyssals/card.rs | 0 .../features/assets/abyssals/card_grid.rs | 0 .../assets/abyssals/filter_sidebar.rs | 0 .../assets/abyssals/module_type_picker.rs | 0 .../features/assets/abyssals/stat_ranges.rs | 0 .../features/assets/abyssals/stat_row.rs | 0 .../features/assets/abyssals/tier_badge.rs | 0 .../assets/abyssals/type_icon_tile.rs | 0 .../src => src}/features/assets/header.rs | 0 .../src => src}/features/assets/inventory.rs | 0 .../src => src}/features/assets/shell.rs | 0 .../features/assets/stockpile_multibuy.rs | 0 .../features/assets/stockpile_search.rs | 0 .../src => src}/features/assets/stockpiles.rs | 0 .../features/assets/stockpiles/card.rs | 0 .../features/assets/stockpiles/card_grid.rs | 0 .../features/assets/stockpiles/item_row.rs | 0 .../src => src}/features/assets/tracker.rs | 0 .../src => src}/features/assets/tree.rs | 0 .../src => src}/features/assets/values.rs | 0 .../desktop/src => src}/features/calendar.rs | 0 .../src => src}/features/calendar/agenda.rs | 0 .../src => src}/features/calendar/day.rs | 0 .../src => src}/features/calendar/detail.rs | 0 .../src => src}/features/calendar/grid.rs | 0 .../src => src}/features/calendar/loaders.rs | 0 .../src => src}/features/calendar/month.rs | 0 .../src => src}/features/calendar/palette.rs | 0 .../src => src}/features/calendar/respond.rs | 0 .../src => src}/features/calendar/shell.rs | 0 .../src => src}/features/calendar/switcher.rs | 0 .../src => src}/features/calendar/time.rs | 0 .../src => src}/features/calendar/week.rs | 0 .../src => src}/features/calendar/year.rs | 0 .../desktop/src => src}/features/industry.rs | 0 .../features/industry/blueprints.rs | 0 .../src => src}/features/industry/colonies.rs | 0 .../features/industry/colony_drawer.rs | 0 .../features/industry/extractions.rs | 0 .../features/industry/facility_owner.rs | 0 .../src => src}/features/industry/jobs.rs | 0 .../src => src}/features/industry/loaders.rs | 0 .../src => src}/features/industry/planner.rs | 0 .../features/industry/planner_loaders.rs | 0 .../features/industry/planner_model.rs | 0 .../features/industry/planner_search.rs | 0 .../features/industry/rig_bonuses.rs | 0 .../src => src}/features/industry/shell.rs | 0 .../features/industry/side_rail.rs | 0 .../src => src}/features/industry/switcher.rs | 0 {apps/desktop/src => src}/features/mail.rs | 0 .../src => src}/features/mail/compose.rs | 0 .../src => src}/features/mail/draft.rs | 0 .../src => src}/features/mail/folder_pane.rs | 0 .../src => src}/features/mail/labels.rs | 0 .../src => src}/features/mail/loaders.rs | 0 .../src => src}/features/mail/markup.rs | 0 .../src => src}/features/mail/message_list.rs | 0 .../features/mail/outbox_indicator.rs | 0 .../src => src}/features/mail/read_state.rs | 0 .../src => src}/features/mail/reading_pane.rs | 0 .../src => src}/features/mail/shell.rs | 0 .../src => src}/features/mail/snooze.rs | 0 .../src => src}/features/mail/switcher.rs | 0 .../src => src}/features/mail/triage.rs | 0 {apps/desktop/src => src}/features/market.rs | 0 .../src => src}/features/market/book.rs | 0 .../src => src}/features/market/book_view.rs | 0 .../src => src}/features/market/browse.rs | 0 .../src => src}/features/market/cart.rs | 0 .../src => src}/features/market/compare.rs | 0 .../features/market/compare/view.rs | 0 .../src => src}/features/market/history.rs | 0 .../features/market/history_chart.rs | 0 .../features/market/history_view.rs | 0 .../src => src}/features/market/i18n.rs | 0 .../src => src}/features/market/my_orders.rs | 0 .../features/market/order_history.rs | 0 .../src => src}/features/market/outbid.rs | 0 .../src => src}/features/market/shell.rs | 0 .../src => src}/features/market/tree.rs | 0 .../src => src}/features/market/watch_eval.rs | 0 .../src => src}/features/market/watchlist.rs | 0 {apps/desktop/src => src}/features/roster.rs | 0 .../features/roster/add_character.rs | 0 .../src => src}/features/roster/auth.rs | 0 .../features/roster/auth/deep_link.rs | 0 .../features/roster/auth/deep_link/linux.rs | 0 .../features/roster/auth/deep_link/macos.rs | 0 .../roster/auth/deep_link/single_instance.rs | 0 .../features/roster/auth/deep_link/windows.rs | 0 .../features/roster/auth/session.rs | 0 .../features/roster/captains_log.rs | 0 .../features/roster/captains_log/entries.rs | 0 .../features/roster/captains_log/eve_date.rs | 0 .../features/roster/captains_log/events.rs | 0 .../roster/captains_log/field_notes.rs | 0 .../features/roster/captains_log/header.rs | 0 .../features/roster/captains_log/km_report.rs | 0 .../features/roster/captains_log/narrative.rs | 0 .../roster/captains_log/objective_link.rs | 0 .../features/roster/captains_log/past.rs | 0 .../features/roster/captains_log/prompts.rs | 0 .../features/roster/captains_log/rollup.rs | 0 .../roster/captains_log/rollup_tiles.rs | 0 .../features/roster/captains_log/wizard.rs | 0 .../features/roster/captains_log_nudge.rs | 0 .../src => src}/features/roster/card.rs | 0 .../features/roster/character_detail.rs | 0 .../roster/character_detail/header.rs | 0 .../character_detail/killmail_loader.rs | 0 .../features/roster/character_detail/tabs.rs | 0 .../roster/character_detail/tabs/clones.rs | 0 .../character_detail/tabs/contact_modal.rs | 0 .../roster/character_detail/tabs/contacts.rs | 0 .../roster/character_detail/tabs/dossier.rs | 0 .../roster/character_detail/tabs/killlog.rs | 0 .../character_detail/tabs/notifications.rs | 0 .../roster/character_detail/tabs/shared.rs | 0 .../roster/character_detail/tabs/standings.rs | 0 .../features/roster/compact_card.rs | 0 .../features/roster/contact_sync.rs | 0 .../features/roster/contact_sync/editor.rs | 0 .../features/roster/contact_sync/index.rs | 0 .../src => src}/features/roster/corp_card.rs | 0 .../features/roster/corp_compact_card.rs | 0 .../features/roster/corp_list_row.rs | 0 .../features/roster/corporation_detail.rs | 0 .../corporation_detail/killmail_loader.rs | 0 .../roster/corporation_detail/tabs.rs | 0 .../corporation_detail/tabs/contacts.rs | 0 .../roster/corporation_detail/tabs/killlog.rs | 0 .../roster/corporation_detail/tabs/shared.rs | 0 .../corporation_detail/tabs/standings.rs | 0 .../features/roster/entity_search.rs | 0 .../features/roster/killmail_detail.rs | 0 .../src => src}/features/roster/list_row.rs | 0 .../src => src}/features/roster/name_link.rs | 0 .../src => src}/features/roster/roster.rs | 0 .../features/roster/roster_tabs.rs | 0 .../features/roster/search_help.rs | 0 .../src => src}/features/roster/squad_ui.rs | 0 .../features/roster/standing_orders.rs | 0 .../features/roster/standing_orders/board.rs | 0 .../features/roster/standing_orders/detail.rs | 0 .../features/roster/standing_orders/modal.rs | 0 .../features/roster/standing_orders/ui.rs | 0 .../features/roster/structure_alerts.rs | 0 .../src => src}/features/roster/view_mode.rs | 0 .../desktop/src => src}/features/settings.rs | 0 .../features/settings/about_tab.rs | 0 .../features/settings/accessibility_tab.rs | 0 .../features/settings/captains_log_tab.rs | 0 .../features/settings/data_export.rs | 0 .../features/settings/facility_intel_fit.rs | 0 .../settings/facility_intel_import.rs | 0 .../features/settings/facility_intel_share.rs | 0 .../features/settings/facility_tab.rs | 0 .../features/settings/features_tab.rs | 0 .../src => src}/features/settings/i18n.rs | 0 .../features/settings/log_export.rs | 0 .../src => src}/features/settings/mcp_tab.rs | 0 .../features/settings/storage_tab.rs | 0 .../src => src}/features/settings/tags_tab.rs | 0 .../features/settings/telemetry_tab.rs | 0 .../src => src}/features/settings/ui_tab.rs | 0 {apps/desktop/src => src}/features/shell.rs | 0 .../features/shell/command_palette.rs | 0 .../features/shell/focus_search.rs | 0 .../src => src}/features/shell/nav_catalog.rs | 0 .../features/shell/notifications.rs | 0 .../src => src}/features/shell/registry.rs | 0 .../features/shell/window_chrome.rs | 0 .../features/shell/window_state.rs | 0 .../features/shell/window_state/coalesce.rs | 0 .../features/shell/window_state/validity.rs | 0 {apps/desktop/src => src}/features/skills.rs | 0 .../src => src}/features/skills/attributes.rs | 0 .../src => src}/features/skills/browse.rs | 0 .../src => src}/features/skills/format.rs | 0 .../src => src}/features/skills/header.rs | 0 .../features/skills/layout_shell.rs | 0 .../src => src}/features/skills/optimizer.rs | 0 .../src => src}/features/skills/plan_csv.rs | 0 .../src => src}/features/skills/plan_math.rs | 0 .../features/skills/plan_summary.rs | 0 .../plan_summary/attr_optimization_section.rs | 0 .../features/skills/plan_summary/bar_chart.rs | 0 .../plan_summary/implant_effect_section.rs | 0 .../skills/plan_summary/injector_section.rs | 0 .../plan_summary/plan_totals_section.rs | 0 .../plan_summary/time_by_group_section.rs | 0 .../plan_summary/time_by_pair_section.rs | 0 .../src => src}/features/skills/queue.rs | 0 .../features/skills/queue_section.rs | 0 .../skills/queue_section/col_header.rs | 0 .../skills/queue_section/empty_state.rs | 0 .../features/skills/queue_section/footer.rs | 0 .../features/skills/queue_section/row.rs | 0 .../features/skills/queue_timing.rs | 0 .../features/skills/right_panel.rs | 0 .../skills/right_panel/attributes_tab.rs | 0 .../right_panel/attributes_tab/attr_row.rs | 0 .../right_panel/attributes_tab/rate_grid.rs | 0 .../right_panel/attributes_tab/remap_card.rs | 0 .../attributes_tab/section_header.rs | 0 .../skills/right_panel/browser_tab.rs | 0 .../right_panel/browser_tab/group_header.rs | 0 .../right_panel/browser_tab/search_bar.rs | 0 .../right_panel/browser_tab/skill_row.rs | 0 .../features/skills/right_panel/plans_tab.rs | 0 .../right_panel/plans_tab/empty_state.rs | 0 .../plans_tab/from_queue_button.rs | 0 .../plans_tab/from_selected_button.rs | 0 .../right_panel/plans_tab/new_plan_button.rs | 0 .../skills/right_panel/plans_tab/plan_card.rs | 0 .../features/skills/right_panel/queue_tab.rs | 0 .../features/skills/skill_plan_editor.rs | 0 .../skills/skill_plan_editor/clipboard_win.rs | 0 .../features/skills/skill_plan_editor/eft.rs | 0 .../skills/skill_plan_editor/empty_state.rs | 0 .../skills/skill_plan_editor/entry_row.rs | 0 .../skills/skill_plan_editor/header.rs | 0 .../skills/skill_plan_editor/import_export.rs | 0 .../skill_plan_editor/milestone_divider.rs | 0 .../skills/skill_plan_editor/picker.rs | 0 .../skill_plan_editor/picker/empty_state.rs | 0 .../skill_plan_editor/picker/group_header.rs | 0 .../skill_plan_editor/picker/item_row.rs | 0 .../skill_plan_editor/picker/result_row.rs | 0 .../skill_plan_editor/picker/search_bar.rs | 0 .../skills/skill_plan_editor/picker/tabs.rs | 0 .../skill_plan_editor/plan_entry_list.rs | 0 .../skills/skill_plan_editor/stats_strip.rs | 0 .../skills/skill_plan_editor/summary.rs | 0 .../features/skills/skill_plan_manager.rs | 0 .../features/skills/skills_compare.rs | 0 .../features/skills/skills_compare/header.rs | 0 .../features/skills/skills_compare/matrix.rs | 0 .../features/skills/skills_compare/model.rs | 0 .../features/skills/skills_compare/summary.rs | 0 .../features/skills/training_hero.rs | 0 .../features/skills/training_hero/active.rs | 0 .../features/skills/training_hero/idle.rs | 0 .../features/skills/training_hero/pip_row.rs | 0 .../skills/training_hero/queue_item.rs | 0 .../skills/training_hero/right_col.rs | 0 .../features/skills/warning_strip.rs | 0 {apps/desktop/src => src}/features/splash.rs | 0 .../src => src}/features/splash/animation.rs | 0 .../src => src}/features/splash/preflight.rs | 0 .../src => src}/features/splash/seed.rs | 0 .../features/splash/status_message.rs | 0 .../src => src}/features/splash/version.rs | 0 {apps/desktop/src => src}/features/wallet.rs | 0 .../src => src}/features/wallet/budget.rs | 0 .../features/wallet/budget_engine.rs | 0 .../features/wallet/budget_reflect.rs | 0 .../features/wallet/budget_rules.rs | 0 .../features/wallet/budget_view.rs | 0 .../features/wallet/contract_detail.rs | 0 .../src => src}/features/wallet/header.rs | 0 .../src => src}/features/wallet/hero.rs | 0 .../src => src}/features/wallet/i18n.rs | 0 .../src => src}/features/wallet/loaders.rs | 0 .../src => src}/features/wallet/rule_pack.rs | 0 .../src => src}/features/wallet/selection.rs | 0 .../src => src}/features/wallet/shell.rs | 0 .../features/wallet/side_filter.rs | 0 .../features/wallet/wallets_view.rs | 0 {apps/desktop/src => src}/features/wizard.rs | 0 {apps/desktop/src => src}/main.rs | 0 {apps/desktop/src => src}/services.rs | 0 .../src => src}/services/corp_eligibility.rs | 0 {apps/desktop/src => src}/services/fitting.rs | 0 {apps/desktop/src => src}/services/i18n.rs | 0 .../src => src}/services/i18n/language.rs | 0 {apps/desktop/src => src}/services/images.rs | 0 .../src => src}/services/inventory_lots.rs | 0 .../src => src}/services/location_search.rs | 0 .../src => src}/services/market_prices.rs | 0 {apps/desktop/src => src}/services/mcp.rs | 0 .../desktop/src => src}/services/mcp/args.rs | 0 .../src => src}/services/mcp/bridge.rs | 0 .../desktop/src => src}/services/mcp/names.rs | 0 .../src => src}/services/mcp/protocol.rs | 0 .../src => src}/services/mcp/reload.rs | 0 .../src => src}/services/mcp/server.rs | 0 .../desktop/src => src}/services/mcp/tool.rs | 0 .../services/mcp/tools_captains_log.rs | 0 .../src => src}/services/mcp/tools_dossier.rs | 0 .../src => src}/services/mcp/tools_mail.rs | 0 .../services/mcp/tools_objectives.rs | 0 .../src => src}/services/mcp/tools_read.rs | 0 .../src => src}/services/mcp/tools_write.rs | 0 .../src => src}/services/mcp/transport.rs | 0 .../desktop/src => src}/services/migration.rs | 0 .../src => src}/services/migration/v0_6_11.rs | 0 .../src => src}/services/migration/v0_6_20.rs | 0 .../src => src}/services/migration/v0_6_8.rs | 0 {apps/desktop/src => src}/services/parsing.rs | 0 .../src => src}/services/parsing/dispatch.rs | 0 .../src => src}/services/parsing/eft.rs | 0 .../src => src}/services/parsing/level.rs | 0 .../src => src}/services/parsing/quantity.rs | 0 .../src => src}/services/parsing/resolve.rs | 0 .../src => src}/services/parsing/sanitize.rs | 0 .../desktop/src => src}/services/pod_pack.rs | 0 {apps/desktop/src => src}/services/prices.rs | 0 .../desktop/src => src}/services/telemetry.rs | 0 .../services/telemetry/collector.rs | 0 .../services/telemetry/contract.rs | 4 +- .../src => src}/services/telemetry/crash.rs | 0 .../src => src}/services/telemetry/pii.rs | 0 {apps/desktop/src => src}/services/updater.rs | 0 {apps/desktop/src => src}/store.rs | 0 .../desktop/src => src}/store/asset_filter.rs | 0 {apps/desktop/src => src}/store/bootstrap.rs | 0 .../desktop/src => src}/store/data_restore.rs | 0 {apps/desktop/src => src}/store/fs_kind.rs | 0 {apps/desktop/src => src}/store/images.rs | 0 .../src => src}/store/killmail_slot.rs | 0 {apps/desktop/src => src}/store/lease.rs | 0 {apps/desktop/src => src}/store/model.rs | 0 .../src => src}/store/model/abyssal_item.rs | 0 .../store/model/abyssal_module_stat.rs | 0 .../store/model/abyssal_source_type_filter.rs | 0 .../store/model/abyssal_stat_template.rs | 0 .../src => src}/store/model/agent_type.rs | 0 .../src => src}/store/model/all_blueprints.rs | 0 .../store/model/all_industry_jobs.rs | 0 .../src => src}/store/model/alliance.rs | 0 .../src => src}/store/model/asset_query.rs | 0 .../src => src}/store/model/bloodline.rs | 0 .../model/blueprint_activity_material.rs | 0 .../store/model/blueprint_activity_meta.rs | 0 .../store/model/blueprint_activity_product.rs | 0 .../store/model/budget_assignment.rs | 0 .../store/model/budget_category.rs | 0 .../store/model/budget_category_group.rs | 0 .../store/model/budget_entry_assignment.rs | 0 .../src => src}/store/model/budget_owner.rs | 0 .../src => src}/store/model/budget_rule.rs | 0 .../src => src}/store/model/budget_target.rs | 0 .../store/model/calendar_event_note.rs | 0 .../src => src}/store/model/captains_log.rs | 0 .../src => src}/store/model/catalog_type.rs | 0 .../src => src}/store/model/certificate.rs | 0 .../store/model/certificate_skill.rs | 0 .../src => src}/store/model/character.rs | 0 .../store/model/character_asset.rs | 0 .../store/model/character_attributes.rs | 0 .../store/model/character_blueprint.rs | 0 .../store/model/character_calendar.rs | 0 .../model/character_calendar_attendee.rs | 0 .../store/model/character_calendar_view.rs | 0 .../src => src}/store/model/character_card.rs | 0 .../store/model/character_clone.rs | 0 .../store/model/character_clone_implant.rs | 0 .../store/model/character_clone_view.rs | 0 .../store/model/character_contact.rs | 0 .../store/model/character_contact_label.rs | 0 .../store/model/character_contacts_view.rs | 0 .../store/model/character_contract.rs | 0 .../store/model/character_contract_bid.rs | 0 .../store/model/character_contract_item.rs | 0 .../store/model/character_financials.rs | 0 .../store/model/character_implant.rs | 0 .../store/model/character_industry_job.rs | 0 .../store/model/character_jump_clone.rs | 0 .../store/model/character_killmail.rs | 0 .../src => src}/store/model/character_mail.rs | 0 .../store/model/character_mail_body.rs | 0 .../store/model/character_mail_label.rs | 0 .../model/character_mail_label_membership.rs | 0 .../store/model/character_mail_recipient.rs | 0 .../store/model/character_mail_view.rs | 0 .../store/model/character_net_worth_series.rs | 0 .../model/character_net_worth_snapshot.rs | 0 .../store/model/character_notification.rs | 0 .../store/model/character_planet.rs | 0 .../store/model/character_planet_link.rs | 0 .../store/model/character_planet_pin.rs | 0 .../model/character_planet_pin_content.rs | 0 .../store/model/character_planet_route.rs | 0 .../store/model/character_skill.rs | 0 .../store/model/character_skillqueue.rs | 0 .../store/model/character_squad.rs | 0 .../store/model/character_standing.rs | 0 .../store/model/character_state.rs | 0 .../store/model/character_telemetry.rs | 0 .../store/model/character_wallet_journal.rs | 0 .../model/character_wallet_period_summary.rs | 0 .../model/character_wallet_transaction.rs | 0 .../src => src}/store/model/constellation.rs | 0 .../src => src}/store/model/corporation.rs | 0 .../store/model/corporation_abyssal_item.rs | 0 .../store/model/corporation_asset.rs | 0 .../store/model/corporation_blueprint.rs | 0 .../store/model/corporation_card.rs | 0 .../store/model/corporation_contact.rs | 0 .../store/model/corporation_contact_label.rs | 0 .../store/model/corporation_contract.rs | 0 .../store/model/corporation_contract_bid.rs | 0 .../store/model/corporation_contract_item.rs | 0 .../model/corporation_hangar_division.rs | 0 .../store/model/corporation_industry_job.rs | 0 .../store/model/corporation_killmail.rs | 0 .../model/corporation_killmail_attacker.rs | 0 .../store/model/corporation_killmail_item.rs | 0 .../store/model/corporation_market_order.rs | 0 .../store/model/corporation_member_role.rs | 0 .../model/corporation_mining_extraction.rs | 0 .../model/corporation_net_worth_snapshot.rs | 0 .../store/model/corporation_standing.rs | 0 .../model/corporation_wallet_division.rs | 0 .../store/model/corporation_wallet_journal.rs | 0 .../model/corporation_wallet_transaction.rs | 0 .../src => src}/store/model/credential.rs | 0 .../src => src}/store/model/customs_office.rs | 0 .../store/model/dogma_attribute.rs | 0 .../src => src}/store/model/dossier.rs | 0 .../src => src}/store/model/entity_tag.rs | 0 .../src => src}/store/model/facility.rs | 0 .../src => src}/store/model/facility_intel.rs | 0 .../src => src}/store/model/faction.rs | 0 .../src => src}/store/model/field_notes.rs | 0 .../store/model/http_cache_entry.rs | 0 .../store/model/implant_time_bonus.rs | 0 .../store/model/inaccessible_structure.rs | 0 .../store/model/industry_cost_index.rs | 0 .../src => src}/store/model/industry_plan.rs | 0 .../src => src}/store/model/item_category.rs | 0 .../src => src}/store/model/item_group.rs | 0 .../src => src}/store/model/item_type.rs | 0 .../store/model/killmail_attacker.rs | 0 .../src => src}/store/model/killmail_item.rs | 0 .../store/model/killmail_report.rs | 0 .../src => src}/store/model/mail_draft.rs | 0 .../store/model/mail_folder_assignment.rs | 0 .../store/model/mail_overlay_state.rs | 0 .../src => src}/store/model/mail_query.rs | 0 .../src => src}/store/model/mail_snapshot.rs | 0 .../src => src}/store/model/mail_snooze.rs | 0 .../src => src}/store/model/mail_triage.rs | 0 .../store/model/market_alert_state.rs | 0 .../src => src}/store/model/market_cart.rs | 0 .../store/model/market_comparison_pin.rs | 0 .../src => src}/store/model/market_group.rs | 0 .../src => src}/store/model/market_order.rs | 0 .../src => src}/store/model/market_price.rs | 0 .../store/model/market_watchlist.rs | 0 {apps/desktop/src => src}/store/model/moon.rs | 0 .../src => src}/store/model/notification.rs | 0 .../src => src}/store/model/npc_agent.rs | 0 .../store/model/npc_agent_skill.rs | 0 .../store/model/npc_corporation_division.rs | 0 .../src => src}/store/model/objective.rs | 0 .../store/model/observed_market_order.rs | 0 .../desktop/src => src}/store/model/outbox.rs | 0 .../store/model/owned_corporation.rs | 0 {apps/desktop/src => src}/store/model/race.rs | 0 .../desktop/src => src}/store/model/region.rs | 0 .../store/model/saved_asset_filter.rs | 0 .../store/model/sde_picker_item.rs | 0 .../src => src}/store/model/ship_mastery.rs | 0 .../store/model/skill_completion.rs | 0 .../src => src}/store/model/skill_metadata.rs | 0 .../src => src}/store/model/skill_plan.rs | 0 .../model/skill_plan_cert_proficiency.rs | 0 .../store/model/skill_plan_entry.rs | 0 .../store/model/skill_plan_milestone.rs | 0 .../store/model/skill_plan_ship_mastery.rs | 0 .../src => src}/store/model/solar_system.rs | 0 .../desktop/src => src}/store/model/squad.rs | 0 .../store/model/standings_catalog.rs | 0 .../src => src}/store/model/station.rs | 0 .../src => src}/store/model/stockpile.rs | 0 .../src => src}/store/model/stockpile_fill.rs | 0 .../src => src}/store/model/stockpile_item.rs | 0 .../src => src}/store/model/structure.rs | 0 .../store/model/structure_rig_bonus.rs | 0 .../store/model/structure_state.rs | 0 .../src => src}/store/model/sync_ledger.rs | 0 .../src => src}/store/model/sync_list.rs | 0 .../store/model/sync_list_contact.rs | 0 .../store/model/sync_list_target.rs | 0 .../store/model/sync_pushed_contact.rs | 0 {apps/desktop/src => src}/store/model/tag.rs | 0 .../src => src}/store/model/type_material.rs | 0 .../store/model/type_price_history.rs | 0 {apps/desktop/src => src}/store/reconcile.rs | 0 {apps/desktop/src => src}/store/repo.rs | 0 .../desktop/src => src}/store/repo/assets.rs | 0 .../src => src}/store/repo/blueprints.rs | 0 .../desktop/src => src}/store/repo/budget.rs | 0 .../src => src}/store/repo/calendar.rs | 0 .../store/repo/calendar_event_note.rs | 0 .../src => src}/store/repo/captains_log.rs | 0 .../store/repo/captains_log_rollup.rs | 0 .../src => src}/store/repo/character.rs | 0 .../store/repo/character_sp_snapshot.rs | 0 .../src => src}/store/repo/colonies.rs | 0 .../src => src}/store/repo/contact_sync.rs | 0 .../src => src}/store/repo/customs_office.rs | 0 .../desktop/src => src}/store/repo/dossier.rs | 0 .../src => src}/store/repo/field_notes.rs | 0 .../desktop/src => src}/store/repo/finance.rs | 0 .../desktop/src => src}/store/repo/fitting.rs | 0 .../src => src}/store/repo/industry.rs | 0 .../store/repo/industry_completion.rs | 0 {apps/desktop/src => src}/store/repo/infra.rs | 0 .../src => src}/store/repo/killmail_report.rs | 0 {apps/desktop/src => src}/store/repo/mail.rs | 0 .../desktop/src => src}/store/repo/market.rs | 0 .../store/repo/market_alert_state.rs | 0 .../src => src}/store/repo/market_cart.rs | 0 .../store/repo/market_comparison_pin.rs | 0 .../store/repo/market_watchlist.rs | 0 .../src => src}/store/repo/notifications.rs | 0 .../src => src}/store/repo/objective.rs | 0 {apps/desktop/src => src}/store/repo/org.rs | 0 {apps/desktop/src => src}/store/repo/sde.rs | 0 .../store/repo/skill_completion.rs | 0 .../desktop/src => src}/store/repo/skills.rs | 0 .../src => src}/store/repo/standings.rs | 0 .../src => src}/store/repo/structure_state.rs | 0 .../src => src}/store/repo/sync_ledger.rs | 0 {apps/desktop/src => src}/store/search.rs | 0 {apps/desktop/src => src}/store/share_meta.rs | 0 .../src => src}/store/storage_migration.rs | 0 {apps/desktop/src => src}/store/sync_copy.rs | 0 .../desktop/src => src}/store/sync_session.rs | 0 {apps/desktop/src => src}/sync.rs | 0 .../src => src}/sync/calendar_handlers.rs | 0 {apps/desktop/src => src}/sync/command.rs | 0 .../src => src}/sync/contact_handlers.rs | 0 {apps/desktop/src => src}/sync/drain.rs | 0 {apps/desktop/src => src}/sync/engine.rs | 0 {apps/desktop/src => src}/sync/event.rs | 0 {apps/desktop/src => src}/sync/freshness.rs | 0 {apps/desktop/src => src}/sync/handle.rs | 0 {apps/desktop/src => src}/sync/job.rs | 0 {apps/desktop/src => src}/sync/jobs.rs | 0 .../desktop/src => src}/sync/jobs/abyssals.rs | 0 .../src => src}/sync/jobs/asset_sync.rs | 0 .../src => src}/sync/jobs/blueprints.rs | 0 .../sync/jobs/character_calendar.rs | 0 .../src => src}/sync/jobs/character_clones.rs | 0 .../sync/jobs/character_contacts.rs | 0 .../sync/jobs/character_contracts.rs | 0 .../sync/jobs/character_killmails.rs | 0 .../src => src}/sync/jobs/character_mail.rs | 0 .../sync/jobs/character_market_orders.rs | 0 .../sync/jobs/character_notifications.rs | 0 .../sync/jobs/character_planets.rs | 0 .../sync/jobs/character_profile.rs | 0 .../src => src}/sync/jobs/character_roles.rs | 0 .../src => src}/sync/jobs/character_skills.rs | 0 .../sync/jobs/character_standings.rs | 0 .../sync/jobs/character_telemetry.rs | 0 .../src => src}/sync/jobs/character_wallet.rs | 0 .../src => src}/sync/jobs/contact_sync.rs | 0 .../sync/jobs/corporation_contacts.rs | 0 .../sync/jobs/corporation_contracts.rs | 0 .../sync/jobs/corporation_customs_offices.rs | 0 .../sync/jobs/corporation_killmails.rs | 0 .../sync/jobs/corporation_market_orders.rs | 0 .../sync/jobs/corporation_profile.rs | 0 .../sync/jobs/corporation_standings.rs | 0 .../sync/jobs/corporation_structures.rs | 0 .../sync/jobs/corporation_wallet.rs | 0 .../desktop/src => src}/sync/jobs/industry.rs | 0 .../sync/jobs/industry_cost_indices.rs | 0 .../sync/jobs/killmail_detail_backfill.rs | 0 .../sync/jobs/killmail_reconcile.rs | 0 .../src => src}/sync/jobs/killmail_value.rs | 0 .../src => src}/sync/jobs/market_prices.rs | 0 .../sync/jobs/mining_extractions.rs | 0 {apps/desktop/src => src}/sync/jobs/names.rs | 0 .../sync/jobs/net_worth_snapshot.rs | 0 .../desktop/src => src}/sync/jobs/resolve.rs | 0 .../src => src}/sync/jobs/token_audit.rs | 0 .../sync/jobs/wallet_journal_reconcile.rs | 0 .../src => src}/sync/language_refresh.rs | 0 .../desktop/src => src}/sync/mail_handlers.rs | 0 {apps/desktop/src => src}/sync/outbox.rs | 0 {apps/desktop/src => src}/sync/outcome.rs | 0 {apps/desktop/src => src}/sync/schedule.rs | 0 {apps/desktop/src => src}/sync/status.rs | 0 .../src => src}/sync/structure_resolution.rs | 0 {apps/desktop/src => src}/sync/subject.rs | 0 {apps/desktop/src => src}/sync/token.rs | 0 {apps/desktop/src => src}/ui.rs | 0 {apps/desktop/src => src}/ui/components.rs | 0 .../ui/components/add_tag_modal.rs | 0 .../ui/components/anchored_dropdown.rs | 0 .../src => src}/ui/components/avatar.rs | 0 .../src => src}/ui/components/backdrop.rs | 0 .../src => src}/ui/components/badge.rs | 0 .../src => src}/ui/components/button.rs | 0 .../desktop/src => src}/ui/components/card.rs | 0 .../desktop/src => src}/ui/components/chip.rs | 0 .../desktop/src => src}/ui/components/clip.rs | 0 .../src => src}/ui/components/color_picker.rs | 0 .../ui/components/confirm_modal.rs | 0 .../src => src}/ui/components/context_menu.rs | 0 .../src => src}/ui/components/count_badge.rs | 0 .../src => src}/ui/components/date_picker.rs | 0 .../src => src}/ui/components/empty_state.rs | 0 .../ui/components/entity_search.rs | 0 .../src => src}/ui/components/esi_status.rs | 0 .../src => src}/ui/components/eve_time.rs | 0 .../src => src}/ui/components/eyebrow.rs | 0 .../ui/components/facility_combobox.rs | 0 .../src => src}/ui/components/forbidden.rs | 0 .../src => src}/ui/components/glyph_badge.rs | 0 .../src => src}/ui/components/header.rs | 0 .../desktop/src => src}/ui/components/icon.rs | 0 .../src => src}/ui/components/icon_tile.rs | 0 .../src => src}/ui/components/line_chart.rs | 0 .../ui/components/location_combobox.rs | 0 .../src => src}/ui/components/meter.rs | 0 .../ui/components/modal_overlay.rs | 0 .../ui/components/notification_row.rs | 0 .../ui/components/notification_toaster.rs | 0 .../ui/components/overlay_layer.rs | 0 .../src => src}/ui/components/panel_header.rs | 0 .../src => src}/ui/components/picker.rs | 0 .../ui/components/positioned_dropdown.rs | 0 .../src => src}/ui/components/progress_bar.rs | 0 .../desktop/src => src}/ui/components/rail.rs | 0 .../ui/components/resizable_pane.rs | 0 .../src => src}/ui/components/rig_combobox.rs | 0 .../desktop/src => src}/ui/components/rule.rs | 0 .../ui/components/section_header.rs | 0 .../src => src}/ui/components/segmented.rs | 0 .../src => src}/ui/components/skill_detail.rs | 0 .../src => src}/ui/components/status.rs | 0 .../src => src}/ui/components/status_bar.rs | 0 .../src => src}/ui/components/step_badge.rs | 0 .../src => src}/ui/components/sync_chip.rs | 0 .../src => src}/ui/components/sync_popover.rs | 0 .../src => src}/ui/components/tab_select.rs | 0 .../src => src}/ui/components/table_cell.rs | 0 .../src => src}/ui/components/text_input.rs | 0 .../src => src}/ui/components/toggle.rs | 0 .../ui/components/updater_banner.rs | 0 .../src => src}/ui/components/virtual_list.rs | 0 {apps/desktop/src => src}/ui/format.rs | 0 {apps/desktop/src => src}/ui/load_epoch.rs | 0 {apps/desktop/src => src}/ui/style.rs | 0 {apps/desktop/src => src}/ui/style/color.rs | 0 {apps/desktop/src => src}/ui/style/control.rs | 0 {apps/desktop/src => src}/ui/style/radius.rs | 0 {apps/desktop/src => src}/ui/style/shadow.rs | 0 {apps/desktop/src => src}/ui/style/spacing.rs | 0 .../src => src}/ui/style/typography.rs | 0 .../fixtures/esi/character_attributes.json | 0 .../fixtures/esi/dogma_dynamic_item.json | 0 .../fixtures/esi/universe_types_3300.json | 0 .../fixtures/esi/universe_types_9899.json | 0 .../fixtures/telemetry/crash_batch.json | 0 .../telemetry/session_all_streams.json | 0 .../tests => tests}/i18n_no_hardcoded.rs | 0 {apps/desktop/tests => tests}/i18n_parity.rs | 0 {apps => web}/marketing/.gitignore | 0 {apps => web}/marketing/.npmrc | 0 {apps => web}/marketing/aube-lock.yaml | 0 {apps => web}/marketing/content/assets.md | 0 {apps => web}/marketing/content/calendar.md | 0 .../marketing/content/captains-log.md | 0 .../marketing/content/getting-started.md | 0 {apps => web}/marketing/content/index.md | 0 {apps => web}/marketing/content/industry.md | 0 {apps => web}/marketing/content/interface.md | 0 {apps => web}/marketing/content/mail.md | 0 {apps => web}/marketing/content/mcp.md | 0 .../marketing/content/notifications.md | 0 {apps => web}/marketing/content/onboarding.md | 0 {apps => web}/marketing/content/roster.md | 0 {apps => web}/marketing/content/settings.md | 0 {apps => web}/marketing/content/skills.md | 0 .../marketing/content/troubleshooting.md | 0 {apps => web}/marketing/content/wallet.md | 0 {apps => web}/marketing/index.html | 0 {apps => web}/marketing/package.json | 0 {apps => web}/marketing/public/CNAME | 0 .../marketing/public/auth/callback/index.html | 0 .../public/docs/img/assets/abyssals.png | Bin .../public/docs/img/assets/inventory.png | Bin .../docs/img/assets/stockpile-editor.png | Bin .../docs/img/assets/stockpile-import.png | Bin .../public/docs/img/assets/stockpiles.png | Bin .../public/docs/img/assets/tracker.png | Bin .../public/docs/img/assets/values.png | Bin .../public/docs/img/calendar/agenda.png | Bin .../public/docs/img/calendar/day.png | Bin .../public/docs/img/calendar/month.png | Bin .../public/docs/img/calendar/week.png | Bin .../public/docs/img/calendar/year.png | Bin .../docs/img/captains-log/captains-log.png | Bin .../docs/img/getting-started/auth-panel.png | Bin .../docs/img/getting-started/auth-waiting.png | Bin .../first-time-run/asset-feature-select.png | Bin .../character-feature-select.png | Bin .../getting-started/first-time-run/finish.png | Bin .../industry-feature-select.png | Bin .../first-time-run/language-select.png | Bin .../first-time-run/storage-settings.png | Bin .../first-time-run/wallet-feature-select.png | Bin .../first-time-run/welcome.png | Bin .../img/getting-started/onboarding-empty.png | Bin .../roster-first-character.png | Bin .../docs/img/getting-started/splash.png | Bin .../public/docs/img/industry/blueprints.png | Bin .../public/docs/img/industry/extractions.png | Bin .../public/docs/img/industry/jobs.png | Bin .../industry/planner-bill-of-materials.png | Bin .../docs/img/industry/planner-build-order.png | Bin .../img/industry/planner-material-plan.png | Bin .../industry/planner-needed-blueprints.png | Bin .../docs/img/industry/planner-overview.png | Bin .../docs/img/industry/planner-split-jobs.png | Bin .../docs/img/interface/command-palette.png | Bin .../docs/img/interface/sync-popover.png | Bin .../public/docs/img/mail/compose.png | Bin .../public/docs/img/mail/three-pane.png | Bin .../public/docs/img/mcp/settings-mcp.png | Bin .../img/notifications/notification-center.png | Bin .../docs/img/notifications/notifications.png | Bin .../docs/img/roster/add-corporation.png | Bin .../public/docs/img/roster/add-tag.png | Bin .../public/docs/img/roster/card-anatomy.png | Bin .../docs/img/roster/card-context-menu.png | Bin .../docs/img/roster/contact-edit-modal.png | Bin .../docs/img/roster/contact-sync-empty.png | Bin .../docs/img/roster/contact-sync-list.png | Bin .../public/docs/img/roster/contact-sync.png | Bin .../public/docs/img/roster/detail-clones.png | Bin .../docs/img/roster/detail-contacts.png | Bin .../public/docs/img/roster/detail-killlog.png | Bin .../docs/img/roster/detail-standings.png | Bin .../public/docs/img/roster/grid-compact.png | Bin .../public/docs/img/roster/grid-expanded.png | Bin .../public/docs/img/roster/grid-list.png | Bin .../public/docs/img/roster/killmail-modal.png | Bin .../public/docs/img/roster/squads.png | Bin .../docs/img/roster/utilities-dropdown.png | Bin .../docs/img/settings/accessibility.png | Bin .../public/docs/img/settings/facilities.png | Bin .../public/docs/img/settings/features.png | Bin .../public/docs/img/settings/storage.png | Bin .../public/docs/img/settings/tags.png | Bin .../public/docs/img/settings/telemetry.png | Bin .../marketing/public/docs/img/settings/ui.png | Bin .../public/docs/img/skills/attributes.png | Bin .../public/docs/img/skills/compare.png | Bin .../public/docs/img/skills/overview.png | Bin .../public/docs/img/skills/plan-editor.png | Bin .../public/docs/img/skills/plan-manager.png | Bin .../public/docs/img/skills/queue-empty.png | Bin .../docs/img/wallet/budget-create-rule.png | Bin .../docs/img/wallet/budget-reconcile.png | Bin .../docs/img/wallet/budget-rule-manager.png | Bin .../public/docs/img/wallet/budget.png | Bin .../docs/img/wallet/contract-detail.png | Bin .../public/docs/img/wallet/contracts.png | Bin .../public/docs/img/wallet/journal.png | Bin .../public/docs/img/wallet/transactions.png | Bin .../public/docs/img/wallet/wallets.png | Bin {apps => web}/marketing/public/favicon.svg | 0 {apps => web}/marketing/public/robots.txt | 0 .../marketing/scripts/fetch-release.ts | 0 .../marketing/scripts/parse-changelog.ts | 0 {apps => web}/marketing/src/App.tsx | 0 .../marketing/src/components/Faq.tsx | 0 .../marketing/src/components/Features.tsx | 0 .../marketing/src/components/Footer.tsx | 0 .../marketing/src/components/Freeport.tsx | 0 .../marketing/src/components/Hero.tsx | 0 .../marketing/src/components/HeroPreview.tsx | 0 .../marketing/src/components/Icon.tsx | 0 .../marketing/src/components/Notes.tsx | 0 .../marketing/src/components/PlatformCard.tsx | 0 .../src/components/PlatformGlyph.tsx | 0 .../marketing/src/components/Platforms.tsx | 0 .../marketing/src/components/PodMark.tsx | 0 .../src/components/PrimaryDownload.tsx | 0 .../marketing/src/components/Requirements.tsx | 0 .../marketing/src/components/SectionHead.tsx | 0 .../marketing/src/components/SparkChart.tsx | 0 .../marketing/src/components/Support.tsx | 0 .../marketing/src/components/TopNav.tsx | 0 {apps => web}/marketing/src/data.ts | 0 .../marketing/src/docs/DocLayout.tsx | 0 .../marketing/src/docs/content.test.ts | 0 {apps => web}/marketing/src/docs/content.ts | 0 .../marketing/src/docs/frontmatter.ts | 0 {apps => web}/marketing/src/docs/plugin.ts | 0 .../marketing/src/docs/render.test.ts | 0 {apps => web}/marketing/src/docs/render.tsx | 0 .../marketing/src/generated/.gitkeep | 0 .../marketing/src/generated/notes.example.ts | 0 .../src/generated/release.example.ts | 0 .../src/generated/release.ts.example | 0 {apps => web}/marketing/src/main.tsx | 0 {apps => web}/marketing/src/tokens.ts | 0 {apps => web}/marketing/src/types.ts | 0 {apps => web}/marketing/src/utils/detectOs.ts | 0 .../marketing/src/utils/renderInline.tsx | 0 {apps => web}/marketing/tsconfig.json | 0 {apps => web}/marketing/vite.config.ts | 0 {apps => web}/telemetry/.gitignore | 0 {apps => web}/telemetry/.npmrc | 0 {apps => web}/telemetry/README.md | 12 +- {apps => web}/telemetry/aube-lock.yaml | 0 .../telemetry/migrations/0001_init.sql | 0 .../0002_rename_display_add_screen_size.sql | 0 .../migrations/0003_add_app_language.sql | 0 {apps => web}/telemetry/package.json | 0 {apps => web}/telemetry/src/contract.test.ts | 4 +- {apps => web}/telemetry/src/contract.ts | 4 +- {apps => web}/telemetry/src/db.test.ts | 2 +- {apps => web}/telemetry/src/db.ts | 0 {apps => web}/telemetry/src/index.ts | 0 {apps => web}/telemetry/src/render.test.ts | 0 {apps => web}/telemetry/src/render.ts | 0 {apps => web}/telemetry/src/stats.test.ts | 0 {apps => web}/telemetry/src/stats.ts | 0 {apps => web}/telemetry/tsconfig.json | 0 {apps => web}/telemetry/wrangler.toml | 0 1206 files changed, 199 insertions(+), 494 deletions(-) delete mode 100644 apps/desktop/Cargo.toml rename {apps/desktop/assets => assets}/fonts/JetBrainsMono-Italic.ttf (100%) rename {apps/desktop/assets => assets}/fonts/JetBrainsMono.ttf (100%) rename {apps/desktop/assets => assets}/fonts/SpaceGrotesk-Medium.ttf (100%) rename {apps/desktop/assets => assets}/fonts/SpaceGrotesk-Regular.ttf (100%) rename {apps/desktop/assets => assets}/fonts/SpaceGrotesk-SemiBold.ttf (100%) rename {apps/desktop/assets => assets}/images/icons/abyssals.svg (100%) rename {apps/desktop/assets => assets}/images/icons/alert-triangle.svg (100%) rename {apps/desktop/assets => assets}/images/icons/archive.svg (100%) rename {apps/desktop/assets => assets}/images/icons/arrow-out.svg (100%) rename {apps/desktop/assets => assets}/images/icons/arrow-right.svg (100%) rename {apps/desktop/assets => assets}/images/icons/assets.svg (100%) rename {apps/desktop/assets => assets}/images/icons/bell.svg (100%) rename {apps/desktop/assets => assets}/images/icons/block.svg (100%) rename {apps/desktop/assets => assets}/images/icons/bold.svg (100%) rename {apps/desktop/assets => assets}/images/icons/budget.svg (100%) rename {apps/desktop/assets => assets}/images/icons/calendar.svg (100%) rename {apps/desktop/assets => assets}/images/icons/captains-log.svg (100%) rename {apps/desktop/assets => assets}/images/icons/cart.svg (100%) rename {apps/desktop/assets => assets}/images/icons/check.svg (100%) rename {apps/desktop/assets => assets}/images/icons/chevron.svg (100%) rename {apps/desktop/assets => assets}/images/icons/chevrons-up.svg (100%) rename {apps/desktop/assets => assets}/images/icons/clock.svg (100%) rename {apps/desktop/assets => assets}/images/icons/close.svg (100%) rename {apps/desktop/assets => assets}/images/icons/compare.svg (100%) rename {apps/desktop/assets => assets}/images/icons/contact-sync.svg (100%) rename {apps/desktop/assets => assets}/images/icons/contracts.svg (100%) rename {apps/desktop/assets => assets}/images/icons/copy.svg (100%) rename {apps/desktop/assets => assets}/images/icons/corp.svg (100%) rename {apps/desktop/assets => assets}/images/icons/cross.svg (100%) rename {apps/desktop/assets => assets}/images/icons/doc.svg (100%) rename {apps/desktop/assets => assets}/images/icons/download.svg (100%) rename {apps/desktop/assets => assets}/images/icons/draft.svg (100%) rename {apps/desktop/assets => assets}/images/icons/drop.svg (100%) rename {apps/desktop/assets => assets}/images/icons/facilities.svg (100%) rename {apps/desktop/assets => assets}/images/icons/faction.svg (100%) rename {apps/desktop/assets => assets}/images/icons/filter.svg (100%) rename {apps/desktop/assets => assets}/images/icons/fitting.svg (100%) rename {apps/desktop/assets => assets}/images/icons/flask.svg (100%) rename {apps/desktop/assets => assets}/images/icons/fleet.svg (100%) rename {apps/desktop/assets => assets}/images/icons/folder-open.svg (100%) rename {apps/desktop/assets => assets}/images/icons/forward.svg (100%) rename {apps/desktop/assets => assets}/images/icons/grip.svg (100%) rename {apps/desktop/assets => assets}/images/icons/heart.svg (100%) rename {apps/desktop/assets => assets}/images/icons/help.svg (100%) rename {apps/desktop/assets => assets}/images/icons/image-missing.svg (100%) rename {apps/desktop/assets => assets}/images/icons/inbox-all.svg (100%) rename {apps/desktop/assets => assets}/images/icons/inbox.svg (100%) rename {apps/desktop/assets => assets}/images/icons/industry.svg (100%) rename {apps/desktop/assets => assets}/images/icons/info.svg (100%) rename {apps/desktop/assets => assets}/images/icons/inventory.svg (100%) rename {apps/desktop/assets => assets}/images/icons/italic.svg (100%) rename {apps/desktop/assets => assets}/images/icons/journal.svg (100%) rename {apps/desktop/assets => assets}/images/icons/layout.svg (100%) rename {apps/desktop/assets => assets}/images/icons/link.svg (100%) rename {apps/desktop/assets => assets}/images/icons/live.svg (100%) rename {apps/desktop/assets => assets}/images/icons/lock.svg (100%) rename {apps/desktop/assets => assets}/images/icons/mail.svg (100%) rename {apps/desktop/assets => assets}/images/icons/market-tree.svg (100%) rename {apps/desktop/assets => assets}/images/icons/market.svg (100%) rename {apps/desktop/assets => assets}/images/icons/moon.svg (100%) rename {apps/desktop/assets => assets}/images/icons/mutamarket.svg (100%) rename {apps/desktop/assets => assets}/images/icons/notif-clone.svg (100%) rename {apps/desktop/assets => assets}/images/icons/notif-combat.svg (100%) rename {apps/desktop/assets => assets}/images/icons/notif-contact.svg (100%) rename {apps/desktop/assets => assets}/images/icons/notif-contract.svg (100%) rename {apps/desktop/assets => assets}/images/icons/notif-corp.svg (100%) rename {apps/desktop/assets => assets}/images/icons/notif-fw.svg (100%) rename {apps/desktop/assets => assets}/images/icons/notif-incursion.svg (100%) rename {apps/desktop/assets => assets}/images/icons/notif-industry.svg (100%) rename {apps/desktop/assets => assets}/images/icons/notif-insurance.svg (100%) rename {apps/desktop/assets => assets}/images/icons/notif-market.svg (100%) rename {apps/desktop/assets => assets}/images/icons/notif-mission.svg (100%) rename {apps/desktop/assets => assets}/images/icons/notif-reward.svg (100%) rename {apps/desktop/assets => assets}/images/icons/notif-standing.svg (100%) rename {apps/desktop/assets => assets}/images/icons/notif-structure.svg (100%) rename {apps/desktop/assets => assets}/images/icons/notif-system.svg (100%) rename {apps/desktop/assets => assets}/images/icons/notif-war.svg (100%) rename {apps/desktop/assets => assets}/images/icons/office.svg (100%) rename {apps/desktop/assets => assets}/images/icons/pencil.svg (100%) rename {apps/desktop/assets => assets}/images/icons/personal.svg (100%) rename {apps/desktop/assets => assets}/images/icons/pin.svg (100%) rename {apps/desktop/assets => assets}/images/icons/planet.svg (100%) rename {apps/desktop/assets => assets}/images/icons/plans.svg (100%) rename {apps/desktop/assets => assets}/images/icons/plus-minus.svg (100%) rename {apps/desktop/assets => assets}/images/icons/plus.svg (100%) rename {apps/desktop/assets => assets}/images/icons/pulse.svg (100%) rename {apps/desktop/assets => assets}/images/icons/reply-all.svg (100%) rename {apps/desktop/assets => assets}/images/icons/reply.svg (100%) rename {apps/desktop/assets => assets}/images/icons/reset.svg (100%) rename {apps/desktop/assets => assets}/images/icons/roster.svg (100%) rename {apps/desktop/assets => assets}/images/icons/search.svg (100%) rename {apps/desktop/assets => assets}/images/icons/send.svg (100%) rename {apps/desktop/assets => assets}/images/icons/settings.svg (100%) rename {apps/desktop/assets => assets}/images/icons/shield.svg (100%) rename {apps/desktop/assets => assets}/images/icons/skills.svg (100%) rename {apps/desktop/assets => assets}/images/icons/slash.svg (100%) rename {apps/desktop/assets => assets}/images/icons/snooze.svg (100%) rename {apps/desktop/assets => assets}/images/icons/spark.svg (100%) rename {apps/desktop/assets => assets}/images/icons/squads.svg (100%) rename {apps/desktop/assets => assets}/images/icons/star.svg (100%) rename {apps/desktop/assets => assets}/images/icons/stockpiles.svg (100%) rename {apps/desktop/assets => assets}/images/icons/storefront.svg (100%) rename {apps/desktop/assets => assets}/images/icons/tack.svg (100%) rename {apps/desktop/assets => assets}/images/icons/tag.svg (100%) rename {apps/desktop/assets => assets}/images/icons/target.svg (100%) rename {apps/desktop/assets => assets}/images/icons/tier-all.svg (100%) rename {apps/desktop/assets => assets}/images/icons/tier-constellation.svg (100%) rename {apps/desktop/assets => assets}/images/icons/tier-region.svg (100%) rename {apps/desktop/assets => assets}/images/icons/tier-station.svg (100%) rename {apps/desktop/assets => assets}/images/icons/tier-system.svg (100%) rename {apps/desktop/assets => assets}/images/icons/tilde.svg (100%) rename {apps/desktop/assets => assets}/images/icons/tracker.svg (100%) rename {apps/desktop/assets => assets}/images/icons/trash.svg (100%) rename {apps/desktop/assets => assets}/images/icons/trend.svg (100%) rename {apps/desktop/assets => assets}/images/icons/upload.svg (100%) rename {apps/desktop/assets => assets}/images/icons/users.svg (100%) rename {apps/desktop/assets => assets}/images/icons/utilities.svg (100%) rename {apps/desktop/assets => assets}/images/icons/values.svg (100%) rename {apps/desktop/assets => assets}/images/icons/view-cards.svg (100%) rename {apps/desktop/assets => assets}/images/icons/view-compact.svg (100%) rename {apps/desktop/assets => assets}/images/icons/view-list.svg (100%) rename {apps/desktop/assets => assets}/images/icons/wallet.svg (100%) rename {apps/desktop/assets => assets}/images/identity/128x128.png (100%) rename {apps/desktop/assets => assets}/images/identity/256x256.png (100%) rename {apps/desktop/assets => assets}/images/identity/32x32.png (100%) rename {apps/desktop/assets => assets}/images/identity/icon.icns (100%) rename {apps/desktop/assets => assets}/images/identity/icon.ico (100%) rename {apps/desktop/assets => assets}/images/identity/pod-mark.svg (100%) rename {apps/desktop/assets => assets}/images/items/.no-icon (100%) rename {apps/desktop/assets => assets}/locales/de.toml (100%) rename {apps/desktop/assets => assets}/locales/en-us.toml (100%) rename {apps/desktop/assets => assets}/locales/en.toml (100%) rename {apps/desktop/assets => assets}/locales/es.toml (100%) rename {apps/desktop/assets => assets}/locales/fr.toml (100%) rename {apps/desktop/assets => assets}/locales/ja.toml (100%) rename {apps/desktop/assets => assets}/locales/ko.toml (100%) rename {apps/desktop/assets => assets}/locales/ru.toml (100%) rename {apps/desktop/assets => assets}/locales/zh.toml (100%) rename apps/desktop/build.rs => build.rs (100%) delete mode 100644 docs/design/0050-build-ci-gate-folding-and-single-saver-cache.md delete mode 100644 docs/design/0051-release-decoupled-packaging-and-commit-time-mtimes.md rename {apps/desktop/migrations => migrations}/0001_create_sync_ledger.sql (100%) rename {apps/desktop/migrations => migrations}/0002_create_items.sql (100%) rename {apps/desktop/migrations => migrations}/0003_create_orgs.sql (100%) rename {apps/desktop/migrations => migrations}/0004_create_maps.sql (100%) rename {apps/desktop/migrations => migrations}/0005_create_skill_metadata.sql (100%) rename {apps/desktop/migrations => migrations}/0006_create_certificates.sql (100%) rename {apps/desktop/migrations => migrations}/0007_create_dogma_attributes.sql (100%) rename {apps/desktop/migrations => migrations}/0008_create_http_cache.sql (100%) rename {apps/desktop/migrations => migrations}/0009_create_credentials.sql (100%) rename {apps/desktop/migrations => migrations}/0010_create_outbox.sql (100%) rename {apps/desktop/migrations => migrations}/0011_create_tags.sql (100%) rename {apps/desktop/migrations => migrations}/0012_create_character_attributes.sql (100%) rename {apps/desktop/migrations => migrations}/0013_create_character_implants.sql (100%) rename {apps/desktop/migrations => migrations}/0014_create_character_skills.sql (100%) rename {apps/desktop/migrations => migrations}/0015_create_character_skillqueue.sql (100%) rename {apps/desktop/migrations => migrations}/0016_create_character_telemetry.sql (100%) rename {apps/desktop/migrations => migrations}/0017_create_character_clones.sql (100%) rename {apps/desktop/migrations => migrations}/0018_create_character_jump_clones.sql (100%) rename {apps/desktop/migrations => migrations}/0019_create_character_clone_implants.sql (100%) rename {apps/desktop/migrations => migrations}/0020_create_character_contacts.sql (100%) rename {apps/desktop/migrations => migrations}/0021_create_character_contact_labels.sql (100%) rename {apps/desktop/migrations => migrations}/0022_create_character_standings.sql (100%) rename {apps/desktop/migrations => migrations}/0023_create_squads.sql (100%) rename {apps/desktop/migrations => migrations}/0024_create_corporation_member_roles.sql (100%) rename {apps/desktop/migrations => migrations}/0025_create_character_killmails.sql (100%) rename {apps/desktop/migrations => migrations}/0026_create_character_notifications.sql (100%) rename {apps/desktop/migrations => migrations}/0027_create_skill_plans.sql (100%) rename {apps/desktop/migrations => migrations}/0028_create_character_assets.sql (100%) rename {apps/desktop/migrations => migrations}/0029_create_corporation_assets.sql (100%) rename {apps/desktop/migrations => migrations}/0030_create_abyssal_items.sql (100%) rename {apps/desktop/migrations => migrations}/0031_create_abyssal_module_stats.sql (100%) rename {apps/desktop/migrations => migrations}/0032_create_stockpiles.sql (100%) rename {apps/desktop/migrations => migrations}/0033_create_stockpile_items.sql (100%) rename {apps/desktop/migrations => migrations}/0034_create_character_wallet_journal.sql (100%) rename {apps/desktop/migrations => migrations}/0035_create_character_wallet_transaction.sql (100%) rename {apps/desktop/migrations => migrations}/0036_create_market_orders.sql (100%) rename {apps/desktop/migrations => migrations}/0037_create_market_prices.sql (100%) rename {apps/desktop/migrations => migrations}/0038_create_character_contracts.sql (100%) rename {apps/desktop/migrations => migrations}/0039_create_corporation_wallet_division.sql (100%) rename {apps/desktop/migrations => migrations}/0040_create_corporation_wallet_journal.sql (100%) rename {apps/desktop/migrations => migrations}/0041_create_corporation_wallet_transaction.sql (100%) rename {apps/desktop/migrations => migrations}/0042_create_character_net_worth_snapshot.sql (100%) rename {apps/desktop/migrations => migrations}/0043_create_corporation_net_worth_snapshot.sql (100%) rename {apps/desktop/migrations => migrations}/0044_create_type_price_histories.sql (100%) rename {apps/desktop/migrations => migrations}/0045_create_character_mail.sql (100%) rename {apps/desktop/migrations => migrations}/0046_create_character_mail_body.sql (100%) rename {apps/desktop/migrations => migrations}/0047_create_character_mail_recipients.sql (100%) rename {apps/desktop/migrations => migrations}/0048_create_character_mail_labels.sql (100%) rename {apps/desktop/migrations => migrations}/0049_create_character_mail_label_membership.sql (100%) rename {apps/desktop/migrations => migrations}/0050_create_mail_triage.sql (100%) rename {apps/desktop/migrations => migrations}/0051_create_mail_snooze.sql (100%) rename {apps/desktop/migrations => migrations}/0052_create_mail_folder_assignment.sql (100%) rename {apps/desktop/migrations => migrations}/0053_create_character_state.sql (100%) rename {apps/desktop/migrations => migrations}/0054_create_owned_characters.sql (100%) rename {apps/desktop/migrations => migrations}/0055_create_owned_corporations.sql (100%) rename {apps/desktop/migrations => migrations}/0056_create_active_clone_with_implants.sql (100%) rename {apps/desktop/migrations => migrations}/0057_create_character_contract_escrow.sql (100%) rename {apps/desktop/migrations => migrations}/0058_create_character_net_worth_snapshot_combined.sql (100%) rename {apps/desktop/migrations => migrations}/0059_create_character_wallet_period_summary.sql (100%) rename {apps/desktop/migrations => migrations}/0060_create_mail_unified.sql (100%) rename {apps/desktop/migrations => migrations}/0061_create_character_financials.sql (100%) rename {apps/desktop/migrations => migrations}/0062_add_killmail_value_provenance.sql (100%) rename {apps/desktop/migrations => migrations}/0063_create_saved_asset_filters.sql (100%) rename {apps/desktop/migrations => migrations}/0064_unify_asset_name.sql (100%) rename {apps/desktop/migrations => migrations}/0065_create_character_calendar.sql (100%) rename {apps/desktop/migrations => migrations}/0066_create_character_calendar_attendees.sql (100%) rename {apps/desktop/migrations => migrations}/0067_create_npc_agents.sql (100%) rename {apps/desktop/migrations => migrations}/0068_create_character_industry_jobs.sql (100%) rename {apps/desktop/migrations => migrations}/0069_create_corporation_industry_jobs.sql (100%) rename {apps/desktop/migrations => migrations}/0070_create_character_blueprints.sql (100%) rename {apps/desktop/migrations => migrations}/0071_create_corporation_blueprints.sql (100%) rename {apps/desktop/migrations => migrations}/0072_create_blueprint_activity_products.sql (100%) rename {apps/desktop/migrations => migrations}/0073_create_blueprint_activity_materials.sql (100%) rename {apps/desktop/migrations => migrations}/0074_create_killmail_detail.sql (100%) rename {apps/desktop/migrations => migrations}/0075_create_blueprint_activity_meta.sql (100%) rename {apps/desktop/migrations => migrations}/0076_create_industry_cost_indices.sql (100%) rename {apps/desktop/migrations => migrations}/0077_create_industry_plans.sql (100%) rename {apps/desktop/migrations => migrations}/0078_create_industry_plan_types.sql (100%) rename {apps/desktop/migrations => migrations}/0079_add_credential_reauth_status.sql (100%) rename {apps/desktop/migrations => migrations}/0080_create_pinned_structures.sql (100%) rename {apps/desktop/migrations => migrations}/0081_create_corporation_standings.sql (100%) rename {apps/desktop/migrations => migrations}/0082_create_corporation_contacts.sql (100%) rename {apps/desktop/migrations => migrations}/0083_create_corporation_killmails.sql (100%) rename {apps/desktop/migrations => migrations}/0084_create_contract_detail.sql (100%) rename {apps/desktop/migrations => migrations}/0085_create_moons.sql (100%) rename {apps/desktop/migrations => migrations}/0086_create_corporation_mining_extractions.sql (100%) rename {apps/desktop/migrations => migrations}/0087_add_industry_plan_types_use_stock.sql (100%) rename {apps/desktop/migrations => migrations}/0088_add_hot_path_indexes.sql (100%) rename {apps/desktop/migrations => migrations}/0089_stockpile_character_scope.sql (100%) rename {apps/desktop/migrations => migrations}/0090_drop_mail_triage_pin.sql (100%) rename {apps/desktop/migrations => migrations}/0091_add_mail_folder_assignment_assigned_at.sql (100%) rename {apps/desktop/migrations => migrations}/0092_create_mail_drafts.sql (100%) rename {apps/desktop/migrations => migrations}/0093_create_budget.sql (100%) rename {apps/desktop/migrations => migrations}/0094_create_budget_entry_assignments.sql (100%) rename {apps/desktop/migrations => migrations}/0095_create_budget_scope_seeded.sql (100%) rename {apps/desktop/migrations => migrations}/0096_add_market_prices_source.sql (100%) rename {apps/desktop/migrations => migrations}/0097_recreate_character_financials_muta.sql (100%) rename {apps/desktop/migrations => migrations}/0098_create_corporation_abyssal_items.sql (100%) rename {apps/desktop/migrations => migrations}/0099_add_budget_entry_assignment_owner.sql (100%) rename {apps/desktop/migrations => migrations}/0100_create_budget_rules.sql (100%) rename {apps/desktop/migrations => migrations}/0101_create_industry_plan_segments.sql (100%) rename {apps/desktop/migrations => migrations}/0102_repair_budget_assignments.sql (100%) rename {apps/desktop/migrations => migrations}/0103_create_notifications.sql (100%) rename {apps/desktop/migrations => migrations}/0104_backfill_split_owner_assignments.sql (100%) rename {apps/desktop/migrations => migrations}/0105_add_notifications_keyset_index.sql (100%) rename {apps/desktop/migrations => migrations}/0106_create_type_materials.sql (100%) rename {apps/desktop/migrations => migrations}/0107_purge_non_participant_killmails.sql (100%) rename {apps/desktop/migrations => migrations}/0108_scope_tags.sql (100%) rename {apps/desktop/migrations => migrations}/0109_dedupe_scoped_tags.sql (100%) rename {apps/desktop/migrations => migrations}/0110_rekey_wallet_journal_per_wallet.sql (100%) rename {apps/desktop/migrations => migrations}/0111_create_industry_facility_storage.sql (100%) rename {apps/desktop/migrations => migrations}/0112_budget_journal_only.sql (100%) rename {apps/desktop/migrations => migrations}/0113_create_sync_lists.sql (100%) rename {apps/desktop/migrations => migrations}/0114_skill_plan_templates.sql (100%) rename {apps/desktop/migrations => migrations}/0115_facility_intel_snapshot.sql (100%) rename {apps/desktop/migrations => migrations}/0116_drop_pinned_structures.sql (100%) rename {apps/desktop/migrations => migrations}/0117_skill_plan_milestones.sql (100%) rename {apps/desktop/migrations => migrations}/0118_skill_plan_position.sql (100%) rename {apps/desktop/migrations => migrations}/0119_captains_log.sql (100%) rename {apps/desktop/migrations => migrations}/0120_killmail_report.sql (100%) rename {apps/desktop/migrations => migrations}/0121_skill_completion.sql (100%) rename {apps/desktop/migrations => migrations}/0122_calendar_event_note.sql (100%) rename {apps/desktop/migrations => migrations}/0123_field_notes.sql (100%) rename {apps/desktop/migrations => migrations}/0124_combined_net_worth_include_corporations.sql (100%) rename {apps/desktop/migrations => migrations}/0125_captains_log_prompt_config.sql (100%) rename {apps/desktop/migrations => migrations}/0126_create_corporation_hangar_division.sql (100%) rename {apps/desktop/migrations => migrations}/0127_add_asset_value_to_corporation_net_worth_snapshot.sql (100%) rename {apps/desktop/migrations => migrations}/0128_combined_net_worth_value_corp_assets.sql (100%) rename {apps/desktop/migrations => migrations}/0129_create_objectives.sql (100%) rename {apps/desktop/migrations => migrations}/0130_create_character_dossier.sql (100%) rename {apps/desktop/migrations => migrations}/0131_create_character_sp_snapshot.sql (100%) rename {apps/desktop/migrations => migrations}/0132_create_industry_completion.sql (100%) rename {apps/desktop/migrations => migrations}/0133_add_eft_to_facility_intel.sql (100%) rename {apps/desktop/migrations => migrations}/0134_create_market_default.sql (100%) rename {apps/desktop/migrations => migrations}/0135_create_market_watchlist.sql (100%) rename {apps/desktop/migrations => migrations}/0136_create_market_alert_state.sql (100%) rename {apps/desktop/migrations => migrations}/0137_create_corporation_market_orders.sql (100%) rename {apps/desktop/migrations => migrations}/0138_create_character_planets.sql (100%) rename {apps/desktop/migrations => migrations}/0139_create_character_planet_pins.sql (100%) rename {apps/desktop/migrations => migrations}/0140_create_character_planet_pin_contents.sql (100%) rename {apps/desktop/migrations => migrations}/0141_create_character_planet_routes.sql (100%) rename {apps/desktop/migrations => migrations}/0142_create_character_planet_links.sql (100%) rename {apps/desktop/migrations => migrations}/0143_create_planet_schematics.sql (100%) rename {apps/desktop/migrations => migrations}/0144_create_planet_schematic_types.sql (100%) rename {apps/desktop/migrations => migrations}/0145_create_structure_state.sql (100%) rename {apps/desktop/migrations => migrations}/0146_create_customs_offices.sql (100%) rename {apps/desktop/migrations => migrations}/0147_add_watch_location_scope.sql (100%) rename {apps/desktop/migrations => migrations}/0148_create_market_comparison.sql (100%) rename {apps/desktop/migrations => migrations}/0149_add_is_corporation_to_market_orders.sql (100%) rename {apps/desktop/migrations => migrations}/0150_recreate_character_financials_exclude_corp_escrow.sql (100%) rename {apps/desktop/migrations => migrations}/0151_add_market_watchlist_sort_order.sql (100%) rename {apps/desktop/migrations => migrations}/0152_create_market_cart.sql (100%) rename {apps/desktop/migrations => migrations}/0153_create_market_comparison_pins.sql (100%) rename {apps/desktop/migrations => migrations}/0154_create_market_lot_dismissal.sql (100%) rename {apps/desktop/migrations => migrations}/0155_drop_market_watchlist_character_id.sql (100%) rename {apps/desktop/migrations => migrations}/0156_drop_market_comparison.sql (100%) rename {apps/desktop/migrations => migrations}/0157_create_observed_market_orders.sql (100%) delete mode 100755 scripts/ci/commit-mtime rename {apps/desktop/src => src}/app.rs (100%) rename {apps/desktop/src => src}/app/boot.rs (100%) rename {apps/desktop/src => src}/app/dispatch.rs (100%) rename {apps/desktop/src => src}/app/graphics.rs (100%) rename {apps/desktop/src => src}/app/image_heal.rs (100%) rename {apps/desktop/src => src}/app/lease.rs (100%) rename {apps/desktop/src => src}/app/lifecycle.rs (100%) rename {apps/desktop/src => src}/app/logging.rs (100%) rename {apps/desktop/src => src}/app/navigation.rs (100%) rename {apps/desktop/src => src}/app/notification_center.rs (100%) rename {apps/desktop/src => src}/app/pack_open.rs (100%) rename {apps/desktop/src => src}/app/palette.rs (100%) rename {apps/desktop/src => src}/app/settings_ops.rs (100%) rename {apps/desktop/src => src}/app/shortcuts.rs (100%) rename {apps/desktop/src => src}/app/snooze_scheduler.rs (100%) rename {apps/desktop/src => src}/app/status_bar.rs (100%) rename {apps/desktop/src => src}/app/trash_purge_scheduler.rs (100%) rename {apps/desktop/src => src}/app/windows.rs (100%) rename {apps/desktop/src => src}/clients.rs (100%) rename {apps/desktop/src => src}/clients/esi.rs (100%) rename {apps/desktop/src => src}/clients/esi/alliance.rs (100%) rename {apps/desktop/src => src}/clients/esi/bloodlines.rs (100%) rename {apps/desktop/src => src}/clients/esi/character.rs (100%) rename {apps/desktop/src => src}/clients/esi/corporation.rs (100%) rename {apps/desktop/src => src}/clients/esi/dogma.rs (100%) rename {apps/desktop/src => src}/clients/esi/faction.rs (100%) rename {apps/desktop/src => src}/clients/esi/industry.rs (100%) rename {apps/desktop/src => src}/clients/esi/killmail.rs (100%) rename {apps/desktop/src => src}/clients/esi/market.rs (100%) rename {apps/desktop/src => src}/clients/esi/models.rs (100%) rename {apps/desktop/src => src}/clients/esi/models/alliance.rs (100%) rename {apps/desktop/src => src}/clients/esi/models/assets.rs (100%) rename {apps/desktop/src => src}/clients/esi/models/bloodlines.rs (100%) rename {apps/desktop/src => src}/clients/esi/models/blueprint.rs (100%) rename {apps/desktop/src => src}/clients/esi/models/character.rs (100%) rename {apps/desktop/src => src}/clients/esi/models/corporation.rs (100%) rename {apps/desktop/src => src}/clients/esi/models/dogma.rs (100%) rename {apps/desktop/src => src}/clients/esi/models/faction.rs (100%) rename {apps/desktop/src => src}/clients/esi/models/industry.rs (100%) rename {apps/desktop/src => src}/clients/esi/models/killmail.rs (100%) rename {apps/desktop/src => src}/clients/esi/models/market.rs (100%) rename {apps/desktop/src => src}/clients/esi/models/races.rs (100%) rename {apps/desktop/src => src}/clients/esi/models/universe.rs (100%) rename {apps/desktop/src => src}/clients/esi/races.rs (100%) rename {apps/desktop/src => src}/clients/esi/scopes.rs (100%) rename {apps/desktop/src => src}/clients/esi/universe.rs (100%) rename {apps/desktop/src => src}/clients/eve_image.rs (100%) rename {apps/desktop/src => src}/clients/eve_sso.rs (100%) rename {apps/desktop/src => src}/clients/http.rs (100%) rename {apps/desktop/src => src}/clients/muta_market.rs (100%) rename {apps/desktop/src => src}/clients/sde.rs (100%) rename {apps/desktop/src => src}/clients/telemetry.rs (100%) rename {apps/desktop/src => src}/clients/zkillboard.rs (100%) rename {apps/desktop/src => src}/config.rs (100%) rename {apps/desktop/src => src}/features.rs (100%) rename {apps/desktop/src => src}/features/assets.rs (100%) rename {apps/desktop/src => src}/features/assets/abyssals.rs (100%) rename {apps/desktop/src => src}/features/assets/abyssals/card.rs (100%) rename {apps/desktop/src => src}/features/assets/abyssals/card_grid.rs (100%) rename {apps/desktop/src => src}/features/assets/abyssals/filter_sidebar.rs (100%) rename {apps/desktop/src => src}/features/assets/abyssals/module_type_picker.rs (100%) rename {apps/desktop/src => src}/features/assets/abyssals/stat_ranges.rs (100%) rename {apps/desktop/src => src}/features/assets/abyssals/stat_row.rs (100%) rename {apps/desktop/src => src}/features/assets/abyssals/tier_badge.rs (100%) rename {apps/desktop/src => src}/features/assets/abyssals/type_icon_tile.rs (100%) rename {apps/desktop/src => src}/features/assets/header.rs (100%) rename {apps/desktop/src => src}/features/assets/inventory.rs (100%) rename {apps/desktop/src => src}/features/assets/shell.rs (100%) rename {apps/desktop/src => src}/features/assets/stockpile_multibuy.rs (100%) rename {apps/desktop/src => src}/features/assets/stockpile_search.rs (100%) rename {apps/desktop/src => src}/features/assets/stockpiles.rs (100%) rename {apps/desktop/src => src}/features/assets/stockpiles/card.rs (100%) rename {apps/desktop/src => src}/features/assets/stockpiles/card_grid.rs (100%) rename {apps/desktop/src => src}/features/assets/stockpiles/item_row.rs (100%) rename {apps/desktop/src => src}/features/assets/tracker.rs (100%) rename {apps/desktop/src => src}/features/assets/tree.rs (100%) rename {apps/desktop/src => src}/features/assets/values.rs (100%) rename {apps/desktop/src => src}/features/calendar.rs (100%) rename {apps/desktop/src => src}/features/calendar/agenda.rs (100%) rename {apps/desktop/src => src}/features/calendar/day.rs (100%) rename {apps/desktop/src => src}/features/calendar/detail.rs (100%) rename {apps/desktop/src => src}/features/calendar/grid.rs (100%) rename {apps/desktop/src => src}/features/calendar/loaders.rs (100%) rename {apps/desktop/src => src}/features/calendar/month.rs (100%) rename {apps/desktop/src => src}/features/calendar/palette.rs (100%) rename {apps/desktop/src => src}/features/calendar/respond.rs (100%) rename {apps/desktop/src => src}/features/calendar/shell.rs (100%) rename {apps/desktop/src => src}/features/calendar/switcher.rs (100%) rename {apps/desktop/src => src}/features/calendar/time.rs (100%) rename {apps/desktop/src => src}/features/calendar/week.rs (100%) rename {apps/desktop/src => src}/features/calendar/year.rs (100%) rename {apps/desktop/src => src}/features/industry.rs (100%) rename {apps/desktop/src => src}/features/industry/blueprints.rs (100%) rename {apps/desktop/src => src}/features/industry/colonies.rs (100%) rename {apps/desktop/src => src}/features/industry/colony_drawer.rs (100%) rename {apps/desktop/src => src}/features/industry/extractions.rs (100%) rename {apps/desktop/src => src}/features/industry/facility_owner.rs (100%) rename {apps/desktop/src => src}/features/industry/jobs.rs (100%) rename {apps/desktop/src => src}/features/industry/loaders.rs (100%) rename {apps/desktop/src => src}/features/industry/planner.rs (100%) rename {apps/desktop/src => src}/features/industry/planner_loaders.rs (100%) rename {apps/desktop/src => src}/features/industry/planner_model.rs (100%) rename {apps/desktop/src => src}/features/industry/planner_search.rs (100%) rename {apps/desktop/src => src}/features/industry/rig_bonuses.rs (100%) rename {apps/desktop/src => src}/features/industry/shell.rs (100%) rename {apps/desktop/src => src}/features/industry/side_rail.rs (100%) rename {apps/desktop/src => src}/features/industry/switcher.rs (100%) rename {apps/desktop/src => src}/features/mail.rs (100%) rename {apps/desktop/src => src}/features/mail/compose.rs (100%) rename {apps/desktop/src => src}/features/mail/draft.rs (100%) rename {apps/desktop/src => src}/features/mail/folder_pane.rs (100%) rename {apps/desktop/src => src}/features/mail/labels.rs (100%) rename {apps/desktop/src => src}/features/mail/loaders.rs (100%) rename {apps/desktop/src => src}/features/mail/markup.rs (100%) rename {apps/desktop/src => src}/features/mail/message_list.rs (100%) rename {apps/desktop/src => src}/features/mail/outbox_indicator.rs (100%) rename {apps/desktop/src => src}/features/mail/read_state.rs (100%) rename {apps/desktop/src => src}/features/mail/reading_pane.rs (100%) rename {apps/desktop/src => src}/features/mail/shell.rs (100%) rename {apps/desktop/src => src}/features/mail/snooze.rs (100%) rename {apps/desktop/src => src}/features/mail/switcher.rs (100%) rename {apps/desktop/src => src}/features/mail/triage.rs (100%) rename {apps/desktop/src => src}/features/market.rs (100%) rename {apps/desktop/src => src}/features/market/book.rs (100%) rename {apps/desktop/src => src}/features/market/book_view.rs (100%) rename {apps/desktop/src => src}/features/market/browse.rs (100%) rename {apps/desktop/src => src}/features/market/cart.rs (100%) rename {apps/desktop/src => src}/features/market/compare.rs (100%) rename {apps/desktop/src => src}/features/market/compare/view.rs (100%) rename {apps/desktop/src => src}/features/market/history.rs (100%) rename {apps/desktop/src => src}/features/market/history_chart.rs (100%) rename {apps/desktop/src => src}/features/market/history_view.rs (100%) rename {apps/desktop/src => src}/features/market/i18n.rs (100%) rename {apps/desktop/src => src}/features/market/my_orders.rs (100%) rename {apps/desktop/src => src}/features/market/order_history.rs (100%) rename {apps/desktop/src => src}/features/market/outbid.rs (100%) rename {apps/desktop/src => src}/features/market/shell.rs (100%) rename {apps/desktop/src => src}/features/market/tree.rs (100%) rename {apps/desktop/src => src}/features/market/watch_eval.rs (100%) rename {apps/desktop/src => src}/features/market/watchlist.rs (100%) rename {apps/desktop/src => src}/features/roster.rs (100%) rename {apps/desktop/src => src}/features/roster/add_character.rs (100%) rename {apps/desktop/src => src}/features/roster/auth.rs (100%) rename {apps/desktop/src => src}/features/roster/auth/deep_link.rs (100%) rename {apps/desktop/src => src}/features/roster/auth/deep_link/linux.rs (100%) rename {apps/desktop/src => src}/features/roster/auth/deep_link/macos.rs (100%) rename {apps/desktop/src => src}/features/roster/auth/deep_link/single_instance.rs (100%) rename {apps/desktop/src => src}/features/roster/auth/deep_link/windows.rs (100%) rename {apps/desktop/src => src}/features/roster/auth/session.rs (100%) rename {apps/desktop/src => src}/features/roster/captains_log.rs (100%) rename {apps/desktop/src => src}/features/roster/captains_log/entries.rs (100%) rename {apps/desktop/src => src}/features/roster/captains_log/eve_date.rs (100%) rename {apps/desktop/src => src}/features/roster/captains_log/events.rs (100%) rename {apps/desktop/src => src}/features/roster/captains_log/field_notes.rs (100%) rename {apps/desktop/src => src}/features/roster/captains_log/header.rs (100%) rename {apps/desktop/src => src}/features/roster/captains_log/km_report.rs (100%) rename {apps/desktop/src => src}/features/roster/captains_log/narrative.rs (100%) rename {apps/desktop/src => src}/features/roster/captains_log/objective_link.rs (100%) rename {apps/desktop/src => src}/features/roster/captains_log/past.rs (100%) rename {apps/desktop/src => src}/features/roster/captains_log/prompts.rs (100%) rename {apps/desktop/src => src}/features/roster/captains_log/rollup.rs (100%) rename {apps/desktop/src => src}/features/roster/captains_log/rollup_tiles.rs (100%) rename {apps/desktop/src => src}/features/roster/captains_log/wizard.rs (100%) rename {apps/desktop/src => src}/features/roster/captains_log_nudge.rs (100%) rename {apps/desktop/src => src}/features/roster/card.rs (100%) rename {apps/desktop/src => src}/features/roster/character_detail.rs (100%) rename {apps/desktop/src => src}/features/roster/character_detail/header.rs (100%) rename {apps/desktop/src => src}/features/roster/character_detail/killmail_loader.rs (100%) rename {apps/desktop/src => src}/features/roster/character_detail/tabs.rs (100%) rename {apps/desktop/src => src}/features/roster/character_detail/tabs/clones.rs (100%) rename {apps/desktop/src => src}/features/roster/character_detail/tabs/contact_modal.rs (100%) rename {apps/desktop/src => src}/features/roster/character_detail/tabs/contacts.rs (100%) rename {apps/desktop/src => src}/features/roster/character_detail/tabs/dossier.rs (100%) rename {apps/desktop/src => src}/features/roster/character_detail/tabs/killlog.rs (100%) rename {apps/desktop/src => src}/features/roster/character_detail/tabs/notifications.rs (100%) rename {apps/desktop/src => src}/features/roster/character_detail/tabs/shared.rs (100%) rename {apps/desktop/src => src}/features/roster/character_detail/tabs/standings.rs (100%) rename {apps/desktop/src => src}/features/roster/compact_card.rs (100%) rename {apps/desktop/src => src}/features/roster/contact_sync.rs (100%) rename {apps/desktop/src => src}/features/roster/contact_sync/editor.rs (100%) rename {apps/desktop/src => src}/features/roster/contact_sync/index.rs (100%) rename {apps/desktop/src => src}/features/roster/corp_card.rs (100%) rename {apps/desktop/src => src}/features/roster/corp_compact_card.rs (100%) rename {apps/desktop/src => src}/features/roster/corp_list_row.rs (100%) rename {apps/desktop/src => src}/features/roster/corporation_detail.rs (100%) rename {apps/desktop/src => src}/features/roster/corporation_detail/killmail_loader.rs (100%) rename {apps/desktop/src => src}/features/roster/corporation_detail/tabs.rs (100%) rename {apps/desktop/src => src}/features/roster/corporation_detail/tabs/contacts.rs (100%) rename {apps/desktop/src => src}/features/roster/corporation_detail/tabs/killlog.rs (100%) rename {apps/desktop/src => src}/features/roster/corporation_detail/tabs/shared.rs (100%) rename {apps/desktop/src => src}/features/roster/corporation_detail/tabs/standings.rs (100%) rename {apps/desktop/src => src}/features/roster/entity_search.rs (100%) rename {apps/desktop/src => src}/features/roster/killmail_detail.rs (100%) rename {apps/desktop/src => src}/features/roster/list_row.rs (100%) rename {apps/desktop/src => src}/features/roster/name_link.rs (100%) rename {apps/desktop/src => src}/features/roster/roster.rs (100%) rename {apps/desktop/src => src}/features/roster/roster_tabs.rs (100%) rename {apps/desktop/src => src}/features/roster/search_help.rs (100%) rename {apps/desktop/src => src}/features/roster/squad_ui.rs (100%) rename {apps/desktop/src => src}/features/roster/standing_orders.rs (100%) rename {apps/desktop/src => src}/features/roster/standing_orders/board.rs (100%) rename {apps/desktop/src => src}/features/roster/standing_orders/detail.rs (100%) rename {apps/desktop/src => src}/features/roster/standing_orders/modal.rs (100%) rename {apps/desktop/src => src}/features/roster/standing_orders/ui.rs (100%) rename {apps/desktop/src => src}/features/roster/structure_alerts.rs (100%) rename {apps/desktop/src => src}/features/roster/view_mode.rs (100%) rename {apps/desktop/src => src}/features/settings.rs (100%) rename {apps/desktop/src => src}/features/settings/about_tab.rs (100%) rename {apps/desktop/src => src}/features/settings/accessibility_tab.rs (100%) rename {apps/desktop/src => src}/features/settings/captains_log_tab.rs (100%) rename {apps/desktop/src => src}/features/settings/data_export.rs (100%) rename {apps/desktop/src => src}/features/settings/facility_intel_fit.rs (100%) rename {apps/desktop/src => src}/features/settings/facility_intel_import.rs (100%) rename {apps/desktop/src => src}/features/settings/facility_intel_share.rs (100%) rename {apps/desktop/src => src}/features/settings/facility_tab.rs (100%) rename {apps/desktop/src => src}/features/settings/features_tab.rs (100%) rename {apps/desktop/src => src}/features/settings/i18n.rs (100%) rename {apps/desktop/src => src}/features/settings/log_export.rs (100%) rename {apps/desktop/src => src}/features/settings/mcp_tab.rs (100%) rename {apps/desktop/src => src}/features/settings/storage_tab.rs (100%) rename {apps/desktop/src => src}/features/settings/tags_tab.rs (100%) rename {apps/desktop/src => src}/features/settings/telemetry_tab.rs (100%) rename {apps/desktop/src => src}/features/settings/ui_tab.rs (100%) rename {apps/desktop/src => src}/features/shell.rs (100%) rename {apps/desktop/src => src}/features/shell/command_palette.rs (100%) rename {apps/desktop/src => src}/features/shell/focus_search.rs (100%) rename {apps/desktop/src => src}/features/shell/nav_catalog.rs (100%) rename {apps/desktop/src => src}/features/shell/notifications.rs (100%) rename {apps/desktop/src => src}/features/shell/registry.rs (100%) rename {apps/desktop/src => src}/features/shell/window_chrome.rs (100%) rename {apps/desktop/src => src}/features/shell/window_state.rs (100%) rename {apps/desktop/src => src}/features/shell/window_state/coalesce.rs (100%) rename {apps/desktop/src => src}/features/shell/window_state/validity.rs (100%) rename {apps/desktop/src => src}/features/skills.rs (100%) rename {apps/desktop/src => src}/features/skills/attributes.rs (100%) rename {apps/desktop/src => src}/features/skills/browse.rs (100%) rename {apps/desktop/src => src}/features/skills/format.rs (100%) rename {apps/desktop/src => src}/features/skills/header.rs (100%) rename {apps/desktop/src => src}/features/skills/layout_shell.rs (100%) rename {apps/desktop/src => src}/features/skills/optimizer.rs (100%) rename {apps/desktop/src => src}/features/skills/plan_csv.rs (100%) rename {apps/desktop/src => src}/features/skills/plan_math.rs (100%) rename {apps/desktop/src => src}/features/skills/plan_summary.rs (100%) rename {apps/desktop/src => src}/features/skills/plan_summary/attr_optimization_section.rs (100%) rename {apps/desktop/src => src}/features/skills/plan_summary/bar_chart.rs (100%) rename {apps/desktop/src => src}/features/skills/plan_summary/implant_effect_section.rs (100%) rename {apps/desktop/src => src}/features/skills/plan_summary/injector_section.rs (100%) rename {apps/desktop/src => src}/features/skills/plan_summary/plan_totals_section.rs (100%) rename {apps/desktop/src => src}/features/skills/plan_summary/time_by_group_section.rs (100%) rename {apps/desktop/src => src}/features/skills/plan_summary/time_by_pair_section.rs (100%) rename {apps/desktop/src => src}/features/skills/queue.rs (100%) rename {apps/desktop/src => src}/features/skills/queue_section.rs (100%) rename {apps/desktop/src => src}/features/skills/queue_section/col_header.rs (100%) rename {apps/desktop/src => src}/features/skills/queue_section/empty_state.rs (100%) rename {apps/desktop/src => src}/features/skills/queue_section/footer.rs (100%) rename {apps/desktop/src => src}/features/skills/queue_section/row.rs (100%) rename {apps/desktop/src => src}/features/skills/queue_timing.rs (100%) rename {apps/desktop/src => src}/features/skills/right_panel.rs (100%) rename {apps/desktop/src => src}/features/skills/right_panel/attributes_tab.rs (100%) rename {apps/desktop/src => src}/features/skills/right_panel/attributes_tab/attr_row.rs (100%) rename {apps/desktop/src => src}/features/skills/right_panel/attributes_tab/rate_grid.rs (100%) rename {apps/desktop/src => src}/features/skills/right_panel/attributes_tab/remap_card.rs (100%) rename {apps/desktop/src => src}/features/skills/right_panel/attributes_tab/section_header.rs (100%) rename {apps/desktop/src => src}/features/skills/right_panel/browser_tab.rs (100%) rename {apps/desktop/src => src}/features/skills/right_panel/browser_tab/group_header.rs (100%) rename {apps/desktop/src => src}/features/skills/right_panel/browser_tab/search_bar.rs (100%) rename {apps/desktop/src => src}/features/skills/right_panel/browser_tab/skill_row.rs (100%) rename {apps/desktop/src => src}/features/skills/right_panel/plans_tab.rs (100%) rename {apps/desktop/src => src}/features/skills/right_panel/plans_tab/empty_state.rs (100%) rename {apps/desktop/src => src}/features/skills/right_panel/plans_tab/from_queue_button.rs (100%) rename {apps/desktop/src => src}/features/skills/right_panel/plans_tab/from_selected_button.rs (100%) rename {apps/desktop/src => src}/features/skills/right_panel/plans_tab/new_plan_button.rs (100%) rename {apps/desktop/src => src}/features/skills/right_panel/plans_tab/plan_card.rs (100%) rename {apps/desktop/src => src}/features/skills/right_panel/queue_tab.rs (100%) rename {apps/desktop/src => src}/features/skills/skill_plan_editor.rs (100%) rename {apps/desktop/src => src}/features/skills/skill_plan_editor/clipboard_win.rs (100%) rename {apps/desktop/src => src}/features/skills/skill_plan_editor/eft.rs (100%) rename {apps/desktop/src => src}/features/skills/skill_plan_editor/empty_state.rs (100%) rename {apps/desktop/src => src}/features/skills/skill_plan_editor/entry_row.rs (100%) rename {apps/desktop/src => src}/features/skills/skill_plan_editor/header.rs (100%) rename {apps/desktop/src => src}/features/skills/skill_plan_editor/import_export.rs (100%) rename {apps/desktop/src => src}/features/skills/skill_plan_editor/milestone_divider.rs (100%) rename {apps/desktop/src => src}/features/skills/skill_plan_editor/picker.rs (100%) rename {apps/desktop/src => src}/features/skills/skill_plan_editor/picker/empty_state.rs (100%) rename {apps/desktop/src => src}/features/skills/skill_plan_editor/picker/group_header.rs (100%) rename {apps/desktop/src => src}/features/skills/skill_plan_editor/picker/item_row.rs (100%) rename {apps/desktop/src => src}/features/skills/skill_plan_editor/picker/result_row.rs (100%) rename {apps/desktop/src => src}/features/skills/skill_plan_editor/picker/search_bar.rs (100%) rename {apps/desktop/src => src}/features/skills/skill_plan_editor/picker/tabs.rs (100%) rename {apps/desktop/src => src}/features/skills/skill_plan_editor/plan_entry_list.rs (100%) rename {apps/desktop/src => src}/features/skills/skill_plan_editor/stats_strip.rs (100%) rename {apps/desktop/src => src}/features/skills/skill_plan_editor/summary.rs (100%) rename {apps/desktop/src => src}/features/skills/skill_plan_manager.rs (100%) rename {apps/desktop/src => src}/features/skills/skills_compare.rs (100%) rename {apps/desktop/src => src}/features/skills/skills_compare/header.rs (100%) rename {apps/desktop/src => src}/features/skills/skills_compare/matrix.rs (100%) rename {apps/desktop/src => src}/features/skills/skills_compare/model.rs (100%) rename {apps/desktop/src => src}/features/skills/skills_compare/summary.rs (100%) rename {apps/desktop/src => src}/features/skills/training_hero.rs (100%) rename {apps/desktop/src => src}/features/skills/training_hero/active.rs (100%) rename {apps/desktop/src => src}/features/skills/training_hero/idle.rs (100%) rename {apps/desktop/src => src}/features/skills/training_hero/pip_row.rs (100%) rename {apps/desktop/src => src}/features/skills/training_hero/queue_item.rs (100%) rename {apps/desktop/src => src}/features/skills/training_hero/right_col.rs (100%) rename {apps/desktop/src => src}/features/skills/warning_strip.rs (100%) rename {apps/desktop/src => src}/features/splash.rs (100%) rename {apps/desktop/src => src}/features/splash/animation.rs (100%) rename {apps/desktop/src => src}/features/splash/preflight.rs (100%) rename {apps/desktop/src => src}/features/splash/seed.rs (100%) rename {apps/desktop/src => src}/features/splash/status_message.rs (100%) rename {apps/desktop/src => src}/features/splash/version.rs (100%) rename {apps/desktop/src => src}/features/wallet.rs (100%) rename {apps/desktop/src => src}/features/wallet/budget.rs (100%) rename {apps/desktop/src => src}/features/wallet/budget_engine.rs (100%) rename {apps/desktop/src => src}/features/wallet/budget_reflect.rs (100%) rename {apps/desktop/src => src}/features/wallet/budget_rules.rs (100%) rename {apps/desktop/src => src}/features/wallet/budget_view.rs (100%) rename {apps/desktop/src => src}/features/wallet/contract_detail.rs (100%) rename {apps/desktop/src => src}/features/wallet/header.rs (100%) rename {apps/desktop/src => src}/features/wallet/hero.rs (100%) rename {apps/desktop/src => src}/features/wallet/i18n.rs (100%) rename {apps/desktop/src => src}/features/wallet/loaders.rs (100%) rename {apps/desktop/src => src}/features/wallet/rule_pack.rs (100%) rename {apps/desktop/src => src}/features/wallet/selection.rs (100%) rename {apps/desktop/src => src}/features/wallet/shell.rs (100%) rename {apps/desktop/src => src}/features/wallet/side_filter.rs (100%) rename {apps/desktop/src => src}/features/wallet/wallets_view.rs (100%) rename {apps/desktop/src => src}/features/wizard.rs (100%) rename {apps/desktop/src => src}/main.rs (100%) rename {apps/desktop/src => src}/services.rs (100%) rename {apps/desktop/src => src}/services/corp_eligibility.rs (100%) rename {apps/desktop/src => src}/services/fitting.rs (100%) rename {apps/desktop/src => src}/services/i18n.rs (100%) rename {apps/desktop/src => src}/services/i18n/language.rs (100%) rename {apps/desktop/src => src}/services/images.rs (100%) rename {apps/desktop/src => src}/services/inventory_lots.rs (100%) rename {apps/desktop/src => src}/services/location_search.rs (100%) rename {apps/desktop/src => src}/services/market_prices.rs (100%) rename {apps/desktop/src => src}/services/mcp.rs (100%) rename {apps/desktop/src => src}/services/mcp/args.rs (100%) rename {apps/desktop/src => src}/services/mcp/bridge.rs (100%) rename {apps/desktop/src => src}/services/mcp/names.rs (100%) rename {apps/desktop/src => src}/services/mcp/protocol.rs (100%) rename {apps/desktop/src => src}/services/mcp/reload.rs (100%) rename {apps/desktop/src => src}/services/mcp/server.rs (100%) rename {apps/desktop/src => src}/services/mcp/tool.rs (100%) rename {apps/desktop/src => src}/services/mcp/tools_captains_log.rs (100%) rename {apps/desktop/src => src}/services/mcp/tools_dossier.rs (100%) rename {apps/desktop/src => src}/services/mcp/tools_mail.rs (100%) rename {apps/desktop/src => src}/services/mcp/tools_objectives.rs (100%) rename {apps/desktop/src => src}/services/mcp/tools_read.rs (100%) rename {apps/desktop/src => src}/services/mcp/tools_write.rs (100%) rename {apps/desktop/src => src}/services/mcp/transport.rs (100%) rename {apps/desktop/src => src}/services/migration.rs (100%) rename {apps/desktop/src => src}/services/migration/v0_6_11.rs (100%) rename {apps/desktop/src => src}/services/migration/v0_6_20.rs (100%) rename {apps/desktop/src => src}/services/migration/v0_6_8.rs (100%) rename {apps/desktop/src => src}/services/parsing.rs (100%) rename {apps/desktop/src => src}/services/parsing/dispatch.rs (100%) rename {apps/desktop/src => src}/services/parsing/eft.rs (100%) rename {apps/desktop/src => src}/services/parsing/level.rs (100%) rename {apps/desktop/src => src}/services/parsing/quantity.rs (100%) rename {apps/desktop/src => src}/services/parsing/resolve.rs (100%) rename {apps/desktop/src => src}/services/parsing/sanitize.rs (100%) rename {apps/desktop/src => src}/services/pod_pack.rs (100%) rename {apps/desktop/src => src}/services/prices.rs (100%) rename {apps/desktop/src => src}/services/telemetry.rs (100%) rename {apps/desktop/src => src}/services/telemetry/collector.rs (100%) rename {apps/desktop/src => src}/services/telemetry/contract.rs (99%) rename {apps/desktop/src => src}/services/telemetry/crash.rs (100%) rename {apps/desktop/src => src}/services/telemetry/pii.rs (100%) rename {apps/desktop/src => src}/services/updater.rs (100%) rename {apps/desktop/src => src}/store.rs (100%) rename {apps/desktop/src => src}/store/asset_filter.rs (100%) rename {apps/desktop/src => src}/store/bootstrap.rs (100%) rename {apps/desktop/src => src}/store/data_restore.rs (100%) rename {apps/desktop/src => src}/store/fs_kind.rs (100%) rename {apps/desktop/src => src}/store/images.rs (100%) rename {apps/desktop/src => src}/store/killmail_slot.rs (100%) rename {apps/desktop/src => src}/store/lease.rs (100%) rename {apps/desktop/src => src}/store/model.rs (100%) rename {apps/desktop/src => src}/store/model/abyssal_item.rs (100%) rename {apps/desktop/src => src}/store/model/abyssal_module_stat.rs (100%) rename {apps/desktop/src => src}/store/model/abyssal_source_type_filter.rs (100%) rename {apps/desktop/src => src}/store/model/abyssal_stat_template.rs (100%) rename {apps/desktop/src => src}/store/model/agent_type.rs (100%) rename {apps/desktop/src => src}/store/model/all_blueprints.rs (100%) rename {apps/desktop/src => src}/store/model/all_industry_jobs.rs (100%) rename {apps/desktop/src => src}/store/model/alliance.rs (100%) rename {apps/desktop/src => src}/store/model/asset_query.rs (100%) rename {apps/desktop/src => src}/store/model/bloodline.rs (100%) rename {apps/desktop/src => src}/store/model/blueprint_activity_material.rs (100%) rename {apps/desktop/src => src}/store/model/blueprint_activity_meta.rs (100%) rename {apps/desktop/src => src}/store/model/blueprint_activity_product.rs (100%) rename {apps/desktop/src => src}/store/model/budget_assignment.rs (100%) rename {apps/desktop/src => src}/store/model/budget_category.rs (100%) rename {apps/desktop/src => src}/store/model/budget_category_group.rs (100%) rename {apps/desktop/src => src}/store/model/budget_entry_assignment.rs (100%) rename {apps/desktop/src => src}/store/model/budget_owner.rs (100%) rename {apps/desktop/src => src}/store/model/budget_rule.rs (100%) rename {apps/desktop/src => src}/store/model/budget_target.rs (100%) rename {apps/desktop/src => src}/store/model/calendar_event_note.rs (100%) rename {apps/desktop/src => src}/store/model/captains_log.rs (100%) rename {apps/desktop/src => src}/store/model/catalog_type.rs (100%) rename {apps/desktop/src => src}/store/model/certificate.rs (100%) rename {apps/desktop/src => src}/store/model/certificate_skill.rs (100%) rename {apps/desktop/src => src}/store/model/character.rs (100%) rename {apps/desktop/src => src}/store/model/character_asset.rs (100%) rename {apps/desktop/src => src}/store/model/character_attributes.rs (100%) rename {apps/desktop/src => src}/store/model/character_blueprint.rs (100%) rename {apps/desktop/src => src}/store/model/character_calendar.rs (100%) rename {apps/desktop/src => src}/store/model/character_calendar_attendee.rs (100%) rename {apps/desktop/src => src}/store/model/character_calendar_view.rs (100%) rename {apps/desktop/src => src}/store/model/character_card.rs (100%) rename {apps/desktop/src => src}/store/model/character_clone.rs (100%) rename {apps/desktop/src => src}/store/model/character_clone_implant.rs (100%) rename {apps/desktop/src => src}/store/model/character_clone_view.rs (100%) rename {apps/desktop/src => src}/store/model/character_contact.rs (100%) rename {apps/desktop/src => src}/store/model/character_contact_label.rs (100%) rename {apps/desktop/src => src}/store/model/character_contacts_view.rs (100%) rename {apps/desktop/src => src}/store/model/character_contract.rs (100%) rename {apps/desktop/src => src}/store/model/character_contract_bid.rs (100%) rename {apps/desktop/src => src}/store/model/character_contract_item.rs (100%) rename {apps/desktop/src => src}/store/model/character_financials.rs (100%) rename {apps/desktop/src => src}/store/model/character_implant.rs (100%) rename {apps/desktop/src => src}/store/model/character_industry_job.rs (100%) rename {apps/desktop/src => src}/store/model/character_jump_clone.rs (100%) rename {apps/desktop/src => src}/store/model/character_killmail.rs (100%) rename {apps/desktop/src => src}/store/model/character_mail.rs (100%) rename {apps/desktop/src => src}/store/model/character_mail_body.rs (100%) rename {apps/desktop/src => src}/store/model/character_mail_label.rs (100%) rename {apps/desktop/src => src}/store/model/character_mail_label_membership.rs (100%) rename {apps/desktop/src => src}/store/model/character_mail_recipient.rs (100%) rename {apps/desktop/src => src}/store/model/character_mail_view.rs (100%) rename {apps/desktop/src => src}/store/model/character_net_worth_series.rs (100%) rename {apps/desktop/src => src}/store/model/character_net_worth_snapshot.rs (100%) rename {apps/desktop/src => src}/store/model/character_notification.rs (100%) rename {apps/desktop/src => src}/store/model/character_planet.rs (100%) rename {apps/desktop/src => src}/store/model/character_planet_link.rs (100%) rename {apps/desktop/src => src}/store/model/character_planet_pin.rs (100%) rename {apps/desktop/src => src}/store/model/character_planet_pin_content.rs (100%) rename {apps/desktop/src => src}/store/model/character_planet_route.rs (100%) rename {apps/desktop/src => src}/store/model/character_skill.rs (100%) rename {apps/desktop/src => src}/store/model/character_skillqueue.rs (100%) rename {apps/desktop/src => src}/store/model/character_squad.rs (100%) rename {apps/desktop/src => src}/store/model/character_standing.rs (100%) rename {apps/desktop/src => src}/store/model/character_state.rs (100%) rename {apps/desktop/src => src}/store/model/character_telemetry.rs (100%) rename {apps/desktop/src => src}/store/model/character_wallet_journal.rs (100%) rename {apps/desktop/src => src}/store/model/character_wallet_period_summary.rs (100%) rename {apps/desktop/src => src}/store/model/character_wallet_transaction.rs (100%) rename {apps/desktop/src => src}/store/model/constellation.rs (100%) rename {apps/desktop/src => src}/store/model/corporation.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_abyssal_item.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_asset.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_blueprint.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_card.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_contact.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_contact_label.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_contract.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_contract_bid.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_contract_item.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_hangar_division.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_industry_job.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_killmail.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_killmail_attacker.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_killmail_item.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_market_order.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_member_role.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_mining_extraction.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_net_worth_snapshot.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_standing.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_wallet_division.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_wallet_journal.rs (100%) rename {apps/desktop/src => src}/store/model/corporation_wallet_transaction.rs (100%) rename {apps/desktop/src => src}/store/model/credential.rs (100%) rename {apps/desktop/src => src}/store/model/customs_office.rs (100%) rename {apps/desktop/src => src}/store/model/dogma_attribute.rs (100%) rename {apps/desktop/src => src}/store/model/dossier.rs (100%) rename {apps/desktop/src => src}/store/model/entity_tag.rs (100%) rename {apps/desktop/src => src}/store/model/facility.rs (100%) rename {apps/desktop/src => src}/store/model/facility_intel.rs (100%) rename {apps/desktop/src => src}/store/model/faction.rs (100%) rename {apps/desktop/src => src}/store/model/field_notes.rs (100%) rename {apps/desktop/src => src}/store/model/http_cache_entry.rs (100%) rename {apps/desktop/src => src}/store/model/implant_time_bonus.rs (100%) rename {apps/desktop/src => src}/store/model/inaccessible_structure.rs (100%) rename {apps/desktop/src => src}/store/model/industry_cost_index.rs (100%) rename {apps/desktop/src => src}/store/model/industry_plan.rs (100%) rename {apps/desktop/src => src}/store/model/item_category.rs (100%) rename {apps/desktop/src => src}/store/model/item_group.rs (100%) rename {apps/desktop/src => src}/store/model/item_type.rs (100%) rename {apps/desktop/src => src}/store/model/killmail_attacker.rs (100%) rename {apps/desktop/src => src}/store/model/killmail_item.rs (100%) rename {apps/desktop/src => src}/store/model/killmail_report.rs (100%) rename {apps/desktop/src => src}/store/model/mail_draft.rs (100%) rename {apps/desktop/src => src}/store/model/mail_folder_assignment.rs (100%) rename {apps/desktop/src => src}/store/model/mail_overlay_state.rs (100%) rename {apps/desktop/src => src}/store/model/mail_query.rs (100%) rename {apps/desktop/src => src}/store/model/mail_snapshot.rs (100%) rename {apps/desktop/src => src}/store/model/mail_snooze.rs (100%) rename {apps/desktop/src => src}/store/model/mail_triage.rs (100%) rename {apps/desktop/src => src}/store/model/market_alert_state.rs (100%) rename {apps/desktop/src => src}/store/model/market_cart.rs (100%) rename {apps/desktop/src => src}/store/model/market_comparison_pin.rs (100%) rename {apps/desktop/src => src}/store/model/market_group.rs (100%) rename {apps/desktop/src => src}/store/model/market_order.rs (100%) rename {apps/desktop/src => src}/store/model/market_price.rs (100%) rename {apps/desktop/src => src}/store/model/market_watchlist.rs (100%) rename {apps/desktop/src => src}/store/model/moon.rs (100%) rename {apps/desktop/src => src}/store/model/notification.rs (100%) rename {apps/desktop/src => src}/store/model/npc_agent.rs (100%) rename {apps/desktop/src => src}/store/model/npc_agent_skill.rs (100%) rename {apps/desktop/src => src}/store/model/npc_corporation_division.rs (100%) rename {apps/desktop/src => src}/store/model/objective.rs (100%) rename {apps/desktop/src => src}/store/model/observed_market_order.rs (100%) rename {apps/desktop/src => src}/store/model/outbox.rs (100%) rename {apps/desktop/src => src}/store/model/owned_corporation.rs (100%) rename {apps/desktop/src => src}/store/model/race.rs (100%) rename {apps/desktop/src => src}/store/model/region.rs (100%) rename {apps/desktop/src => src}/store/model/saved_asset_filter.rs (100%) rename {apps/desktop/src => src}/store/model/sde_picker_item.rs (100%) rename {apps/desktop/src => src}/store/model/ship_mastery.rs (100%) rename {apps/desktop/src => src}/store/model/skill_completion.rs (100%) rename {apps/desktop/src => src}/store/model/skill_metadata.rs (100%) rename {apps/desktop/src => src}/store/model/skill_plan.rs (100%) rename {apps/desktop/src => src}/store/model/skill_plan_cert_proficiency.rs (100%) rename {apps/desktop/src => src}/store/model/skill_plan_entry.rs (100%) rename {apps/desktop/src => src}/store/model/skill_plan_milestone.rs (100%) rename {apps/desktop/src => src}/store/model/skill_plan_ship_mastery.rs (100%) rename {apps/desktop/src => src}/store/model/solar_system.rs (100%) rename {apps/desktop/src => src}/store/model/squad.rs (100%) rename {apps/desktop/src => src}/store/model/standings_catalog.rs (100%) rename {apps/desktop/src => src}/store/model/station.rs (100%) rename {apps/desktop/src => src}/store/model/stockpile.rs (100%) rename {apps/desktop/src => src}/store/model/stockpile_fill.rs (100%) rename {apps/desktop/src => src}/store/model/stockpile_item.rs (100%) rename {apps/desktop/src => src}/store/model/structure.rs (100%) rename {apps/desktop/src => src}/store/model/structure_rig_bonus.rs (100%) rename {apps/desktop/src => src}/store/model/structure_state.rs (100%) rename {apps/desktop/src => src}/store/model/sync_ledger.rs (100%) rename {apps/desktop/src => src}/store/model/sync_list.rs (100%) rename {apps/desktop/src => src}/store/model/sync_list_contact.rs (100%) rename {apps/desktop/src => src}/store/model/sync_list_target.rs (100%) rename {apps/desktop/src => src}/store/model/sync_pushed_contact.rs (100%) rename {apps/desktop/src => src}/store/model/tag.rs (100%) rename {apps/desktop/src => src}/store/model/type_material.rs (100%) rename {apps/desktop/src => src}/store/model/type_price_history.rs (100%) rename {apps/desktop/src => src}/store/reconcile.rs (100%) rename {apps/desktop/src => src}/store/repo.rs (100%) rename {apps/desktop/src => src}/store/repo/assets.rs (100%) rename {apps/desktop/src => src}/store/repo/blueprints.rs (100%) rename {apps/desktop/src => src}/store/repo/budget.rs (100%) rename {apps/desktop/src => src}/store/repo/calendar.rs (100%) rename {apps/desktop/src => src}/store/repo/calendar_event_note.rs (100%) rename {apps/desktop/src => src}/store/repo/captains_log.rs (100%) rename {apps/desktop/src => src}/store/repo/captains_log_rollup.rs (100%) rename {apps/desktop/src => src}/store/repo/character.rs (100%) rename {apps/desktop/src => src}/store/repo/character_sp_snapshot.rs (100%) rename {apps/desktop/src => src}/store/repo/colonies.rs (100%) rename {apps/desktop/src => src}/store/repo/contact_sync.rs (100%) rename {apps/desktop/src => src}/store/repo/customs_office.rs (100%) rename {apps/desktop/src => src}/store/repo/dossier.rs (100%) rename {apps/desktop/src => src}/store/repo/field_notes.rs (100%) rename {apps/desktop/src => src}/store/repo/finance.rs (100%) rename {apps/desktop/src => src}/store/repo/fitting.rs (100%) rename {apps/desktop/src => src}/store/repo/industry.rs (100%) rename {apps/desktop/src => src}/store/repo/industry_completion.rs (100%) rename {apps/desktop/src => src}/store/repo/infra.rs (100%) rename {apps/desktop/src => src}/store/repo/killmail_report.rs (100%) rename {apps/desktop/src => src}/store/repo/mail.rs (100%) rename {apps/desktop/src => src}/store/repo/market.rs (100%) rename {apps/desktop/src => src}/store/repo/market_alert_state.rs (100%) rename {apps/desktop/src => src}/store/repo/market_cart.rs (100%) rename {apps/desktop/src => src}/store/repo/market_comparison_pin.rs (100%) rename {apps/desktop/src => src}/store/repo/market_watchlist.rs (100%) rename {apps/desktop/src => src}/store/repo/notifications.rs (100%) rename {apps/desktop/src => src}/store/repo/objective.rs (100%) rename {apps/desktop/src => src}/store/repo/org.rs (100%) rename {apps/desktop/src => src}/store/repo/sde.rs (100%) rename {apps/desktop/src => src}/store/repo/skill_completion.rs (100%) rename {apps/desktop/src => src}/store/repo/skills.rs (100%) rename {apps/desktop/src => src}/store/repo/standings.rs (100%) rename {apps/desktop/src => src}/store/repo/structure_state.rs (100%) rename {apps/desktop/src => src}/store/repo/sync_ledger.rs (100%) rename {apps/desktop/src => src}/store/search.rs (100%) rename {apps/desktop/src => src}/store/share_meta.rs (100%) rename {apps/desktop/src => src}/store/storage_migration.rs (100%) rename {apps/desktop/src => src}/store/sync_copy.rs (100%) rename {apps/desktop/src => src}/store/sync_session.rs (100%) rename {apps/desktop/src => src}/sync.rs (100%) rename {apps/desktop/src => src}/sync/calendar_handlers.rs (100%) rename {apps/desktop/src => src}/sync/command.rs (100%) rename {apps/desktop/src => src}/sync/contact_handlers.rs (100%) rename {apps/desktop/src => src}/sync/drain.rs (100%) rename {apps/desktop/src => src}/sync/engine.rs (100%) rename {apps/desktop/src => src}/sync/event.rs (100%) rename {apps/desktop/src => src}/sync/freshness.rs (100%) rename {apps/desktop/src => src}/sync/handle.rs (100%) rename {apps/desktop/src => src}/sync/job.rs (100%) rename {apps/desktop/src => src}/sync/jobs.rs (100%) rename {apps/desktop/src => src}/sync/jobs/abyssals.rs (100%) rename {apps/desktop/src => src}/sync/jobs/asset_sync.rs (100%) rename {apps/desktop/src => src}/sync/jobs/blueprints.rs (100%) rename {apps/desktop/src => src}/sync/jobs/character_calendar.rs (100%) rename {apps/desktop/src => src}/sync/jobs/character_clones.rs (100%) rename {apps/desktop/src => src}/sync/jobs/character_contacts.rs (100%) rename {apps/desktop/src => src}/sync/jobs/character_contracts.rs (100%) rename {apps/desktop/src => src}/sync/jobs/character_killmails.rs (100%) rename {apps/desktop/src => src}/sync/jobs/character_mail.rs (100%) rename {apps/desktop/src => src}/sync/jobs/character_market_orders.rs (100%) rename {apps/desktop/src => src}/sync/jobs/character_notifications.rs (100%) rename {apps/desktop/src => src}/sync/jobs/character_planets.rs (100%) rename {apps/desktop/src => src}/sync/jobs/character_profile.rs (100%) rename {apps/desktop/src => src}/sync/jobs/character_roles.rs (100%) rename {apps/desktop/src => src}/sync/jobs/character_skills.rs (100%) rename {apps/desktop/src => src}/sync/jobs/character_standings.rs (100%) rename {apps/desktop/src => src}/sync/jobs/character_telemetry.rs (100%) rename {apps/desktop/src => src}/sync/jobs/character_wallet.rs (100%) rename {apps/desktop/src => src}/sync/jobs/contact_sync.rs (100%) rename {apps/desktop/src => src}/sync/jobs/corporation_contacts.rs (100%) rename {apps/desktop/src => src}/sync/jobs/corporation_contracts.rs (100%) rename {apps/desktop/src => src}/sync/jobs/corporation_customs_offices.rs (100%) rename {apps/desktop/src => src}/sync/jobs/corporation_killmails.rs (100%) rename {apps/desktop/src => src}/sync/jobs/corporation_market_orders.rs (100%) rename {apps/desktop/src => src}/sync/jobs/corporation_profile.rs (100%) rename {apps/desktop/src => src}/sync/jobs/corporation_standings.rs (100%) rename {apps/desktop/src => src}/sync/jobs/corporation_structures.rs (100%) rename {apps/desktop/src => src}/sync/jobs/corporation_wallet.rs (100%) rename {apps/desktop/src => src}/sync/jobs/industry.rs (100%) rename {apps/desktop/src => src}/sync/jobs/industry_cost_indices.rs (100%) rename {apps/desktop/src => src}/sync/jobs/killmail_detail_backfill.rs (100%) rename {apps/desktop/src => src}/sync/jobs/killmail_reconcile.rs (100%) rename {apps/desktop/src => src}/sync/jobs/killmail_value.rs (100%) rename {apps/desktop/src => src}/sync/jobs/market_prices.rs (100%) rename {apps/desktop/src => src}/sync/jobs/mining_extractions.rs (100%) rename {apps/desktop/src => src}/sync/jobs/names.rs (100%) rename {apps/desktop/src => src}/sync/jobs/net_worth_snapshot.rs (100%) rename {apps/desktop/src => src}/sync/jobs/resolve.rs (100%) rename {apps/desktop/src => src}/sync/jobs/token_audit.rs (100%) rename {apps/desktop/src => src}/sync/jobs/wallet_journal_reconcile.rs (100%) rename {apps/desktop/src => src}/sync/language_refresh.rs (100%) rename {apps/desktop/src => src}/sync/mail_handlers.rs (100%) rename {apps/desktop/src => src}/sync/outbox.rs (100%) rename {apps/desktop/src => src}/sync/outcome.rs (100%) rename {apps/desktop/src => src}/sync/schedule.rs (100%) rename {apps/desktop/src => src}/sync/status.rs (100%) rename {apps/desktop/src => src}/sync/structure_resolution.rs (100%) rename {apps/desktop/src => src}/sync/subject.rs (100%) rename {apps/desktop/src => src}/sync/token.rs (100%) rename {apps/desktop/src => src}/ui.rs (100%) rename {apps/desktop/src => src}/ui/components.rs (100%) rename {apps/desktop/src => src}/ui/components/add_tag_modal.rs (100%) rename {apps/desktop/src => src}/ui/components/anchored_dropdown.rs (100%) rename {apps/desktop/src => src}/ui/components/avatar.rs (100%) rename {apps/desktop/src => src}/ui/components/backdrop.rs (100%) rename {apps/desktop/src => src}/ui/components/badge.rs (100%) rename {apps/desktop/src => src}/ui/components/button.rs (100%) rename {apps/desktop/src => src}/ui/components/card.rs (100%) rename {apps/desktop/src => src}/ui/components/chip.rs (100%) rename {apps/desktop/src => src}/ui/components/clip.rs (100%) rename {apps/desktop/src => src}/ui/components/color_picker.rs (100%) rename {apps/desktop/src => src}/ui/components/confirm_modal.rs (100%) rename {apps/desktop/src => src}/ui/components/context_menu.rs (100%) rename {apps/desktop/src => src}/ui/components/count_badge.rs (100%) rename {apps/desktop/src => src}/ui/components/date_picker.rs (100%) rename {apps/desktop/src => src}/ui/components/empty_state.rs (100%) rename {apps/desktop/src => src}/ui/components/entity_search.rs (100%) rename {apps/desktop/src => src}/ui/components/esi_status.rs (100%) rename {apps/desktop/src => src}/ui/components/eve_time.rs (100%) rename {apps/desktop/src => src}/ui/components/eyebrow.rs (100%) rename {apps/desktop/src => src}/ui/components/facility_combobox.rs (100%) rename {apps/desktop/src => src}/ui/components/forbidden.rs (100%) rename {apps/desktop/src => src}/ui/components/glyph_badge.rs (100%) rename {apps/desktop/src => src}/ui/components/header.rs (100%) rename {apps/desktop/src => src}/ui/components/icon.rs (100%) rename {apps/desktop/src => src}/ui/components/icon_tile.rs (100%) rename {apps/desktop/src => src}/ui/components/line_chart.rs (100%) rename {apps/desktop/src => src}/ui/components/location_combobox.rs (100%) rename {apps/desktop/src => src}/ui/components/meter.rs (100%) rename {apps/desktop/src => src}/ui/components/modal_overlay.rs (100%) rename {apps/desktop/src => src}/ui/components/notification_row.rs (100%) rename {apps/desktop/src => src}/ui/components/notification_toaster.rs (100%) rename {apps/desktop/src => src}/ui/components/overlay_layer.rs (100%) rename {apps/desktop/src => src}/ui/components/panel_header.rs (100%) rename {apps/desktop/src => src}/ui/components/picker.rs (100%) rename {apps/desktop/src => src}/ui/components/positioned_dropdown.rs (100%) rename {apps/desktop/src => src}/ui/components/progress_bar.rs (100%) rename {apps/desktop/src => src}/ui/components/rail.rs (100%) rename {apps/desktop/src => src}/ui/components/resizable_pane.rs (100%) rename {apps/desktop/src => src}/ui/components/rig_combobox.rs (100%) rename {apps/desktop/src => src}/ui/components/rule.rs (100%) rename {apps/desktop/src => src}/ui/components/section_header.rs (100%) rename {apps/desktop/src => src}/ui/components/segmented.rs (100%) rename {apps/desktop/src => src}/ui/components/skill_detail.rs (100%) rename {apps/desktop/src => src}/ui/components/status.rs (100%) rename {apps/desktop/src => src}/ui/components/status_bar.rs (100%) rename {apps/desktop/src => src}/ui/components/step_badge.rs (100%) rename {apps/desktop/src => src}/ui/components/sync_chip.rs (100%) rename {apps/desktop/src => src}/ui/components/sync_popover.rs (100%) rename {apps/desktop/src => src}/ui/components/tab_select.rs (100%) rename {apps/desktop/src => src}/ui/components/table_cell.rs (100%) rename {apps/desktop/src => src}/ui/components/text_input.rs (100%) rename {apps/desktop/src => src}/ui/components/toggle.rs (100%) rename {apps/desktop/src => src}/ui/components/updater_banner.rs (100%) rename {apps/desktop/src => src}/ui/components/virtual_list.rs (100%) rename {apps/desktop/src => src}/ui/format.rs (100%) rename {apps/desktop/src => src}/ui/load_epoch.rs (100%) rename {apps/desktop/src => src}/ui/style.rs (100%) rename {apps/desktop/src => src}/ui/style/color.rs (100%) rename {apps/desktop/src => src}/ui/style/control.rs (100%) rename {apps/desktop/src => src}/ui/style/radius.rs (100%) rename {apps/desktop/src => src}/ui/style/shadow.rs (100%) rename {apps/desktop/src => src}/ui/style/spacing.rs (100%) rename {apps/desktop/src => src}/ui/style/typography.rs (100%) rename {apps/desktop/tests => tests}/fixtures/esi/character_attributes.json (100%) rename {apps/desktop/tests => tests}/fixtures/esi/dogma_dynamic_item.json (100%) rename {apps/desktop/tests => tests}/fixtures/esi/universe_types_3300.json (100%) rename {apps/desktop/tests => tests}/fixtures/esi/universe_types_9899.json (100%) rename {apps/desktop/tests => tests}/fixtures/telemetry/crash_batch.json (100%) rename {apps/desktop/tests => tests}/fixtures/telemetry/session_all_streams.json (100%) rename {apps/desktop/tests => tests}/i18n_no_hardcoded.rs (100%) rename {apps/desktop/tests => tests}/i18n_parity.rs (100%) rename {apps => web}/marketing/.gitignore (100%) rename {apps => web}/marketing/.npmrc (100%) rename {apps => web}/marketing/aube-lock.yaml (100%) rename {apps => web}/marketing/content/assets.md (100%) rename {apps => web}/marketing/content/calendar.md (100%) rename {apps => web}/marketing/content/captains-log.md (100%) rename {apps => web}/marketing/content/getting-started.md (100%) rename {apps => web}/marketing/content/index.md (100%) rename {apps => web}/marketing/content/industry.md (100%) rename {apps => web}/marketing/content/interface.md (100%) rename {apps => web}/marketing/content/mail.md (100%) rename {apps => web}/marketing/content/mcp.md (100%) rename {apps => web}/marketing/content/notifications.md (100%) rename {apps => web}/marketing/content/onboarding.md (100%) rename {apps => web}/marketing/content/roster.md (100%) rename {apps => web}/marketing/content/settings.md (100%) rename {apps => web}/marketing/content/skills.md (100%) rename {apps => web}/marketing/content/troubleshooting.md (100%) rename {apps => web}/marketing/content/wallet.md (100%) rename {apps => web}/marketing/index.html (100%) rename {apps => web}/marketing/package.json (100%) rename {apps => web}/marketing/public/CNAME (100%) rename {apps => web}/marketing/public/auth/callback/index.html (100%) rename {apps => web}/marketing/public/docs/img/assets/abyssals.png (100%) rename {apps => web}/marketing/public/docs/img/assets/inventory.png (100%) rename {apps => web}/marketing/public/docs/img/assets/stockpile-editor.png (100%) rename {apps => web}/marketing/public/docs/img/assets/stockpile-import.png (100%) rename {apps => web}/marketing/public/docs/img/assets/stockpiles.png (100%) rename {apps => web}/marketing/public/docs/img/assets/tracker.png (100%) rename {apps => web}/marketing/public/docs/img/assets/values.png (100%) rename {apps => web}/marketing/public/docs/img/calendar/agenda.png (100%) rename {apps => web}/marketing/public/docs/img/calendar/day.png (100%) rename {apps => web}/marketing/public/docs/img/calendar/month.png (100%) rename {apps => web}/marketing/public/docs/img/calendar/week.png (100%) rename {apps => web}/marketing/public/docs/img/calendar/year.png (100%) rename {apps => web}/marketing/public/docs/img/captains-log/captains-log.png (100%) rename {apps => web}/marketing/public/docs/img/getting-started/auth-panel.png (100%) rename {apps => web}/marketing/public/docs/img/getting-started/auth-waiting.png (100%) rename {apps => web}/marketing/public/docs/img/getting-started/first-time-run/asset-feature-select.png (100%) rename {apps => web}/marketing/public/docs/img/getting-started/first-time-run/character-feature-select.png (100%) rename {apps => web}/marketing/public/docs/img/getting-started/first-time-run/finish.png (100%) rename {apps => web}/marketing/public/docs/img/getting-started/first-time-run/industry-feature-select.png (100%) rename {apps => web}/marketing/public/docs/img/getting-started/first-time-run/language-select.png (100%) rename {apps => web}/marketing/public/docs/img/getting-started/first-time-run/storage-settings.png (100%) rename {apps => web}/marketing/public/docs/img/getting-started/first-time-run/wallet-feature-select.png (100%) rename {apps => web}/marketing/public/docs/img/getting-started/first-time-run/welcome.png (100%) rename {apps => web}/marketing/public/docs/img/getting-started/onboarding-empty.png (100%) rename {apps => web}/marketing/public/docs/img/getting-started/roster-first-character.png (100%) rename {apps => web}/marketing/public/docs/img/getting-started/splash.png (100%) rename {apps => web}/marketing/public/docs/img/industry/blueprints.png (100%) rename {apps => web}/marketing/public/docs/img/industry/extractions.png (100%) rename {apps => web}/marketing/public/docs/img/industry/jobs.png (100%) rename {apps => web}/marketing/public/docs/img/industry/planner-bill-of-materials.png (100%) rename {apps => web}/marketing/public/docs/img/industry/planner-build-order.png (100%) rename {apps => web}/marketing/public/docs/img/industry/planner-material-plan.png (100%) rename {apps => web}/marketing/public/docs/img/industry/planner-needed-blueprints.png (100%) rename {apps => web}/marketing/public/docs/img/industry/planner-overview.png (100%) rename {apps => web}/marketing/public/docs/img/industry/planner-split-jobs.png (100%) rename {apps => web}/marketing/public/docs/img/interface/command-palette.png (100%) rename {apps => web}/marketing/public/docs/img/interface/sync-popover.png (100%) rename {apps => web}/marketing/public/docs/img/mail/compose.png (100%) rename {apps => web}/marketing/public/docs/img/mail/three-pane.png (100%) rename {apps => web}/marketing/public/docs/img/mcp/settings-mcp.png (100%) rename {apps => web}/marketing/public/docs/img/notifications/notification-center.png (100%) rename {apps => web}/marketing/public/docs/img/notifications/notifications.png (100%) rename {apps => web}/marketing/public/docs/img/roster/add-corporation.png (100%) rename {apps => web}/marketing/public/docs/img/roster/add-tag.png (100%) rename {apps => web}/marketing/public/docs/img/roster/card-anatomy.png (100%) rename {apps => web}/marketing/public/docs/img/roster/card-context-menu.png (100%) rename {apps => web}/marketing/public/docs/img/roster/contact-edit-modal.png (100%) rename {apps => web}/marketing/public/docs/img/roster/contact-sync-empty.png (100%) rename {apps => web}/marketing/public/docs/img/roster/contact-sync-list.png (100%) rename {apps => web}/marketing/public/docs/img/roster/contact-sync.png (100%) rename {apps => web}/marketing/public/docs/img/roster/detail-clones.png (100%) rename {apps => web}/marketing/public/docs/img/roster/detail-contacts.png (100%) rename {apps => web}/marketing/public/docs/img/roster/detail-killlog.png (100%) rename {apps => web}/marketing/public/docs/img/roster/detail-standings.png (100%) rename {apps => web}/marketing/public/docs/img/roster/grid-compact.png (100%) rename {apps => web}/marketing/public/docs/img/roster/grid-expanded.png (100%) rename {apps => web}/marketing/public/docs/img/roster/grid-list.png (100%) rename {apps => web}/marketing/public/docs/img/roster/killmail-modal.png (100%) rename {apps => web}/marketing/public/docs/img/roster/squads.png (100%) rename {apps => web}/marketing/public/docs/img/roster/utilities-dropdown.png (100%) rename {apps => web}/marketing/public/docs/img/settings/accessibility.png (100%) rename {apps => web}/marketing/public/docs/img/settings/facilities.png (100%) rename {apps => web}/marketing/public/docs/img/settings/features.png (100%) rename {apps => web}/marketing/public/docs/img/settings/storage.png (100%) rename {apps => web}/marketing/public/docs/img/settings/tags.png (100%) rename {apps => web}/marketing/public/docs/img/settings/telemetry.png (100%) rename {apps => web}/marketing/public/docs/img/settings/ui.png (100%) rename {apps => web}/marketing/public/docs/img/skills/attributes.png (100%) rename {apps => web}/marketing/public/docs/img/skills/compare.png (100%) rename {apps => web}/marketing/public/docs/img/skills/overview.png (100%) rename {apps => web}/marketing/public/docs/img/skills/plan-editor.png (100%) rename {apps => web}/marketing/public/docs/img/skills/plan-manager.png (100%) rename {apps => web}/marketing/public/docs/img/skills/queue-empty.png (100%) rename {apps => web}/marketing/public/docs/img/wallet/budget-create-rule.png (100%) rename {apps => web}/marketing/public/docs/img/wallet/budget-reconcile.png (100%) rename {apps => web}/marketing/public/docs/img/wallet/budget-rule-manager.png (100%) rename {apps => web}/marketing/public/docs/img/wallet/budget.png (100%) rename {apps => web}/marketing/public/docs/img/wallet/contract-detail.png (100%) rename {apps => web}/marketing/public/docs/img/wallet/contracts.png (100%) rename {apps => web}/marketing/public/docs/img/wallet/journal.png (100%) rename {apps => web}/marketing/public/docs/img/wallet/transactions.png (100%) rename {apps => web}/marketing/public/docs/img/wallet/wallets.png (100%) rename {apps => web}/marketing/public/favicon.svg (100%) rename {apps => web}/marketing/public/robots.txt (100%) rename {apps => web}/marketing/scripts/fetch-release.ts (100%) rename {apps => web}/marketing/scripts/parse-changelog.ts (100%) rename {apps => web}/marketing/src/App.tsx (100%) rename {apps => web}/marketing/src/components/Faq.tsx (100%) rename {apps => web}/marketing/src/components/Features.tsx (100%) rename {apps => web}/marketing/src/components/Footer.tsx (100%) rename {apps => web}/marketing/src/components/Freeport.tsx (100%) rename {apps => web}/marketing/src/components/Hero.tsx (100%) rename {apps => web}/marketing/src/components/HeroPreview.tsx (100%) rename {apps => web}/marketing/src/components/Icon.tsx (100%) rename {apps => web}/marketing/src/components/Notes.tsx (100%) rename {apps => web}/marketing/src/components/PlatformCard.tsx (100%) rename {apps => web}/marketing/src/components/PlatformGlyph.tsx (100%) rename {apps => web}/marketing/src/components/Platforms.tsx (100%) rename {apps => web}/marketing/src/components/PodMark.tsx (100%) rename {apps => web}/marketing/src/components/PrimaryDownload.tsx (100%) rename {apps => web}/marketing/src/components/Requirements.tsx (100%) rename {apps => web}/marketing/src/components/SectionHead.tsx (100%) rename {apps => web}/marketing/src/components/SparkChart.tsx (100%) rename {apps => web}/marketing/src/components/Support.tsx (100%) rename {apps => web}/marketing/src/components/TopNav.tsx (100%) rename {apps => web}/marketing/src/data.ts (100%) rename {apps => web}/marketing/src/docs/DocLayout.tsx (100%) rename {apps => web}/marketing/src/docs/content.test.ts (100%) rename {apps => web}/marketing/src/docs/content.ts (100%) rename {apps => web}/marketing/src/docs/frontmatter.ts (100%) rename {apps => web}/marketing/src/docs/plugin.ts (100%) rename {apps => web}/marketing/src/docs/render.test.ts (100%) rename {apps => web}/marketing/src/docs/render.tsx (100%) rename {apps => web}/marketing/src/generated/.gitkeep (100%) rename {apps => web}/marketing/src/generated/notes.example.ts (100%) rename {apps => web}/marketing/src/generated/release.example.ts (100%) rename {apps => web}/marketing/src/generated/release.ts.example (100%) rename {apps => web}/marketing/src/main.tsx (100%) rename {apps => web}/marketing/src/tokens.ts (100%) rename {apps => web}/marketing/src/types.ts (100%) rename {apps => web}/marketing/src/utils/detectOs.ts (100%) rename {apps => web}/marketing/src/utils/renderInline.tsx (100%) rename {apps => web}/marketing/tsconfig.json (100%) rename {apps => web}/marketing/vite.config.ts (100%) rename {apps => web}/telemetry/.gitignore (100%) rename {apps => web}/telemetry/.npmrc (100%) rename {apps => web}/telemetry/README.md (96%) rename {apps => web}/telemetry/aube-lock.yaml (100%) rename {apps => web}/telemetry/migrations/0001_init.sql (100%) rename {apps => web}/telemetry/migrations/0002_rename_display_add_screen_size.sql (100%) rename {apps => web}/telemetry/migrations/0003_add_app_language.sql (100%) rename {apps => web}/telemetry/package.json (100%) rename {apps => web}/telemetry/src/contract.test.ts (97%) rename {apps => web}/telemetry/src/contract.ts (99%) rename {apps => web}/telemetry/src/db.test.ts (97%) rename {apps => web}/telemetry/src/db.ts (100%) rename {apps => web}/telemetry/src/index.ts (100%) rename {apps => web}/telemetry/src/render.test.ts (100%) rename {apps => web}/telemetry/src/render.ts (100%) rename {apps => web}/telemetry/src/stats.test.ts (100%) rename {apps => web}/telemetry/src/stats.ts (100%) rename {apps => web}/telemetry/tsconfig.json (100%) rename {apps => web}/telemetry/wrangler.toml (100%) diff --git a/.config/taplo.toml b/.config/taplo.toml index d156e7f8..78de9577 100755 --- a/.config/taplo.toml +++ b/.config/taplo.toml @@ -6,7 +6,7 @@ exclude = [ ".mise-data/**", "coverage/**", "target/**", - "**/Cargo.toml", + "Cargo.toml", ] include = ["**/*.toml"] diff --git a/.github/r2/README.md b/.github/r2/README.md index 345a5fdc..e312eb3c 100644 --- a/.github/r2/README.md +++ b/.github/r2/README.md @@ -3,7 +3,7 @@ The CI cache lives in the Cloudflare R2 bucket `pod-ci-cache` under two prefixes, `icons/` and `rust-cache/`. Its size is kept bounded by two independent mechanisms, because this Cloudflare account rejects Worker Cron Triggers (see -`apps/telemetry/wrangler.toml`), so a Worker cron is never an option here. +`web/telemetry/wrangler.toml`), so a Worker cron is never an option here. ## 1. R2 object lifecycle rule (the backstop) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 891f5591..e4438aff 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,10 +16,6 @@ env: R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }} R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }} R2_ACCOUNT_ID: ${{ secrets.R2_ACCOUNT_ID }} -# There is no standalone check job (ADR-0050): lint's clippy runs --all-targets -# --all-features on Linux (a compile superset of cargo check), and the test + build -# jobs compile every target with codegen on Windows and macOS, so a compile error on -# any platform still fails the run. jobs: lint: runs-on: ubuntu-latest @@ -34,6 +30,31 @@ jobs: if: ${{ always() && env.POD_RUST_CACHE_SAVE == '1' }} shell: bash run: mise run ci:rust-cache save + check: + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + - windows-latest + - macos-latest + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v7 + - if: runner.os == 'Linux' + uses: ./.github/actions/setup + with: + cache-shared-key: v0-rust + - if: runner.os != 'Linux' + uses: ./.github/actions/setup + with: + cache-shared-key: v0-rust + - name: Check + if: runner.os == 'Linux' + run: mise run check + - name: Check + if: runner.os != 'Linux' + run: cargo check --all-targets --all-features test: strategy: fail-fast: false @@ -52,19 +73,13 @@ jobs: with: tool-cache: false large-packages: false - # The coverage-instrumented target (target/llvm-cov-target) can't reuse plain - # v0-rust artifacts, so Linux tests save and restore their own namespace. - if: runner.os == 'Linux' uses: ./.github/actions/setup with: - cache-save: "true" - cache-shared-key: v0-rust-coverage - # Test artifacts are a superset of build artifacts, so the Windows/macOS test - # jobs are the designated v0-rust savers for their platforms. + cache-shared-key: v0-rust - if: runner.os != 'Linux' uses: ./.github/actions/setup with: - cache-save: "true" cache-shared-key: v0-rust - name: Test (with coverage) if: runner.os == 'Linux' @@ -72,24 +87,21 @@ jobs: - name: Test if: runner.os != 'Linux' run: cargo nextest run --all-features - - name: Save Rust cache (R2) - if: ${{ always() && env.POD_RUST_CACHE_SAVE == '1' }} - shell: bash - run: mise run ci:rust-cache save conformance: # Cross-component telemetry contract conformance (task zvvnoyxu, spec mmmzstpq §6 & §12): # the wire shape must not drift across the Rust client, the Cloudflare Worker, and the - # Settings preview. The Rust conformance module pins all three to the same golden fixtures - # and runs inside every test job's full --all-features suite; this job validates the - # Worker's vitest against those same fixtures. Either drifting fails the build. + # Settings preview. The Rust conformance module pins all three to the same golden fixtures; + # the Worker's vitest validates those same fixtures. Either drifting fails the build. runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 - uses: ./.github/actions/setup with: - rust-cache: "false" + cache-shared-key: v0-rust + - name: Rust contract conformance + run: "cargo nextest run --all-features conformance::" - name: Worker contract vitest - working-directory: apps/telemetry + working-directory: web/telemetry run: |- aube ci aube test @@ -106,8 +118,6 @@ jobs: runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v7 - # Linux is the only platform whose v0-rust cache is fed from build (its test job - # saves the coverage namespace instead); Windows/macOS restore what test saved. - if: runner.os == 'Linux' uses: ./.github/actions/setup with: @@ -116,6 +126,7 @@ jobs: - if: runner.os != 'Linux' uses: ./.github/actions/setup with: + cache-save: "true" cache-shared-key: v0-rust - name: Build if: runner.os == 'Linux' diff --git a/.github/workflows/deploy-pages.yml b/.github/workflows/deploy-pages.yml index 28c2bc89..8b58b8db 100644 --- a/.github/workflows/deploy-pages.yml +++ b/.github/workflows/deploy-pages.yml @@ -18,21 +18,21 @@ jobs: - uses: jdx/mise-action@v4 - name: Install dependencies - run: aube --dir apps/marketing install + run: aube --dir web/marketing install - name: Fetch release data - run: aube --dir apps/marketing run fetch-release + run: aube --dir web/marketing run fetch-release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Parse changelog - run: aube --dir apps/marketing run parse-changelog + run: aube --dir web/marketing run parse-changelog - name: Build site - run: aube --dir apps/marketing run build + run: aube --dir web/marketing run build - uses: actions/upload-pages-artifact@v5 with: - path: apps/marketing/dist + path: web/marketing/dist - uses: actions/deploy-pages@v5 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d0e08a45..94ef192f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,15 +8,9 @@ name: Release # release is created, no latest.json is generated, and the site is not deployed. # A bare numeric tag (0.5.3) runs the normal release + deploy path unchanged. # -# Wall-clock shape (ADR-0051): packaging starts immediately instead of queueing -# behind the Build workflow; wait-for-build still polls Build on the same tag -# and publish-release is the job that consumes that gate, so nothing publishes -# unless Build passed and a Build failure still fails this run. -# # Known limitations: -# * Detection is the literal "-rc." substring (contains(github.ref_name, '-rc.')); -# other pre-release suffixes (-beta.N, -alpha.N) are NOT detected and would -# be treated as stable. +# * Detection is the literal "-rc." substring; other pre-release suffixes +# (-beta.N, -alpha.N) are NOT detected and would be treated as stable. # * RC installer filenames carry the numeric Cargo.toml version (e.g. 0.5.3), # not the rc number; RC identity lives in the tag + Actions run, not the # binary. @@ -40,12 +34,22 @@ env: R2_ACCOUNT_ID: ${{ secrets.R2_ACCOUNT_ID }} jobs: - # Pure gate: publish-release needs this job, so a Build failure blocks - # publishing (and fails the run) without serializing the package gauntlet - # behind Build's wall-clock. wait-for-build: runs-on: ubuntu-latest + outputs: + is_rc: ${{ steps.detect-rc.outputs.is_rc }} steps: + - name: Detect release candidate + id: detect-rc + env: + REF_NAME: ${{ github.ref_name }} + run: | + if [[ "$REF_NAME" == *-rc.* ]]; then + echo "is_rc=true" >> "$GITHUB_OUTPUT" + else + echo "is_rc=false" >> "$GITHUB_OUTPUT" + fi + - name: Wait for Build workflow env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -66,11 +70,9 @@ jobs: esac done - # Creates the draft release up front so package jobs can upload to it while - # Build is still running; publish-release flips it public only after the - # wait-for-build gate passes. A failed run can leave an unpublished draft. create-release: - if: ${{ !contains(github.ref_name, '-rc.') }} + needs: wait-for-build + if: ${{ needs.wait-for-build.outputs.is_rc == 'false' }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 @@ -82,6 +84,7 @@ jobs: token: ${{ secrets.GITHUB_TOKEN }} generate-icons: + needs: wait-for-build runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 @@ -97,10 +100,11 @@ jobs: uses: actions/upload-artifact@v7 with: name: item-images - path: apps/desktop/assets/images/items + path: assets/images/items package-macos: needs: + - wait-for-build - create-release - generate-icons if: ${{ always() && needs.generate-icons.result == 'success' && (needs.create-release.result == 'success' || needs.create-release.result == 'skipped') }} @@ -128,18 +132,11 @@ jobs: # each other's target/ tarball in R2. cache-shared-key: v0-pkg-${{ matrix.target }} - # Uniform commit-time mtimes keep cargo's fingerprints clean against the - # restored target/, so a same-commit rerun (rc tag -> real tag) skips the - # ~50 minute leaf-crate recompile (ADR-0051). - - name: Stamp sources with the commit time - shell: bash - run: mise run ci:commit-mtime - - name: Download item icons uses: actions/download-artifact@v8 with: name: item-images - path: apps/desktop/assets/images/items + path: assets/images/items - name: Add Rust target run: rustup target add ${{ matrix.target }} @@ -201,7 +198,7 @@ jobs: cargo-packager signer sign "$TARBALL" - name: Upload to release - if: ${{ !contains(github.ref_name, '-rc.') }} + if: ${{ needs.wait-for-build.outputs.is_rc == 'false' }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} REF_NAME: ${{ github.ref_name }} @@ -213,7 +210,7 @@ jobs: done - name: Upload installers as artifacts (RC) - if: ${{ contains(github.ref_name, '-rc.') }} + if: ${{ needs.wait-for-build.outputs.is_rc == 'true' }} uses: actions/upload-artifact@v7 with: # Unique per matrix leg; two legs cannot share one artifact name. @@ -231,6 +228,7 @@ jobs: package-windows: needs: + - wait-for-build - create-release - generate-icons if: ${{ always() && needs.generate-icons.result == 'success' && (needs.create-release.result == 'success' || needs.create-release.result == 'skipped') }} @@ -248,16 +246,11 @@ jobs: cache-save: "true" cache-shared-key: v0-pkg - # Same-commit rerun reuse; see the package-macos step (ADR-0051). - - name: Stamp sources with the commit time - shell: bash - run: mise run ci:commit-mtime - - name: Download item icons uses: actions/download-artifact@v8 with: name: item-images - path: apps/desktop/assets/images/items + path: assets/images/items - name: Add Rust target run: rustup target add x86_64-pc-windows-msvc @@ -297,7 +290,7 @@ jobs: if ($nsis) { cargo-packager signer sign $nsis.FullName } - name: Upload to release - if: ${{ !contains(github.ref_name, '-rc.') }} + if: ${{ needs.wait-for-build.outputs.is_rc == 'false' }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} shell: pwsh @@ -307,7 +300,7 @@ jobs: } - name: Upload installers as artifacts (RC) - if: ${{ contains(github.ref_name, '-rc.') }} + if: ${{ needs.wait-for-build.outputs.is_rc == 'true' }} uses: actions/upload-artifact@v7 with: name: rc-windows @@ -324,6 +317,7 @@ jobs: package-linux: needs: + - wait-for-build - create-release - generate-icons if: ${{ always() && needs.generate-icons.result == 'success' && (needs.create-release.result == 'success' || needs.create-release.result == 'skipped') }} @@ -341,16 +335,11 @@ jobs: cache-save: "true" cache-shared-key: v0-pkg - # Same-commit rerun reuse; see the package-macos step (ADR-0051). - - name: Stamp sources with the commit time - shell: bash - run: mise run ci:commit-mtime - - name: Download item icons uses: actions/download-artifact@v8 with: name: item-images - path: apps/desktop/assets/images/items + path: assets/images/items - name: Add Rust target run: rustup target add x86_64-unknown-linux-gnu @@ -382,7 +371,7 @@ jobs: -exec cp {} target/release/ \; - name: Upload to release - if: ${{ !contains(github.ref_name, '-rc.') }} + if: ${{ needs.wait-for-build.outputs.is_rc == 'false' }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} REF_NAME: ${{ github.ref_name }} @@ -425,7 +414,7 @@ jobs: run: flatpak build-bundle repo dev.aaronmallen.pod.flatpak dev.aaronmallen.pod - name: Upload Flatpak to release - if: ${{ !contains(github.ref_name, '-rc.') }} + if: ${{ needs.wait-for-build.outputs.is_rc == 'false' }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | @@ -433,7 +422,7 @@ jobs: gh release upload "${{ github.ref_name }}" dev.aaronmallen.pod.flatpak --clobber - name: Upload installers as artifacts (RC) - if: ${{ contains(github.ref_name, '-rc.') }} + if: ${{ needs.wait-for-build.outputs.is_rc == 'true' }} uses: actions/upload-artifact@v7 with: name: rc-linux @@ -451,15 +440,17 @@ jobs: shell: bash run: mise run ci:rust-cache save - # Default needs semantics: every need (including the wait-for-build gate) - # must have succeeded, so nothing publishes on a Build failure. publish-release: needs: - wait-for-build - package-macos - package-windows - package-linux - if: ${{ !contains(github.ref_name, '-rc.') }} + if: >- + ${{ needs.wait-for-build.outputs.is_rc == 'false' + && needs.package-macos.result == 'success' + && needs.package-windows.result == 'success' + && needs.package-linux.result == 'success' }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 @@ -579,7 +570,8 @@ jobs: deploy-pages: needs: + - wait-for-build - publish-release - if: ${{ !contains(github.ref_name, '-rc.') }} + if: ${{ needs.wait-for-build.outputs.is_rc == 'false' }} uses: ./.github/workflows/deploy-pages.yml secrets: inherit diff --git a/.gitignore b/.gitignore index 2f536214..f3ad000e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ -apps/desktop/assets/images/items/* -!apps/desktop/assets/images/items/.no-icon +assets/images/items/* +!assets/images/items/.no-icon coverage/ tmp/ diff --git a/Cargo.toml b/Cargo.toml index 5db08867..866cb382 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,19 +1,82 @@ -[workspace] -members = ["apps/desktop"] -resolver = "3" - -[workspace.package] +[package] authors = ["Aaron Allen "] +description = "A one-stop-shop capsuleer manager for EVE Online." edition = "2024" homepage = "https://pod.aaronmallen.dev" +include = ["assets/*", "migrations/*", "src/*", "LICENSE", "README.md"] license = "MIT" +name = "pod" +publish = false repository = "https://github.com/aaronmallen/pod" +version = "0.7.5" + +[package.metadata.packager] +category = "Utility" +icons = [ + "assets/images/identity/32x32.png", + "assets/images/identity/128x128.png", + "assets/images/identity/256x256.png", + "assets/images/identity/icon.icns", + "assets/images/identity/icon.ico", +] +identifier = "dev.aaronmallen.pod" +product-name = "Pod" +resources = ["assets"] + +[package.metadata.packager.appimage] +libs = [ + "libEGL.so.1", + "libGL.so.1", + "libGLESv2.so.2", + "libGLX.so.0", + "libGLdispatch.so.0", + "libOpenGL.so.0", + "libgbm.so.1", + "libvulkan.so.1", +] + +[[package.metadata.packager.deep-link-protocols]] +schemes = ["eveauth-pod"] + +[[package.metadata.packager.file-associations]] +description = "Pod Budget Rules Pack" +extensions = ["pbr"] +mime-type = "application/x-pod-budget-rules" +name = "Budget Rules Pack" +role = "editor" + +[[package.metadata.packager.file-associations]] +description = "Pod Facility Intel Pack" +extensions = ["pfi"] +mime-type = "application/x-pod-facility-intel" +name = "Facility Intel Pack" +role = "editor" + +[[package.metadata.packager.file-associations]] +description = "Pod Skill Plan Pack" +extensions = ["psp"] +mime-type = "application/x-pod-skill-plan" +name = "Skill Plan Pack" +role = "editor" + +[target.'cfg(target_os = "macos")'.dependencies] +objc2 = "0.6" +objc2-core-services = { features = ["AE"], version = "0.3" } +objc2-foundation = { features = [ + "NSAppleEventDescriptor", + "NSAppleEventManager", + "NSString", + "objc2-core-services", +], version = "0.3" } + +[target.'cfg(target_os = "windows")'.dependencies] +clipboard-win = "5" +winreg = "0.56" -[workspace.dependencies] +[dependencies] base64 = "0.22" cargo-packager-updater = "0.2.3" chrono = "0.4" -clipboard-win = "5" crc32fast = "1" dir_spec = "0.5.2" figment = { features = ["toml"], version = "0.10.19" } @@ -21,14 +84,9 @@ flate2 = "1" futures-util = "0.3" gethostname = "1.1.0" getset = "0.1" -iced = { features = ["advanced", "canvas", "image", "svg", "tokio"], version = "0.14" } -iced_runtime = "0.14" interprocess = "2.4.2" libc = "0.2" -objc2 = "0.6" -objc2-core-services = { features = ["AE"], version = "0.3" } open = "5" -pretty_assertions = "1" rand = "0.10" reqwest = { features = ["form", "gzip", "json"], version = "0.13" } rfd = "0.17" @@ -37,7 +95,6 @@ serde = "1" serde_json = "1" serde_yaml = "0.9" sha2 = "0.11" -sqlx = { features = ["migrate", "runtime-tokio", "sqlite", "sqlite-bundled"], version = "0.9" } sys-locale = "0.3" tempfile = "3" thiserror = "2" @@ -48,16 +105,24 @@ tracing = "0.1.44" tracing-appender = "0.2" tracing-subscriber = { features = ["env-filter", "json"], version = "0.3.23" } wgpu = "27" -winreg = "0.56" +zip = { default-features = false, features = ["deflate"], version = "8" } + +[dependencies.iced] +features = ["advanced", "canvas", "image", "svg", "tokio"] +version = "0.14" + +[dependencies.sqlx] +features = ["migrate", "runtime-tokio", "sqlite", "sqlite-bundled"] +version = "0.9" + +[build-dependencies] winresource = "0.1" + +[dev-dependencies] +iced_runtime = "0.14" +pretty_assertions = "1" +tokio = { features = ["test-util"], version = "1" } wiremock = "0.6" -zip = { default-features = false, features = ["deflate"], version = "8" } -[workspace.dependencies.objc2-foundation] -features = [ - "NSAppleEventDescriptor", - "NSAppleEventManager", - "NSString", - "objc2-core-services", -] -version = "0.3" +[lints.rust] +dead_code = "deny" diff --git a/apps/desktop/Cargo.toml b/apps/desktop/Cargo.toml deleted file mode 100644 index 4122fb59..00000000 --- a/apps/desktop/Cargo.toml +++ /dev/null @@ -1,117 +0,0 @@ -[package] -authors.workspace = true -description = "A one-stop-shop capsuleer manager for EVE Online." -edition.workspace = true -homepage.workspace = true -include = ["assets/*", "migrations/*", "src/*", "LICENSE", "README.md"] -license.workspace = true -name = "pod" -publish = false -repository.workspace = true -version = "0.7.5" - -[target.'cfg(target_os = "macos")'.dependencies] -objc2.workspace = true -objc2-core-services.workspace = true -objc2-foundation.workspace = true - -[target.'cfg(target_os = "windows")'.dependencies] -clipboard-win.workspace = true -winreg.workspace = true - -[package.metadata.packager] -category = "Utility" -icons = [ - "assets/images/identity/32x32.png", - "assets/images/identity/128x128.png", - "assets/images/identity/256x256.png", - "assets/images/identity/icon.icns", - "assets/images/identity/icon.ico", -] -identifier = "dev.aaronmallen.pod" -product-name = "Pod" -resources = ["assets"] - -[package.metadata.packager.appimage] -libs = [ - "libEGL.so.1", - "libGL.so.1", - "libGLESv2.so.2", - "libGLX.so.0", - "libGLdispatch.so.0", - "libOpenGL.so.0", - "libgbm.so.1", - "libvulkan.so.1", -] - -[[package.metadata.packager.deep-link-protocols]] -schemes = ["eveauth-pod"] - -[[package.metadata.packager.file-associations]] -description = "Pod Budget Rules Pack" -extensions = ["pbr"] -mime-type = "application/x-pod-budget-rules" -name = "Budget Rules Pack" -role = "editor" - -[[package.metadata.packager.file-associations]] -description = "Pod Facility Intel Pack" -extensions = ["pfi"] -mime-type = "application/x-pod-facility-intel" -name = "Facility Intel Pack" -role = "editor" - -[[package.metadata.packager.file-associations]] -description = "Pod Skill Plan Pack" -extensions = ["psp"] -mime-type = "application/x-pod-skill-plan" -name = "Skill Plan Pack" -role = "editor" - -[dependencies] -base64.workspace = true -cargo-packager-updater.workspace = true -chrono.workspace = true -crc32fast.workspace = true -dir_spec.workspace = true -figment.workspace = true -flate2.workspace = true -futures-util.workspace = true -gethostname.workspace = true -getset.workspace = true -iced.workspace = true -interprocess.workspace = true -libc.workspace = true -open.workspace = true -rand.workspace = true -reqwest.workspace = true -rfd.workspace = true -rust-i18n.workspace = true -serde.workspace = true -serde_json.workspace = true -serde_yaml.workspace = true -sha2.workspace = true -sqlx.workspace = true -sys-locale.workspace = true -tempfile.workspace = true -thiserror.workspace = true -tokio.workspace = true -toml.workspace = true -toml_edit.workspace = true -tracing.workspace = true -tracing-appender.workspace = true -tracing-subscriber.workspace = true -wgpu.workspace = true -zip.workspace = true - -[build-dependencies] -winresource.workspace = true - -[dev-dependencies] -iced_runtime.workspace = true -pretty_assertions.workspace = true -tokio = { features = ["test-util"], workspace = true } -wiremock.workspace = true - -[lints.rust] -dead_code = "deny" diff --git a/apps/desktop/assets/fonts/JetBrainsMono-Italic.ttf b/assets/fonts/JetBrainsMono-Italic.ttf similarity index 100% rename from apps/desktop/assets/fonts/JetBrainsMono-Italic.ttf rename to assets/fonts/JetBrainsMono-Italic.ttf diff --git a/apps/desktop/assets/fonts/JetBrainsMono.ttf b/assets/fonts/JetBrainsMono.ttf similarity index 100% rename from apps/desktop/assets/fonts/JetBrainsMono.ttf rename to assets/fonts/JetBrainsMono.ttf diff --git a/apps/desktop/assets/fonts/SpaceGrotesk-Medium.ttf b/assets/fonts/SpaceGrotesk-Medium.ttf similarity index 100% rename from apps/desktop/assets/fonts/SpaceGrotesk-Medium.ttf rename to assets/fonts/SpaceGrotesk-Medium.ttf diff --git a/apps/desktop/assets/fonts/SpaceGrotesk-Regular.ttf b/assets/fonts/SpaceGrotesk-Regular.ttf similarity index 100% rename from apps/desktop/assets/fonts/SpaceGrotesk-Regular.ttf rename to assets/fonts/SpaceGrotesk-Regular.ttf diff --git a/apps/desktop/assets/fonts/SpaceGrotesk-SemiBold.ttf b/assets/fonts/SpaceGrotesk-SemiBold.ttf similarity index 100% rename from apps/desktop/assets/fonts/SpaceGrotesk-SemiBold.ttf rename to assets/fonts/SpaceGrotesk-SemiBold.ttf diff --git a/apps/desktop/assets/images/icons/abyssals.svg b/assets/images/icons/abyssals.svg similarity index 100% rename from apps/desktop/assets/images/icons/abyssals.svg rename to assets/images/icons/abyssals.svg diff --git a/apps/desktop/assets/images/icons/alert-triangle.svg b/assets/images/icons/alert-triangle.svg similarity index 100% rename from apps/desktop/assets/images/icons/alert-triangle.svg rename to assets/images/icons/alert-triangle.svg diff --git a/apps/desktop/assets/images/icons/archive.svg b/assets/images/icons/archive.svg similarity index 100% rename from apps/desktop/assets/images/icons/archive.svg rename to assets/images/icons/archive.svg diff --git a/apps/desktop/assets/images/icons/arrow-out.svg b/assets/images/icons/arrow-out.svg similarity index 100% rename from apps/desktop/assets/images/icons/arrow-out.svg rename to assets/images/icons/arrow-out.svg diff --git a/apps/desktop/assets/images/icons/arrow-right.svg b/assets/images/icons/arrow-right.svg similarity index 100% rename from apps/desktop/assets/images/icons/arrow-right.svg rename to assets/images/icons/arrow-right.svg diff --git a/apps/desktop/assets/images/icons/assets.svg b/assets/images/icons/assets.svg similarity index 100% rename from apps/desktop/assets/images/icons/assets.svg rename to assets/images/icons/assets.svg diff --git a/apps/desktop/assets/images/icons/bell.svg b/assets/images/icons/bell.svg similarity index 100% rename from apps/desktop/assets/images/icons/bell.svg rename to assets/images/icons/bell.svg diff --git a/apps/desktop/assets/images/icons/block.svg b/assets/images/icons/block.svg similarity index 100% rename from apps/desktop/assets/images/icons/block.svg rename to assets/images/icons/block.svg diff --git a/apps/desktop/assets/images/icons/bold.svg b/assets/images/icons/bold.svg similarity index 100% rename from apps/desktop/assets/images/icons/bold.svg rename to assets/images/icons/bold.svg diff --git a/apps/desktop/assets/images/icons/budget.svg b/assets/images/icons/budget.svg similarity index 100% rename from apps/desktop/assets/images/icons/budget.svg rename to assets/images/icons/budget.svg diff --git a/apps/desktop/assets/images/icons/calendar.svg b/assets/images/icons/calendar.svg similarity index 100% rename from apps/desktop/assets/images/icons/calendar.svg rename to assets/images/icons/calendar.svg diff --git a/apps/desktop/assets/images/icons/captains-log.svg b/assets/images/icons/captains-log.svg similarity index 100% rename from apps/desktop/assets/images/icons/captains-log.svg rename to assets/images/icons/captains-log.svg diff --git a/apps/desktop/assets/images/icons/cart.svg b/assets/images/icons/cart.svg similarity index 100% rename from apps/desktop/assets/images/icons/cart.svg rename to assets/images/icons/cart.svg diff --git a/apps/desktop/assets/images/icons/check.svg b/assets/images/icons/check.svg similarity index 100% rename from apps/desktop/assets/images/icons/check.svg rename to assets/images/icons/check.svg diff --git a/apps/desktop/assets/images/icons/chevron.svg b/assets/images/icons/chevron.svg similarity index 100% rename from apps/desktop/assets/images/icons/chevron.svg rename to assets/images/icons/chevron.svg diff --git a/apps/desktop/assets/images/icons/chevrons-up.svg b/assets/images/icons/chevrons-up.svg similarity index 100% rename from apps/desktop/assets/images/icons/chevrons-up.svg rename to assets/images/icons/chevrons-up.svg diff --git a/apps/desktop/assets/images/icons/clock.svg b/assets/images/icons/clock.svg similarity index 100% rename from apps/desktop/assets/images/icons/clock.svg rename to assets/images/icons/clock.svg diff --git a/apps/desktop/assets/images/icons/close.svg b/assets/images/icons/close.svg similarity index 100% rename from apps/desktop/assets/images/icons/close.svg rename to assets/images/icons/close.svg diff --git a/apps/desktop/assets/images/icons/compare.svg b/assets/images/icons/compare.svg similarity index 100% rename from apps/desktop/assets/images/icons/compare.svg rename to assets/images/icons/compare.svg diff --git a/apps/desktop/assets/images/icons/contact-sync.svg b/assets/images/icons/contact-sync.svg similarity index 100% rename from apps/desktop/assets/images/icons/contact-sync.svg rename to assets/images/icons/contact-sync.svg diff --git a/apps/desktop/assets/images/icons/contracts.svg b/assets/images/icons/contracts.svg similarity index 100% rename from apps/desktop/assets/images/icons/contracts.svg rename to assets/images/icons/contracts.svg diff --git a/apps/desktop/assets/images/icons/copy.svg b/assets/images/icons/copy.svg similarity index 100% rename from apps/desktop/assets/images/icons/copy.svg rename to assets/images/icons/copy.svg diff --git a/apps/desktop/assets/images/icons/corp.svg b/assets/images/icons/corp.svg similarity index 100% rename from apps/desktop/assets/images/icons/corp.svg rename to assets/images/icons/corp.svg diff --git a/apps/desktop/assets/images/icons/cross.svg b/assets/images/icons/cross.svg similarity index 100% rename from apps/desktop/assets/images/icons/cross.svg rename to assets/images/icons/cross.svg diff --git a/apps/desktop/assets/images/icons/doc.svg b/assets/images/icons/doc.svg similarity index 100% rename from apps/desktop/assets/images/icons/doc.svg rename to assets/images/icons/doc.svg diff --git a/apps/desktop/assets/images/icons/download.svg b/assets/images/icons/download.svg similarity index 100% rename from apps/desktop/assets/images/icons/download.svg rename to assets/images/icons/download.svg diff --git a/apps/desktop/assets/images/icons/draft.svg b/assets/images/icons/draft.svg similarity index 100% rename from apps/desktop/assets/images/icons/draft.svg rename to assets/images/icons/draft.svg diff --git a/apps/desktop/assets/images/icons/drop.svg b/assets/images/icons/drop.svg similarity index 100% rename from apps/desktop/assets/images/icons/drop.svg rename to assets/images/icons/drop.svg diff --git a/apps/desktop/assets/images/icons/facilities.svg b/assets/images/icons/facilities.svg similarity index 100% rename from apps/desktop/assets/images/icons/facilities.svg rename to assets/images/icons/facilities.svg diff --git a/apps/desktop/assets/images/icons/faction.svg b/assets/images/icons/faction.svg similarity index 100% rename from apps/desktop/assets/images/icons/faction.svg rename to assets/images/icons/faction.svg diff --git a/apps/desktop/assets/images/icons/filter.svg b/assets/images/icons/filter.svg similarity index 100% rename from apps/desktop/assets/images/icons/filter.svg rename to assets/images/icons/filter.svg diff --git a/apps/desktop/assets/images/icons/fitting.svg b/assets/images/icons/fitting.svg similarity index 100% rename from apps/desktop/assets/images/icons/fitting.svg rename to assets/images/icons/fitting.svg diff --git a/apps/desktop/assets/images/icons/flask.svg b/assets/images/icons/flask.svg similarity index 100% rename from apps/desktop/assets/images/icons/flask.svg rename to assets/images/icons/flask.svg diff --git a/apps/desktop/assets/images/icons/fleet.svg b/assets/images/icons/fleet.svg similarity index 100% rename from apps/desktop/assets/images/icons/fleet.svg rename to assets/images/icons/fleet.svg diff --git a/apps/desktop/assets/images/icons/folder-open.svg b/assets/images/icons/folder-open.svg similarity index 100% rename from apps/desktop/assets/images/icons/folder-open.svg rename to assets/images/icons/folder-open.svg diff --git a/apps/desktop/assets/images/icons/forward.svg b/assets/images/icons/forward.svg similarity index 100% rename from apps/desktop/assets/images/icons/forward.svg rename to assets/images/icons/forward.svg diff --git a/apps/desktop/assets/images/icons/grip.svg b/assets/images/icons/grip.svg similarity index 100% rename from apps/desktop/assets/images/icons/grip.svg rename to assets/images/icons/grip.svg diff --git a/apps/desktop/assets/images/icons/heart.svg b/assets/images/icons/heart.svg similarity index 100% rename from apps/desktop/assets/images/icons/heart.svg rename to assets/images/icons/heart.svg diff --git a/apps/desktop/assets/images/icons/help.svg b/assets/images/icons/help.svg similarity index 100% rename from apps/desktop/assets/images/icons/help.svg rename to assets/images/icons/help.svg diff --git a/apps/desktop/assets/images/icons/image-missing.svg b/assets/images/icons/image-missing.svg similarity index 100% rename from apps/desktop/assets/images/icons/image-missing.svg rename to assets/images/icons/image-missing.svg diff --git a/apps/desktop/assets/images/icons/inbox-all.svg b/assets/images/icons/inbox-all.svg similarity index 100% rename from apps/desktop/assets/images/icons/inbox-all.svg rename to assets/images/icons/inbox-all.svg diff --git a/apps/desktop/assets/images/icons/inbox.svg b/assets/images/icons/inbox.svg similarity index 100% rename from apps/desktop/assets/images/icons/inbox.svg rename to assets/images/icons/inbox.svg diff --git a/apps/desktop/assets/images/icons/industry.svg b/assets/images/icons/industry.svg similarity index 100% rename from apps/desktop/assets/images/icons/industry.svg rename to assets/images/icons/industry.svg diff --git a/apps/desktop/assets/images/icons/info.svg b/assets/images/icons/info.svg similarity index 100% rename from apps/desktop/assets/images/icons/info.svg rename to assets/images/icons/info.svg diff --git a/apps/desktop/assets/images/icons/inventory.svg b/assets/images/icons/inventory.svg similarity index 100% rename from apps/desktop/assets/images/icons/inventory.svg rename to assets/images/icons/inventory.svg diff --git a/apps/desktop/assets/images/icons/italic.svg b/assets/images/icons/italic.svg similarity index 100% rename from apps/desktop/assets/images/icons/italic.svg rename to assets/images/icons/italic.svg diff --git a/apps/desktop/assets/images/icons/journal.svg b/assets/images/icons/journal.svg similarity index 100% rename from apps/desktop/assets/images/icons/journal.svg rename to assets/images/icons/journal.svg diff --git a/apps/desktop/assets/images/icons/layout.svg b/assets/images/icons/layout.svg similarity index 100% rename from apps/desktop/assets/images/icons/layout.svg rename to assets/images/icons/layout.svg diff --git a/apps/desktop/assets/images/icons/link.svg b/assets/images/icons/link.svg similarity index 100% rename from apps/desktop/assets/images/icons/link.svg rename to assets/images/icons/link.svg diff --git a/apps/desktop/assets/images/icons/live.svg b/assets/images/icons/live.svg similarity index 100% rename from apps/desktop/assets/images/icons/live.svg rename to assets/images/icons/live.svg diff --git a/apps/desktop/assets/images/icons/lock.svg b/assets/images/icons/lock.svg similarity index 100% rename from apps/desktop/assets/images/icons/lock.svg rename to assets/images/icons/lock.svg diff --git a/apps/desktop/assets/images/icons/mail.svg b/assets/images/icons/mail.svg similarity index 100% rename from apps/desktop/assets/images/icons/mail.svg rename to assets/images/icons/mail.svg diff --git a/apps/desktop/assets/images/icons/market-tree.svg b/assets/images/icons/market-tree.svg similarity index 100% rename from apps/desktop/assets/images/icons/market-tree.svg rename to assets/images/icons/market-tree.svg diff --git a/apps/desktop/assets/images/icons/market.svg b/assets/images/icons/market.svg similarity index 100% rename from apps/desktop/assets/images/icons/market.svg rename to assets/images/icons/market.svg diff --git a/apps/desktop/assets/images/icons/moon.svg b/assets/images/icons/moon.svg similarity index 100% rename from apps/desktop/assets/images/icons/moon.svg rename to assets/images/icons/moon.svg diff --git a/apps/desktop/assets/images/icons/mutamarket.svg b/assets/images/icons/mutamarket.svg similarity index 100% rename from apps/desktop/assets/images/icons/mutamarket.svg rename to assets/images/icons/mutamarket.svg diff --git a/apps/desktop/assets/images/icons/notif-clone.svg b/assets/images/icons/notif-clone.svg similarity index 100% rename from apps/desktop/assets/images/icons/notif-clone.svg rename to assets/images/icons/notif-clone.svg diff --git a/apps/desktop/assets/images/icons/notif-combat.svg b/assets/images/icons/notif-combat.svg similarity index 100% rename from apps/desktop/assets/images/icons/notif-combat.svg rename to assets/images/icons/notif-combat.svg diff --git a/apps/desktop/assets/images/icons/notif-contact.svg b/assets/images/icons/notif-contact.svg similarity index 100% rename from apps/desktop/assets/images/icons/notif-contact.svg rename to assets/images/icons/notif-contact.svg diff --git a/apps/desktop/assets/images/icons/notif-contract.svg b/assets/images/icons/notif-contract.svg similarity index 100% rename from apps/desktop/assets/images/icons/notif-contract.svg rename to assets/images/icons/notif-contract.svg diff --git a/apps/desktop/assets/images/icons/notif-corp.svg b/assets/images/icons/notif-corp.svg similarity index 100% rename from apps/desktop/assets/images/icons/notif-corp.svg rename to assets/images/icons/notif-corp.svg diff --git a/apps/desktop/assets/images/icons/notif-fw.svg b/assets/images/icons/notif-fw.svg similarity index 100% rename from apps/desktop/assets/images/icons/notif-fw.svg rename to assets/images/icons/notif-fw.svg diff --git a/apps/desktop/assets/images/icons/notif-incursion.svg b/assets/images/icons/notif-incursion.svg similarity index 100% rename from apps/desktop/assets/images/icons/notif-incursion.svg rename to assets/images/icons/notif-incursion.svg diff --git a/apps/desktop/assets/images/icons/notif-industry.svg b/assets/images/icons/notif-industry.svg similarity index 100% rename from apps/desktop/assets/images/icons/notif-industry.svg rename to assets/images/icons/notif-industry.svg diff --git a/apps/desktop/assets/images/icons/notif-insurance.svg b/assets/images/icons/notif-insurance.svg similarity index 100% rename from apps/desktop/assets/images/icons/notif-insurance.svg rename to assets/images/icons/notif-insurance.svg diff --git a/apps/desktop/assets/images/icons/notif-market.svg b/assets/images/icons/notif-market.svg similarity index 100% rename from apps/desktop/assets/images/icons/notif-market.svg rename to assets/images/icons/notif-market.svg diff --git a/apps/desktop/assets/images/icons/notif-mission.svg b/assets/images/icons/notif-mission.svg similarity index 100% rename from apps/desktop/assets/images/icons/notif-mission.svg rename to assets/images/icons/notif-mission.svg diff --git a/apps/desktop/assets/images/icons/notif-reward.svg b/assets/images/icons/notif-reward.svg similarity index 100% rename from apps/desktop/assets/images/icons/notif-reward.svg rename to assets/images/icons/notif-reward.svg diff --git a/apps/desktop/assets/images/icons/notif-standing.svg b/assets/images/icons/notif-standing.svg similarity index 100% rename from apps/desktop/assets/images/icons/notif-standing.svg rename to assets/images/icons/notif-standing.svg diff --git a/apps/desktop/assets/images/icons/notif-structure.svg b/assets/images/icons/notif-structure.svg similarity index 100% rename from apps/desktop/assets/images/icons/notif-structure.svg rename to assets/images/icons/notif-structure.svg diff --git a/apps/desktop/assets/images/icons/notif-system.svg b/assets/images/icons/notif-system.svg similarity index 100% rename from apps/desktop/assets/images/icons/notif-system.svg rename to assets/images/icons/notif-system.svg diff --git a/apps/desktop/assets/images/icons/notif-war.svg b/assets/images/icons/notif-war.svg similarity index 100% rename from apps/desktop/assets/images/icons/notif-war.svg rename to assets/images/icons/notif-war.svg diff --git a/apps/desktop/assets/images/icons/office.svg b/assets/images/icons/office.svg similarity index 100% rename from apps/desktop/assets/images/icons/office.svg rename to assets/images/icons/office.svg diff --git a/apps/desktop/assets/images/icons/pencil.svg b/assets/images/icons/pencil.svg similarity index 100% rename from apps/desktop/assets/images/icons/pencil.svg rename to assets/images/icons/pencil.svg diff --git a/apps/desktop/assets/images/icons/personal.svg b/assets/images/icons/personal.svg similarity index 100% rename from apps/desktop/assets/images/icons/personal.svg rename to assets/images/icons/personal.svg diff --git a/apps/desktop/assets/images/icons/pin.svg b/assets/images/icons/pin.svg similarity index 100% rename from apps/desktop/assets/images/icons/pin.svg rename to assets/images/icons/pin.svg diff --git a/apps/desktop/assets/images/icons/planet.svg b/assets/images/icons/planet.svg similarity index 100% rename from apps/desktop/assets/images/icons/planet.svg rename to assets/images/icons/planet.svg diff --git a/apps/desktop/assets/images/icons/plans.svg b/assets/images/icons/plans.svg similarity index 100% rename from apps/desktop/assets/images/icons/plans.svg rename to assets/images/icons/plans.svg diff --git a/apps/desktop/assets/images/icons/plus-minus.svg b/assets/images/icons/plus-minus.svg similarity index 100% rename from apps/desktop/assets/images/icons/plus-minus.svg rename to assets/images/icons/plus-minus.svg diff --git a/apps/desktop/assets/images/icons/plus.svg b/assets/images/icons/plus.svg similarity index 100% rename from apps/desktop/assets/images/icons/plus.svg rename to assets/images/icons/plus.svg diff --git a/apps/desktop/assets/images/icons/pulse.svg b/assets/images/icons/pulse.svg similarity index 100% rename from apps/desktop/assets/images/icons/pulse.svg rename to assets/images/icons/pulse.svg diff --git a/apps/desktop/assets/images/icons/reply-all.svg b/assets/images/icons/reply-all.svg similarity index 100% rename from apps/desktop/assets/images/icons/reply-all.svg rename to assets/images/icons/reply-all.svg diff --git a/apps/desktop/assets/images/icons/reply.svg b/assets/images/icons/reply.svg similarity index 100% rename from apps/desktop/assets/images/icons/reply.svg rename to assets/images/icons/reply.svg diff --git a/apps/desktop/assets/images/icons/reset.svg b/assets/images/icons/reset.svg similarity index 100% rename from apps/desktop/assets/images/icons/reset.svg rename to assets/images/icons/reset.svg diff --git a/apps/desktop/assets/images/icons/roster.svg b/assets/images/icons/roster.svg similarity index 100% rename from apps/desktop/assets/images/icons/roster.svg rename to assets/images/icons/roster.svg diff --git a/apps/desktop/assets/images/icons/search.svg b/assets/images/icons/search.svg similarity index 100% rename from apps/desktop/assets/images/icons/search.svg rename to assets/images/icons/search.svg diff --git a/apps/desktop/assets/images/icons/send.svg b/assets/images/icons/send.svg similarity index 100% rename from apps/desktop/assets/images/icons/send.svg rename to assets/images/icons/send.svg diff --git a/apps/desktop/assets/images/icons/settings.svg b/assets/images/icons/settings.svg similarity index 100% rename from apps/desktop/assets/images/icons/settings.svg rename to assets/images/icons/settings.svg diff --git a/apps/desktop/assets/images/icons/shield.svg b/assets/images/icons/shield.svg similarity index 100% rename from apps/desktop/assets/images/icons/shield.svg rename to assets/images/icons/shield.svg diff --git a/apps/desktop/assets/images/icons/skills.svg b/assets/images/icons/skills.svg similarity index 100% rename from apps/desktop/assets/images/icons/skills.svg rename to assets/images/icons/skills.svg diff --git a/apps/desktop/assets/images/icons/slash.svg b/assets/images/icons/slash.svg similarity index 100% rename from apps/desktop/assets/images/icons/slash.svg rename to assets/images/icons/slash.svg diff --git a/apps/desktop/assets/images/icons/snooze.svg b/assets/images/icons/snooze.svg similarity index 100% rename from apps/desktop/assets/images/icons/snooze.svg rename to assets/images/icons/snooze.svg diff --git a/apps/desktop/assets/images/icons/spark.svg b/assets/images/icons/spark.svg similarity index 100% rename from apps/desktop/assets/images/icons/spark.svg rename to assets/images/icons/spark.svg diff --git a/apps/desktop/assets/images/icons/squads.svg b/assets/images/icons/squads.svg similarity index 100% rename from apps/desktop/assets/images/icons/squads.svg rename to assets/images/icons/squads.svg diff --git a/apps/desktop/assets/images/icons/star.svg b/assets/images/icons/star.svg similarity index 100% rename from apps/desktop/assets/images/icons/star.svg rename to assets/images/icons/star.svg diff --git a/apps/desktop/assets/images/icons/stockpiles.svg b/assets/images/icons/stockpiles.svg similarity index 100% rename from apps/desktop/assets/images/icons/stockpiles.svg rename to assets/images/icons/stockpiles.svg diff --git a/apps/desktop/assets/images/icons/storefront.svg b/assets/images/icons/storefront.svg similarity index 100% rename from apps/desktop/assets/images/icons/storefront.svg rename to assets/images/icons/storefront.svg diff --git a/apps/desktop/assets/images/icons/tack.svg b/assets/images/icons/tack.svg similarity index 100% rename from apps/desktop/assets/images/icons/tack.svg rename to assets/images/icons/tack.svg diff --git a/apps/desktop/assets/images/icons/tag.svg b/assets/images/icons/tag.svg similarity index 100% rename from apps/desktop/assets/images/icons/tag.svg rename to assets/images/icons/tag.svg diff --git a/apps/desktop/assets/images/icons/target.svg b/assets/images/icons/target.svg similarity index 100% rename from apps/desktop/assets/images/icons/target.svg rename to assets/images/icons/target.svg diff --git a/apps/desktop/assets/images/icons/tier-all.svg b/assets/images/icons/tier-all.svg similarity index 100% rename from apps/desktop/assets/images/icons/tier-all.svg rename to assets/images/icons/tier-all.svg diff --git a/apps/desktop/assets/images/icons/tier-constellation.svg b/assets/images/icons/tier-constellation.svg similarity index 100% rename from apps/desktop/assets/images/icons/tier-constellation.svg rename to assets/images/icons/tier-constellation.svg diff --git a/apps/desktop/assets/images/icons/tier-region.svg b/assets/images/icons/tier-region.svg similarity index 100% rename from apps/desktop/assets/images/icons/tier-region.svg rename to assets/images/icons/tier-region.svg diff --git a/apps/desktop/assets/images/icons/tier-station.svg b/assets/images/icons/tier-station.svg similarity index 100% rename from apps/desktop/assets/images/icons/tier-station.svg rename to assets/images/icons/tier-station.svg diff --git a/apps/desktop/assets/images/icons/tier-system.svg b/assets/images/icons/tier-system.svg similarity index 100% rename from apps/desktop/assets/images/icons/tier-system.svg rename to assets/images/icons/tier-system.svg diff --git a/apps/desktop/assets/images/icons/tilde.svg b/assets/images/icons/tilde.svg similarity index 100% rename from apps/desktop/assets/images/icons/tilde.svg rename to assets/images/icons/tilde.svg diff --git a/apps/desktop/assets/images/icons/tracker.svg b/assets/images/icons/tracker.svg similarity index 100% rename from apps/desktop/assets/images/icons/tracker.svg rename to assets/images/icons/tracker.svg diff --git a/apps/desktop/assets/images/icons/trash.svg b/assets/images/icons/trash.svg similarity index 100% rename from apps/desktop/assets/images/icons/trash.svg rename to assets/images/icons/trash.svg diff --git a/apps/desktop/assets/images/icons/trend.svg b/assets/images/icons/trend.svg similarity index 100% rename from apps/desktop/assets/images/icons/trend.svg rename to assets/images/icons/trend.svg diff --git a/apps/desktop/assets/images/icons/upload.svg b/assets/images/icons/upload.svg similarity index 100% rename from apps/desktop/assets/images/icons/upload.svg rename to assets/images/icons/upload.svg diff --git a/apps/desktop/assets/images/icons/users.svg b/assets/images/icons/users.svg similarity index 100% rename from apps/desktop/assets/images/icons/users.svg rename to assets/images/icons/users.svg diff --git a/apps/desktop/assets/images/icons/utilities.svg b/assets/images/icons/utilities.svg similarity index 100% rename from apps/desktop/assets/images/icons/utilities.svg rename to assets/images/icons/utilities.svg diff --git a/apps/desktop/assets/images/icons/values.svg b/assets/images/icons/values.svg similarity index 100% rename from apps/desktop/assets/images/icons/values.svg rename to assets/images/icons/values.svg diff --git a/apps/desktop/assets/images/icons/view-cards.svg b/assets/images/icons/view-cards.svg similarity index 100% rename from apps/desktop/assets/images/icons/view-cards.svg rename to assets/images/icons/view-cards.svg diff --git a/apps/desktop/assets/images/icons/view-compact.svg b/assets/images/icons/view-compact.svg similarity index 100% rename from apps/desktop/assets/images/icons/view-compact.svg rename to assets/images/icons/view-compact.svg diff --git a/apps/desktop/assets/images/icons/view-list.svg b/assets/images/icons/view-list.svg similarity index 100% rename from apps/desktop/assets/images/icons/view-list.svg rename to assets/images/icons/view-list.svg diff --git a/apps/desktop/assets/images/icons/wallet.svg b/assets/images/icons/wallet.svg similarity index 100% rename from apps/desktop/assets/images/icons/wallet.svg rename to assets/images/icons/wallet.svg diff --git a/apps/desktop/assets/images/identity/128x128.png b/assets/images/identity/128x128.png similarity index 100% rename from apps/desktop/assets/images/identity/128x128.png rename to assets/images/identity/128x128.png diff --git a/apps/desktop/assets/images/identity/256x256.png b/assets/images/identity/256x256.png similarity index 100% rename from apps/desktop/assets/images/identity/256x256.png rename to assets/images/identity/256x256.png diff --git a/apps/desktop/assets/images/identity/32x32.png b/assets/images/identity/32x32.png similarity index 100% rename from apps/desktop/assets/images/identity/32x32.png rename to assets/images/identity/32x32.png diff --git a/apps/desktop/assets/images/identity/icon.icns b/assets/images/identity/icon.icns similarity index 100% rename from apps/desktop/assets/images/identity/icon.icns rename to assets/images/identity/icon.icns diff --git a/apps/desktop/assets/images/identity/icon.ico b/assets/images/identity/icon.ico similarity index 100% rename from apps/desktop/assets/images/identity/icon.ico rename to assets/images/identity/icon.ico diff --git a/apps/desktop/assets/images/identity/pod-mark.svg b/assets/images/identity/pod-mark.svg similarity index 100% rename from apps/desktop/assets/images/identity/pod-mark.svg rename to assets/images/identity/pod-mark.svg diff --git a/apps/desktop/assets/images/items/.no-icon b/assets/images/items/.no-icon similarity index 100% rename from apps/desktop/assets/images/items/.no-icon rename to assets/images/items/.no-icon diff --git a/apps/desktop/assets/locales/de.toml b/assets/locales/de.toml similarity index 100% rename from apps/desktop/assets/locales/de.toml rename to assets/locales/de.toml diff --git a/apps/desktop/assets/locales/en-us.toml b/assets/locales/en-us.toml similarity index 100% rename from apps/desktop/assets/locales/en-us.toml rename to assets/locales/en-us.toml diff --git a/apps/desktop/assets/locales/en.toml b/assets/locales/en.toml similarity index 100% rename from apps/desktop/assets/locales/en.toml rename to assets/locales/en.toml diff --git a/apps/desktop/assets/locales/es.toml b/assets/locales/es.toml similarity index 100% rename from apps/desktop/assets/locales/es.toml rename to assets/locales/es.toml diff --git a/apps/desktop/assets/locales/fr.toml b/assets/locales/fr.toml similarity index 100% rename from apps/desktop/assets/locales/fr.toml rename to assets/locales/fr.toml diff --git a/apps/desktop/assets/locales/ja.toml b/assets/locales/ja.toml similarity index 100% rename from apps/desktop/assets/locales/ja.toml rename to assets/locales/ja.toml diff --git a/apps/desktop/assets/locales/ko.toml b/assets/locales/ko.toml similarity index 100% rename from apps/desktop/assets/locales/ko.toml rename to assets/locales/ko.toml diff --git a/apps/desktop/assets/locales/ru.toml b/assets/locales/ru.toml similarity index 100% rename from apps/desktop/assets/locales/ru.toml rename to assets/locales/ru.toml diff --git a/apps/desktop/assets/locales/zh.toml b/assets/locales/zh.toml similarity index 100% rename from apps/desktop/assets/locales/zh.toml rename to assets/locales/zh.toml diff --git a/apps/desktop/build.rs b/build.rs similarity index 100% rename from apps/desktop/build.rs rename to build.rs diff --git a/docs/design/0050-build-ci-gate-folding-and-single-saver-cache.md b/docs/design/0050-build-ci-gate-folding-and-single-saver-cache.md deleted file mode 100644 index 46553b36..00000000 --- a/docs/design/0050-build-ci-gate-folding-and-single-saver-cache.md +++ /dev/null @@ -1,109 +0,0 @@ ---- -id: "0050" -title: Build CI Gate Folding & Single-Saver R2 Cache -status: active -tags: [ci, infrastructure, caching] -created: 2026-07-22 ---- - -# ADR-0050: Build CI Gate Folding & Single-Saver R2 Cache - -## Status - -![Active](https://img.shields.io/badge/Active-green?style=for-the-badge) - -## Summary - -The Build workflow drops its standalone `check` matrix and the redundant Rust half of `conformance`, folding both -gates into jobs that already compile the same code, and restructures the R2 Rust cache around three rules: exactly -one designated saver per cache namespace per platform, test jobs (whose artifacts are a superset of build artifacts) -save `v0-rust` on Windows and macOS, and the Linux coverage run gets its own `v0-rust-coverage` namespace so the -cargo-llvm-cov instrumented target is finally cached at all. `scripts/ci/rust-cache save` now skips the upload when -the exact key already exists in R2, because the key (OS + rustc + Cargo.lock) embeds everything the contents depend -on, and pipes tar through `gzip -1` when it does save. Together these cut a typical warm main-branch run from about -35 minutes of wall-clock to a projected 18 to 20 minutes and roughly halve total runner-minutes. - -## Context - -After the apps/ relocation, a warm main-branch Build run (for example run 29894615892 on 2026-07-22) spent about -34.7 minutes of wall-clock across eleven parallel jobs, and the step timings showed the time was not going where -intuition said it was: - -- The compiles themselves were fast: warm `cargo build` took 2.0 minutes on Linux and 5.4 on Windows; `mise run - lint` (including a full `cargo clippy --all-targets --all-features`) took 4.4 minutes. -- The R2 cache save step dominated the critical path: 18.3 minutes on build (ubuntu), 23.1 on build (windows), and - 22.1 on lint. Every main push re-tarred and re-uploaded a multi-GB target directory whose dependency graph had not - changed. -- test (ubuntu) spent 27.2 minutes because the cargo-llvm-cov instrumented build (in `target/llvm-cov-target`) was - never cached: test jobs had no save step, and the `v0-rust` cache they restored only ever contained `cargo build` - artifacts saved by the build jobs, which also means the Windows and macOS test jobs recompiled every test binary - from scratch on every run. -- The `check` matrix was pure redundancy: `cargo check --all-targets --all-features` is a compile subset of lint's - clippy invocation on Linux, and of the test + build compiles (with codegen) on Windows and macOS. The desktop - crate has no benches or examples, so `--all-targets` covers nothing those jobs do not build. -- The `conformance` job's Rust half (`cargo nextest run --all-features conformance::`) is a strict subset of the - full `--all-features` suite that all three test jobs already run; only its Worker vitest half is unique. - -## Decision - -### Fold the check and Rust-conformance gates into jobs that already compile the code - -The `check` matrix is deleted. The compile-check gate survives by construction: on Linux, lint's -`cargo clippy --all-targets --all-features -- -D warnings` performs the same full-workspace check compile; on -Windows and macOS, the test job compiles every test target plus the binary and the build job compiles the binary, -so any platform-specific compile error still fails the run. The `conformance` job keeps its name and its Worker -vitest half but no longer restores a Rust cache or compiles anything; the Rust conformance suite runs inside every -test job's full-suite invocation on all three platforms, which is strictly more coverage than the old Linux-only -dedicated run. - -### One designated saver per namespace per platform - -Cache namespaces get exactly one writer each so the contents are deterministic: - -| Namespace | Saved by | Restored by | -|--------------------|---------------------------------|------------------------------| -| default | lint | lint | -| v0-rust (linux) | build (ubuntu) | build (ubuntu) | -| v0-rust (win/mac) | test (windows/macos) | test + build (windows/macos) | -| v0-rust-coverage | test (ubuntu) | test (ubuntu) | - -Test jobs become the `v0-rust` savers on Windows and macOS because a nextest build is a superset of a -`cargo build`: it compiles the same dependency graph plus every test binary. The build jobs there go restore-only. -Linux keeps build as its saver because its test job runs under cargo-llvm-cov, whose separately-instrumented target -is useless to (and cannot reuse) plain artifacts; it caches under the new `v0-rust-coverage` namespace instead, -making the coverage build incremental for the first time. - -### Skip saves whose exact key already exists - -`scripts/ci/rust-cache save` now checks `ci:r2 exists` for the exact object key and skips the tar + upload on a -hit. The key derivation is untouched: OS + rustc version + Cargo.lock hash. Those three inputs are the only things -the cached dependency artifacts are derived from, so an existing object for the key is still valid; source-only -drift on top of it rebuilds incrementally after restore, which is exactly the warm-compile path that already takes -single-digit minutes. This turns the 15 to 20 minute save step into a no-op on every run that does not change -Cargo.lock or the toolchain. `POD_RUST_CACHE_FORCE_SAVE=1` bypasses the check if a cache ever needs a manual -refresh. When a save does happen, tar pipes through `gzip -1` (same on-disk format the restore path already reads, -several times faster on multi-GB targets), with a marker file so a mid-pipe tar failure never uploads a truncated -archive over a good one. - -## Affected Areas - -- `.github/workflows/build.yml`: job graph, cache-saver assignments, deleted check matrix, node-only conformance. -- `scripts/ci/rust-cache`: save-path behavior only; restore path and key derivation unchanged. -- `release.yml` (indirectly): its `v0-pkg*` saves go through the same script and now also skip when unchanged, - which shortens release wall-clock; the same staleness reasoning applies. -- The `main` ruleset's required status checks: the `check` context no longer exists and must be removed from the - ruleset; `lint`, `test`, and `build` keep their names. - -## Consequences - -- Typical warm main-branch wall-clock drops from about 35 minutes to a projected 18 to 20 (critical path becomes - the test jobs), and total runner-minutes fall from roughly 240 to under 110. -- Cache contents freeze between Cargo.lock/rustc changes, so warm compile times creep up as source drifts from the - last save. Dependabot bumps the lock near-daily, which re-saves fresh artifacts; `POD_RUST_CACHE_FORCE_SAVE=1` - is the manual escape hatch. -- On Windows and macOS the existing `v0-rust` objects (build-only artifacts) remain valid for the current key, so - the first save of richer test artifacts is deferred until the next lock or toolchain change; test jobs stay at - their old duration until then. -- The first run after this change is cold for `v0-rust-coverage` (one full instrumented build plus save); every - existing namespace stays warm because no key or namespace it uses changed. -- Runs that do change Cargo.lock still pay one full save per namespace, now cheaper via `gzip -1`. diff --git a/docs/design/0051-release-decoupled-packaging-and-commit-time-mtimes.md b/docs/design/0051-release-decoupled-packaging-and-commit-time-mtimes.md deleted file mode 100644 index a450de55..00000000 --- a/docs/design/0051-release-decoupled-packaging-and-commit-time-mtimes.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -id: "0051" -title: Release Decoupled Packaging & Commit-Time Mtimes -status: active -tags: [ci, infrastructure, caching] -created: 2026-07-22 ---- - -# ADR-0051: Release Decoupled Packaging & Commit-Time Mtimes - -## Status - -![Active](https://img.shields.io/badge/Active-green?style=for-the-badge) - -## Summary - -The Release workflow stops queueing the entire package gauntlet behind the Build workflow: packaging starts the -moment the tag lands, and `wait-for-build` becomes a pure gate that only `publish-release` consumes, so nothing -publishes unless Build passed and a Build failure still fails the run. Package jobs additionally stamp every -tracked file with the tagged commit's committer date before building (`scripts/ci/commit-mtime`), which makes a -same-commit rerun (an rc tag followed by the real tag on the identical commit) fingerprint-clean against the -restored R2 cache and skips the roughly 52-minute leaf-crate release recompile on macOS. Together with the -save-skip from ADR-0050 (which already covers the `v0-pkg*` namespaces), a real-tag Release run drops from about -99 minutes of wall-clock to a projected 40, and an rc run from about 95 to a projected 60. - -## Context - -The 0.7.5 release cycle on 2026-07-22 provides the baseline. The rc run (29894617161) took 1h 35m and the real-tag -run (29899774263) took 1h 39m, with this critical path on the real tag: - -- `wait-for-build` 36.9 min: every package job needed this job, so the whole gauntlet queued behind the full Build - workflow even though packaging consumes nothing Build produces. Build runs on the same tag push and gates the - candidate anyway; serializing it in front of packaging bought no additional safety on the real tag, whose commit - the rc had already proven. -- `package-macos (aarch64)` 59.3 min, of which `cargo build --release` was 52m 42s. The job had restored the rc - run's cache at the exact key (same commit, same Cargo.lock, same rustc) in about 33 seconds, and cargo's log - shows exactly one `Compiling` line: every dependency was reused and only the leaf crate rebuilt. The same - pattern held on Windows (9m 52s) and Linux (5m 12s). The only fingerprint input that differed from the run that - saved the cache was file mtimes: a fresh checkout stamps sources newer than the restored artifacts, and cargo's - release-profile freshness check is mtime-based. -- The remainder is packaging proper and is not workflow-addressable: NSIS compression about 9 min and WiX about - 3.5 min on Windows, dmg plus updater tarball about 2.5 min on macOS. The 2 to 3.5 min cache-save tails are - already usually no-ops via ADR-0050's exists-check, which the `v0-pkg*` namespaces share. - -## Decision - -### Decouple packaging from the Build gate - -`create-release` and `generate-icons` start immediately on the tag push, and the package jobs need only those -two. `wait-for-build` keeps its name and its polling step but loses its rc-detection output; `publish-release` -lists it in `needs` with default semantics, so a Build failure blocks publishing (and fails the run) without -sitting in front of the package gauntlet. RC detection moves from a job output to inline -`contains(github.ref_name, '-rc.')` expressions with the same literal-substring semantics the old bash check had. -On a real tag the draft release is now created while Build is still running; `publish-release` flips it public -only after the gate passes, so a failed run can leave behind an unpublished draft, which is invisible to users. - -### Stamp sources with the commit time so same-commit reruns reuse the cache - -`scripts/ci/commit-mtime` sets every tracked file's mtime to the checked-out commit's committer date. The -workflow checkout is depth-1, so the stamp is uniform and deterministic: the same commit always produces the same -mtimes. The rc run builds and saves `v0-pkg*`; the real-tag run on the identical commit restores that cache, sees -no source newer than the cached artifacts, and the release build finishes in seconds instead of re-paying the -leaf-crate compile. Any new commit moves every tracked mtime forward, so cutting a new rc always rebuilds. - -An under-rebuild (cargo wrongly reusing stale artifacts) would require the same package version, the same -Cargo.lock, and a tagged commit whose committer date predates the cached outputs. Real releases always bump the -version in Cargo.toml, which changes the crate fingerprint and forces the rebuild regardless of mtimes; rc fix -commits are created after the previous candidate ran, so their committer dates are newer than its cache. The -remaining exposure is tagging a commit created before the newest cache save for an unchanged version and lock, -which the rc-first process does not produce. If a stale reuse is ever suspected, cut a new rc (new commit, newer -mtimes) or prune the `v0-pkg*` objects in R2. - -### Explicitly unchanged - -Job names, the tag trigger and `-rc.` semantics, the full artifact set per platform, the R2 cache namespaces and -key derivation (no forced re-warm), the item-icons flow and its known Windows download flake playbook -(rerun-with-failed, never retries in the workflow), and the steps of `create-release`, `publish-release`, and -`deploy-pages`. - -## Affected Areas - -- `.github/workflows/release.yml`: job graph and rc-detection wiring; new mtime-stamp step in the package jobs. -- `scripts/ci/commit-mtime`: new script, POSIX sh, GNU and BSD date compatible. -- `docs/process/release.md`: wording for what waits on Build (publishing, no longer packaging). -- Release-only jobs (`create-release`, `publish-release`, `deploy-pages`) skip rc tags, so their rewired - conditions first fire on a real tag; the changes are wiring-only and the steps are untouched. - -## Consequences - -- Projected wall-clock: a real tag becomes max(Build, packaging) plus the publish tail. With packaging legs at - roughly 7 min (macOS, clean), 16 min (Windows, NSIS/WiX bound), and 10 min (Linux), the real tag lands around - 40 minutes today and tracks Build's own wall-clock as it improves. An rc run is bounded by the unavoidable - leaf-crate release compile on macOS at roughly 55 to 60 minutes. Measured numbers are deferred to the next - release cycle. -- A Build failure no longer prevents packaging from running, so a genuinely broken rc burns package-runner - minutes it previously saved; the run still fails via the gate, and rc artifacts were ephemeral anyway. -- `build.rs` embeds a build date; if an rc and its real tag straddle midnight UTC the value changes and the leaf - crate recompiles once. Correctness is unaffected. -- Untracked files keep fresh checkout mtimes. The generated item icons are cargo-packager resources, not compile - inputs, so they do not dirty the build. -- The stamp step depends on tar-preserved mtimes in the R2 cache and cargo's mtime-based freshness; if cargo - moves to checksum freshness the step becomes harmless rather than wrong. diff --git a/docs/design/README.md b/docs/design/README.md index b3b2fa8e..30b7094f 100644 --- a/docs/design/README.md +++ b/docs/design/README.md @@ -59,8 +59,6 @@ ADRs (storage, assets, net worth, outbox, mail, logging, image assets). | [0047] | Scope-Free Always-On Character-Detail Tabs | ![Active][badge-active] | 2026-07-10 | | [0048] | Captain's Log data model and rollup on read | ![Active][badge-active] | 2026-07-13 | | [0049] | Planetary Interaction Colonies Feature | ![Active][badge-active] | 2026-07-13 | -| [0050] | Build CI Gate Folding & Single-Saver R2 Cache | ![Active][badge-active] | 2026-07-22 | -| [0051] | Release Decoupled Packaging, Commit Mtimes | ![Active][badge-active] | 2026-07-22 | ADRs document significant architectural decisions, the context in which they were made, and their consequences. See [Writing ADRs] for the process and template. @@ -114,8 +112,6 @@ ADRs document significant architectural decisions, the context in which they wer [0047]: 0047-scope-free-character-detail-tabs.md [0048]: 0048-captains-log-data-model.md [0049]: 0049-planetary-interaction-colonies-feature.md -[0050]: 0050-build-ci-gate-folding-and-single-saver-cache.md -[0051]: 0051-release-decoupled-packaging-and-commit-time-mtimes.md [badge-active]: https://img.shields.io/badge/Active-green?style=for-the-badge [badge-superseded]: https://img.shields.io/badge/Superseded-orange?style=for-the-badge [Writing ADRs]: ../process/writing-adrs.md diff --git a/docs/process/release.md b/docs/process/release.md index b0ccf6ec..11a5d5be 100644 --- a/docs/process/release.md +++ b/docs/process/release.md @@ -13,9 +13,9 @@ A release is triggered by pushing a version tag (for example `0.6.7`). Two GitHu - **Build** (`.github/workflows/build.yml`) — lint, type/compile check, the test suite, the telemetry contract conformance job, and a packaged build on Linux, macOS, and Windows. -- **Release** (`.github/workflows/release.yml`) — runs the full package gauntlet (macOS notarization, Windows - installers, Linux AppImage/Flatpak/pacman) in parallel with Build. For a real release it also creates the GitHub - release and, once Build has passed, generates the updater manifest, publishes the release, and deploys the site. +- **Release** (`.github/workflows/release.yml`) — waits for Build to pass, then runs the full package gauntlet + (macOS notarization, Windows installers, Linux AppImage/Flatpak/pacman). For a real release it also creates the + GitHub release, generates the updater manifest, and deploys the site. We used to push the version tag directly. When a release failed, we would delete the tag, push a fix commit, and re-create the **same** tag pointing at the new commit. That is hostile to every version-control tool and to anyone diff --git a/apps/desktop/migrations/0001_create_sync_ledger.sql b/migrations/0001_create_sync_ledger.sql similarity index 100% rename from apps/desktop/migrations/0001_create_sync_ledger.sql rename to migrations/0001_create_sync_ledger.sql diff --git a/apps/desktop/migrations/0002_create_items.sql b/migrations/0002_create_items.sql similarity index 100% rename from apps/desktop/migrations/0002_create_items.sql rename to migrations/0002_create_items.sql diff --git a/apps/desktop/migrations/0003_create_orgs.sql b/migrations/0003_create_orgs.sql similarity index 100% rename from apps/desktop/migrations/0003_create_orgs.sql rename to migrations/0003_create_orgs.sql diff --git a/apps/desktop/migrations/0004_create_maps.sql b/migrations/0004_create_maps.sql similarity index 100% rename from apps/desktop/migrations/0004_create_maps.sql rename to migrations/0004_create_maps.sql diff --git a/apps/desktop/migrations/0005_create_skill_metadata.sql b/migrations/0005_create_skill_metadata.sql similarity index 100% rename from apps/desktop/migrations/0005_create_skill_metadata.sql rename to migrations/0005_create_skill_metadata.sql diff --git a/apps/desktop/migrations/0006_create_certificates.sql b/migrations/0006_create_certificates.sql similarity index 100% rename from apps/desktop/migrations/0006_create_certificates.sql rename to migrations/0006_create_certificates.sql diff --git a/apps/desktop/migrations/0007_create_dogma_attributes.sql b/migrations/0007_create_dogma_attributes.sql similarity index 100% rename from apps/desktop/migrations/0007_create_dogma_attributes.sql rename to migrations/0007_create_dogma_attributes.sql diff --git a/apps/desktop/migrations/0008_create_http_cache.sql b/migrations/0008_create_http_cache.sql similarity index 100% rename from apps/desktop/migrations/0008_create_http_cache.sql rename to migrations/0008_create_http_cache.sql diff --git a/apps/desktop/migrations/0009_create_credentials.sql b/migrations/0009_create_credentials.sql similarity index 100% rename from apps/desktop/migrations/0009_create_credentials.sql rename to migrations/0009_create_credentials.sql diff --git a/apps/desktop/migrations/0010_create_outbox.sql b/migrations/0010_create_outbox.sql similarity index 100% rename from apps/desktop/migrations/0010_create_outbox.sql rename to migrations/0010_create_outbox.sql diff --git a/apps/desktop/migrations/0011_create_tags.sql b/migrations/0011_create_tags.sql similarity index 100% rename from apps/desktop/migrations/0011_create_tags.sql rename to migrations/0011_create_tags.sql diff --git a/apps/desktop/migrations/0012_create_character_attributes.sql b/migrations/0012_create_character_attributes.sql similarity index 100% rename from apps/desktop/migrations/0012_create_character_attributes.sql rename to migrations/0012_create_character_attributes.sql diff --git a/apps/desktop/migrations/0013_create_character_implants.sql b/migrations/0013_create_character_implants.sql similarity index 100% rename from apps/desktop/migrations/0013_create_character_implants.sql rename to migrations/0013_create_character_implants.sql diff --git a/apps/desktop/migrations/0014_create_character_skills.sql b/migrations/0014_create_character_skills.sql similarity index 100% rename from apps/desktop/migrations/0014_create_character_skills.sql rename to migrations/0014_create_character_skills.sql diff --git a/apps/desktop/migrations/0015_create_character_skillqueue.sql b/migrations/0015_create_character_skillqueue.sql similarity index 100% rename from apps/desktop/migrations/0015_create_character_skillqueue.sql rename to migrations/0015_create_character_skillqueue.sql diff --git a/apps/desktop/migrations/0016_create_character_telemetry.sql b/migrations/0016_create_character_telemetry.sql similarity index 100% rename from apps/desktop/migrations/0016_create_character_telemetry.sql rename to migrations/0016_create_character_telemetry.sql diff --git a/apps/desktop/migrations/0017_create_character_clones.sql b/migrations/0017_create_character_clones.sql similarity index 100% rename from apps/desktop/migrations/0017_create_character_clones.sql rename to migrations/0017_create_character_clones.sql diff --git a/apps/desktop/migrations/0018_create_character_jump_clones.sql b/migrations/0018_create_character_jump_clones.sql similarity index 100% rename from apps/desktop/migrations/0018_create_character_jump_clones.sql rename to migrations/0018_create_character_jump_clones.sql diff --git a/apps/desktop/migrations/0019_create_character_clone_implants.sql b/migrations/0019_create_character_clone_implants.sql similarity index 100% rename from apps/desktop/migrations/0019_create_character_clone_implants.sql rename to migrations/0019_create_character_clone_implants.sql diff --git a/apps/desktop/migrations/0020_create_character_contacts.sql b/migrations/0020_create_character_contacts.sql similarity index 100% rename from apps/desktop/migrations/0020_create_character_contacts.sql rename to migrations/0020_create_character_contacts.sql diff --git a/apps/desktop/migrations/0021_create_character_contact_labels.sql b/migrations/0021_create_character_contact_labels.sql similarity index 100% rename from apps/desktop/migrations/0021_create_character_contact_labels.sql rename to migrations/0021_create_character_contact_labels.sql diff --git a/apps/desktop/migrations/0022_create_character_standings.sql b/migrations/0022_create_character_standings.sql similarity index 100% rename from apps/desktop/migrations/0022_create_character_standings.sql rename to migrations/0022_create_character_standings.sql diff --git a/apps/desktop/migrations/0023_create_squads.sql b/migrations/0023_create_squads.sql similarity index 100% rename from apps/desktop/migrations/0023_create_squads.sql rename to migrations/0023_create_squads.sql diff --git a/apps/desktop/migrations/0024_create_corporation_member_roles.sql b/migrations/0024_create_corporation_member_roles.sql similarity index 100% rename from apps/desktop/migrations/0024_create_corporation_member_roles.sql rename to migrations/0024_create_corporation_member_roles.sql diff --git a/apps/desktop/migrations/0025_create_character_killmails.sql b/migrations/0025_create_character_killmails.sql similarity index 100% rename from apps/desktop/migrations/0025_create_character_killmails.sql rename to migrations/0025_create_character_killmails.sql diff --git a/apps/desktop/migrations/0026_create_character_notifications.sql b/migrations/0026_create_character_notifications.sql similarity index 100% rename from apps/desktop/migrations/0026_create_character_notifications.sql rename to migrations/0026_create_character_notifications.sql diff --git a/apps/desktop/migrations/0027_create_skill_plans.sql b/migrations/0027_create_skill_plans.sql similarity index 100% rename from apps/desktop/migrations/0027_create_skill_plans.sql rename to migrations/0027_create_skill_plans.sql diff --git a/apps/desktop/migrations/0028_create_character_assets.sql b/migrations/0028_create_character_assets.sql similarity index 100% rename from apps/desktop/migrations/0028_create_character_assets.sql rename to migrations/0028_create_character_assets.sql diff --git a/apps/desktop/migrations/0029_create_corporation_assets.sql b/migrations/0029_create_corporation_assets.sql similarity index 100% rename from apps/desktop/migrations/0029_create_corporation_assets.sql rename to migrations/0029_create_corporation_assets.sql diff --git a/apps/desktop/migrations/0030_create_abyssal_items.sql b/migrations/0030_create_abyssal_items.sql similarity index 100% rename from apps/desktop/migrations/0030_create_abyssal_items.sql rename to migrations/0030_create_abyssal_items.sql diff --git a/apps/desktop/migrations/0031_create_abyssal_module_stats.sql b/migrations/0031_create_abyssal_module_stats.sql similarity index 100% rename from apps/desktop/migrations/0031_create_abyssal_module_stats.sql rename to migrations/0031_create_abyssal_module_stats.sql diff --git a/apps/desktop/migrations/0032_create_stockpiles.sql b/migrations/0032_create_stockpiles.sql similarity index 100% rename from apps/desktop/migrations/0032_create_stockpiles.sql rename to migrations/0032_create_stockpiles.sql diff --git a/apps/desktop/migrations/0033_create_stockpile_items.sql b/migrations/0033_create_stockpile_items.sql similarity index 100% rename from apps/desktop/migrations/0033_create_stockpile_items.sql rename to migrations/0033_create_stockpile_items.sql diff --git a/apps/desktop/migrations/0034_create_character_wallet_journal.sql b/migrations/0034_create_character_wallet_journal.sql similarity index 100% rename from apps/desktop/migrations/0034_create_character_wallet_journal.sql rename to migrations/0034_create_character_wallet_journal.sql diff --git a/apps/desktop/migrations/0035_create_character_wallet_transaction.sql b/migrations/0035_create_character_wallet_transaction.sql similarity index 100% rename from apps/desktop/migrations/0035_create_character_wallet_transaction.sql rename to migrations/0035_create_character_wallet_transaction.sql diff --git a/apps/desktop/migrations/0036_create_market_orders.sql b/migrations/0036_create_market_orders.sql similarity index 100% rename from apps/desktop/migrations/0036_create_market_orders.sql rename to migrations/0036_create_market_orders.sql diff --git a/apps/desktop/migrations/0037_create_market_prices.sql b/migrations/0037_create_market_prices.sql similarity index 100% rename from apps/desktop/migrations/0037_create_market_prices.sql rename to migrations/0037_create_market_prices.sql diff --git a/apps/desktop/migrations/0038_create_character_contracts.sql b/migrations/0038_create_character_contracts.sql similarity index 100% rename from apps/desktop/migrations/0038_create_character_contracts.sql rename to migrations/0038_create_character_contracts.sql diff --git a/apps/desktop/migrations/0039_create_corporation_wallet_division.sql b/migrations/0039_create_corporation_wallet_division.sql similarity index 100% rename from apps/desktop/migrations/0039_create_corporation_wallet_division.sql rename to migrations/0039_create_corporation_wallet_division.sql diff --git a/apps/desktop/migrations/0040_create_corporation_wallet_journal.sql b/migrations/0040_create_corporation_wallet_journal.sql similarity index 100% rename from apps/desktop/migrations/0040_create_corporation_wallet_journal.sql rename to migrations/0040_create_corporation_wallet_journal.sql diff --git a/apps/desktop/migrations/0041_create_corporation_wallet_transaction.sql b/migrations/0041_create_corporation_wallet_transaction.sql similarity index 100% rename from apps/desktop/migrations/0041_create_corporation_wallet_transaction.sql rename to migrations/0041_create_corporation_wallet_transaction.sql diff --git a/apps/desktop/migrations/0042_create_character_net_worth_snapshot.sql b/migrations/0042_create_character_net_worth_snapshot.sql similarity index 100% rename from apps/desktop/migrations/0042_create_character_net_worth_snapshot.sql rename to migrations/0042_create_character_net_worth_snapshot.sql diff --git a/apps/desktop/migrations/0043_create_corporation_net_worth_snapshot.sql b/migrations/0043_create_corporation_net_worth_snapshot.sql similarity index 100% rename from apps/desktop/migrations/0043_create_corporation_net_worth_snapshot.sql rename to migrations/0043_create_corporation_net_worth_snapshot.sql diff --git a/apps/desktop/migrations/0044_create_type_price_histories.sql b/migrations/0044_create_type_price_histories.sql similarity index 100% rename from apps/desktop/migrations/0044_create_type_price_histories.sql rename to migrations/0044_create_type_price_histories.sql diff --git a/apps/desktop/migrations/0045_create_character_mail.sql b/migrations/0045_create_character_mail.sql similarity index 100% rename from apps/desktop/migrations/0045_create_character_mail.sql rename to migrations/0045_create_character_mail.sql diff --git a/apps/desktop/migrations/0046_create_character_mail_body.sql b/migrations/0046_create_character_mail_body.sql similarity index 100% rename from apps/desktop/migrations/0046_create_character_mail_body.sql rename to migrations/0046_create_character_mail_body.sql diff --git a/apps/desktop/migrations/0047_create_character_mail_recipients.sql b/migrations/0047_create_character_mail_recipients.sql similarity index 100% rename from apps/desktop/migrations/0047_create_character_mail_recipients.sql rename to migrations/0047_create_character_mail_recipients.sql diff --git a/apps/desktop/migrations/0048_create_character_mail_labels.sql b/migrations/0048_create_character_mail_labels.sql similarity index 100% rename from apps/desktop/migrations/0048_create_character_mail_labels.sql rename to migrations/0048_create_character_mail_labels.sql diff --git a/apps/desktop/migrations/0049_create_character_mail_label_membership.sql b/migrations/0049_create_character_mail_label_membership.sql similarity index 100% rename from apps/desktop/migrations/0049_create_character_mail_label_membership.sql rename to migrations/0049_create_character_mail_label_membership.sql diff --git a/apps/desktop/migrations/0050_create_mail_triage.sql b/migrations/0050_create_mail_triage.sql similarity index 100% rename from apps/desktop/migrations/0050_create_mail_triage.sql rename to migrations/0050_create_mail_triage.sql diff --git a/apps/desktop/migrations/0051_create_mail_snooze.sql b/migrations/0051_create_mail_snooze.sql similarity index 100% rename from apps/desktop/migrations/0051_create_mail_snooze.sql rename to migrations/0051_create_mail_snooze.sql diff --git a/apps/desktop/migrations/0052_create_mail_folder_assignment.sql b/migrations/0052_create_mail_folder_assignment.sql similarity index 100% rename from apps/desktop/migrations/0052_create_mail_folder_assignment.sql rename to migrations/0052_create_mail_folder_assignment.sql diff --git a/apps/desktop/migrations/0053_create_character_state.sql b/migrations/0053_create_character_state.sql similarity index 100% rename from apps/desktop/migrations/0053_create_character_state.sql rename to migrations/0053_create_character_state.sql diff --git a/apps/desktop/migrations/0054_create_owned_characters.sql b/migrations/0054_create_owned_characters.sql similarity index 100% rename from apps/desktop/migrations/0054_create_owned_characters.sql rename to migrations/0054_create_owned_characters.sql diff --git a/apps/desktop/migrations/0055_create_owned_corporations.sql b/migrations/0055_create_owned_corporations.sql similarity index 100% rename from apps/desktop/migrations/0055_create_owned_corporations.sql rename to migrations/0055_create_owned_corporations.sql diff --git a/apps/desktop/migrations/0056_create_active_clone_with_implants.sql b/migrations/0056_create_active_clone_with_implants.sql similarity index 100% rename from apps/desktop/migrations/0056_create_active_clone_with_implants.sql rename to migrations/0056_create_active_clone_with_implants.sql diff --git a/apps/desktop/migrations/0057_create_character_contract_escrow.sql b/migrations/0057_create_character_contract_escrow.sql similarity index 100% rename from apps/desktop/migrations/0057_create_character_contract_escrow.sql rename to migrations/0057_create_character_contract_escrow.sql diff --git a/apps/desktop/migrations/0058_create_character_net_worth_snapshot_combined.sql b/migrations/0058_create_character_net_worth_snapshot_combined.sql similarity index 100% rename from apps/desktop/migrations/0058_create_character_net_worth_snapshot_combined.sql rename to migrations/0058_create_character_net_worth_snapshot_combined.sql diff --git a/apps/desktop/migrations/0059_create_character_wallet_period_summary.sql b/migrations/0059_create_character_wallet_period_summary.sql similarity index 100% rename from apps/desktop/migrations/0059_create_character_wallet_period_summary.sql rename to migrations/0059_create_character_wallet_period_summary.sql diff --git a/apps/desktop/migrations/0060_create_mail_unified.sql b/migrations/0060_create_mail_unified.sql similarity index 100% rename from apps/desktop/migrations/0060_create_mail_unified.sql rename to migrations/0060_create_mail_unified.sql diff --git a/apps/desktop/migrations/0061_create_character_financials.sql b/migrations/0061_create_character_financials.sql similarity index 100% rename from apps/desktop/migrations/0061_create_character_financials.sql rename to migrations/0061_create_character_financials.sql diff --git a/apps/desktop/migrations/0062_add_killmail_value_provenance.sql b/migrations/0062_add_killmail_value_provenance.sql similarity index 100% rename from apps/desktop/migrations/0062_add_killmail_value_provenance.sql rename to migrations/0062_add_killmail_value_provenance.sql diff --git a/apps/desktop/migrations/0063_create_saved_asset_filters.sql b/migrations/0063_create_saved_asset_filters.sql similarity index 100% rename from apps/desktop/migrations/0063_create_saved_asset_filters.sql rename to migrations/0063_create_saved_asset_filters.sql diff --git a/apps/desktop/migrations/0064_unify_asset_name.sql b/migrations/0064_unify_asset_name.sql similarity index 100% rename from apps/desktop/migrations/0064_unify_asset_name.sql rename to migrations/0064_unify_asset_name.sql diff --git a/apps/desktop/migrations/0065_create_character_calendar.sql b/migrations/0065_create_character_calendar.sql similarity index 100% rename from apps/desktop/migrations/0065_create_character_calendar.sql rename to migrations/0065_create_character_calendar.sql diff --git a/apps/desktop/migrations/0066_create_character_calendar_attendees.sql b/migrations/0066_create_character_calendar_attendees.sql similarity index 100% rename from apps/desktop/migrations/0066_create_character_calendar_attendees.sql rename to migrations/0066_create_character_calendar_attendees.sql diff --git a/apps/desktop/migrations/0067_create_npc_agents.sql b/migrations/0067_create_npc_agents.sql similarity index 100% rename from apps/desktop/migrations/0067_create_npc_agents.sql rename to migrations/0067_create_npc_agents.sql diff --git a/apps/desktop/migrations/0068_create_character_industry_jobs.sql b/migrations/0068_create_character_industry_jobs.sql similarity index 100% rename from apps/desktop/migrations/0068_create_character_industry_jobs.sql rename to migrations/0068_create_character_industry_jobs.sql diff --git a/apps/desktop/migrations/0069_create_corporation_industry_jobs.sql b/migrations/0069_create_corporation_industry_jobs.sql similarity index 100% rename from apps/desktop/migrations/0069_create_corporation_industry_jobs.sql rename to migrations/0069_create_corporation_industry_jobs.sql diff --git a/apps/desktop/migrations/0070_create_character_blueprints.sql b/migrations/0070_create_character_blueprints.sql similarity index 100% rename from apps/desktop/migrations/0070_create_character_blueprints.sql rename to migrations/0070_create_character_blueprints.sql diff --git a/apps/desktop/migrations/0071_create_corporation_blueprints.sql b/migrations/0071_create_corporation_blueprints.sql similarity index 100% rename from apps/desktop/migrations/0071_create_corporation_blueprints.sql rename to migrations/0071_create_corporation_blueprints.sql diff --git a/apps/desktop/migrations/0072_create_blueprint_activity_products.sql b/migrations/0072_create_blueprint_activity_products.sql similarity index 100% rename from apps/desktop/migrations/0072_create_blueprint_activity_products.sql rename to migrations/0072_create_blueprint_activity_products.sql diff --git a/apps/desktop/migrations/0073_create_blueprint_activity_materials.sql b/migrations/0073_create_blueprint_activity_materials.sql similarity index 100% rename from apps/desktop/migrations/0073_create_blueprint_activity_materials.sql rename to migrations/0073_create_blueprint_activity_materials.sql diff --git a/apps/desktop/migrations/0074_create_killmail_detail.sql b/migrations/0074_create_killmail_detail.sql similarity index 100% rename from apps/desktop/migrations/0074_create_killmail_detail.sql rename to migrations/0074_create_killmail_detail.sql diff --git a/apps/desktop/migrations/0075_create_blueprint_activity_meta.sql b/migrations/0075_create_blueprint_activity_meta.sql similarity index 100% rename from apps/desktop/migrations/0075_create_blueprint_activity_meta.sql rename to migrations/0075_create_blueprint_activity_meta.sql diff --git a/apps/desktop/migrations/0076_create_industry_cost_indices.sql b/migrations/0076_create_industry_cost_indices.sql similarity index 100% rename from apps/desktop/migrations/0076_create_industry_cost_indices.sql rename to migrations/0076_create_industry_cost_indices.sql diff --git a/apps/desktop/migrations/0077_create_industry_plans.sql b/migrations/0077_create_industry_plans.sql similarity index 100% rename from apps/desktop/migrations/0077_create_industry_plans.sql rename to migrations/0077_create_industry_plans.sql diff --git a/apps/desktop/migrations/0078_create_industry_plan_types.sql b/migrations/0078_create_industry_plan_types.sql similarity index 100% rename from apps/desktop/migrations/0078_create_industry_plan_types.sql rename to migrations/0078_create_industry_plan_types.sql diff --git a/apps/desktop/migrations/0079_add_credential_reauth_status.sql b/migrations/0079_add_credential_reauth_status.sql similarity index 100% rename from apps/desktop/migrations/0079_add_credential_reauth_status.sql rename to migrations/0079_add_credential_reauth_status.sql diff --git a/apps/desktop/migrations/0080_create_pinned_structures.sql b/migrations/0080_create_pinned_structures.sql similarity index 100% rename from apps/desktop/migrations/0080_create_pinned_structures.sql rename to migrations/0080_create_pinned_structures.sql diff --git a/apps/desktop/migrations/0081_create_corporation_standings.sql b/migrations/0081_create_corporation_standings.sql similarity index 100% rename from apps/desktop/migrations/0081_create_corporation_standings.sql rename to migrations/0081_create_corporation_standings.sql diff --git a/apps/desktop/migrations/0082_create_corporation_contacts.sql b/migrations/0082_create_corporation_contacts.sql similarity index 100% rename from apps/desktop/migrations/0082_create_corporation_contacts.sql rename to migrations/0082_create_corporation_contacts.sql diff --git a/apps/desktop/migrations/0083_create_corporation_killmails.sql b/migrations/0083_create_corporation_killmails.sql similarity index 100% rename from apps/desktop/migrations/0083_create_corporation_killmails.sql rename to migrations/0083_create_corporation_killmails.sql diff --git a/apps/desktop/migrations/0084_create_contract_detail.sql b/migrations/0084_create_contract_detail.sql similarity index 100% rename from apps/desktop/migrations/0084_create_contract_detail.sql rename to migrations/0084_create_contract_detail.sql diff --git a/apps/desktop/migrations/0085_create_moons.sql b/migrations/0085_create_moons.sql similarity index 100% rename from apps/desktop/migrations/0085_create_moons.sql rename to migrations/0085_create_moons.sql diff --git a/apps/desktop/migrations/0086_create_corporation_mining_extractions.sql b/migrations/0086_create_corporation_mining_extractions.sql similarity index 100% rename from apps/desktop/migrations/0086_create_corporation_mining_extractions.sql rename to migrations/0086_create_corporation_mining_extractions.sql diff --git a/apps/desktop/migrations/0087_add_industry_plan_types_use_stock.sql b/migrations/0087_add_industry_plan_types_use_stock.sql similarity index 100% rename from apps/desktop/migrations/0087_add_industry_plan_types_use_stock.sql rename to migrations/0087_add_industry_plan_types_use_stock.sql diff --git a/apps/desktop/migrations/0088_add_hot_path_indexes.sql b/migrations/0088_add_hot_path_indexes.sql similarity index 100% rename from apps/desktop/migrations/0088_add_hot_path_indexes.sql rename to migrations/0088_add_hot_path_indexes.sql diff --git a/apps/desktop/migrations/0089_stockpile_character_scope.sql b/migrations/0089_stockpile_character_scope.sql similarity index 100% rename from apps/desktop/migrations/0089_stockpile_character_scope.sql rename to migrations/0089_stockpile_character_scope.sql diff --git a/apps/desktop/migrations/0090_drop_mail_triage_pin.sql b/migrations/0090_drop_mail_triage_pin.sql similarity index 100% rename from apps/desktop/migrations/0090_drop_mail_triage_pin.sql rename to migrations/0090_drop_mail_triage_pin.sql diff --git a/apps/desktop/migrations/0091_add_mail_folder_assignment_assigned_at.sql b/migrations/0091_add_mail_folder_assignment_assigned_at.sql similarity index 100% rename from apps/desktop/migrations/0091_add_mail_folder_assignment_assigned_at.sql rename to migrations/0091_add_mail_folder_assignment_assigned_at.sql diff --git a/apps/desktop/migrations/0092_create_mail_drafts.sql b/migrations/0092_create_mail_drafts.sql similarity index 100% rename from apps/desktop/migrations/0092_create_mail_drafts.sql rename to migrations/0092_create_mail_drafts.sql diff --git a/apps/desktop/migrations/0093_create_budget.sql b/migrations/0093_create_budget.sql similarity index 100% rename from apps/desktop/migrations/0093_create_budget.sql rename to migrations/0093_create_budget.sql diff --git a/apps/desktop/migrations/0094_create_budget_entry_assignments.sql b/migrations/0094_create_budget_entry_assignments.sql similarity index 100% rename from apps/desktop/migrations/0094_create_budget_entry_assignments.sql rename to migrations/0094_create_budget_entry_assignments.sql diff --git a/apps/desktop/migrations/0095_create_budget_scope_seeded.sql b/migrations/0095_create_budget_scope_seeded.sql similarity index 100% rename from apps/desktop/migrations/0095_create_budget_scope_seeded.sql rename to migrations/0095_create_budget_scope_seeded.sql diff --git a/apps/desktop/migrations/0096_add_market_prices_source.sql b/migrations/0096_add_market_prices_source.sql similarity index 100% rename from apps/desktop/migrations/0096_add_market_prices_source.sql rename to migrations/0096_add_market_prices_source.sql diff --git a/apps/desktop/migrations/0097_recreate_character_financials_muta.sql b/migrations/0097_recreate_character_financials_muta.sql similarity index 100% rename from apps/desktop/migrations/0097_recreate_character_financials_muta.sql rename to migrations/0097_recreate_character_financials_muta.sql diff --git a/apps/desktop/migrations/0098_create_corporation_abyssal_items.sql b/migrations/0098_create_corporation_abyssal_items.sql similarity index 100% rename from apps/desktop/migrations/0098_create_corporation_abyssal_items.sql rename to migrations/0098_create_corporation_abyssal_items.sql diff --git a/apps/desktop/migrations/0099_add_budget_entry_assignment_owner.sql b/migrations/0099_add_budget_entry_assignment_owner.sql similarity index 100% rename from apps/desktop/migrations/0099_add_budget_entry_assignment_owner.sql rename to migrations/0099_add_budget_entry_assignment_owner.sql diff --git a/apps/desktop/migrations/0100_create_budget_rules.sql b/migrations/0100_create_budget_rules.sql similarity index 100% rename from apps/desktop/migrations/0100_create_budget_rules.sql rename to migrations/0100_create_budget_rules.sql diff --git a/apps/desktop/migrations/0101_create_industry_plan_segments.sql b/migrations/0101_create_industry_plan_segments.sql similarity index 100% rename from apps/desktop/migrations/0101_create_industry_plan_segments.sql rename to migrations/0101_create_industry_plan_segments.sql diff --git a/apps/desktop/migrations/0102_repair_budget_assignments.sql b/migrations/0102_repair_budget_assignments.sql similarity index 100% rename from apps/desktop/migrations/0102_repair_budget_assignments.sql rename to migrations/0102_repair_budget_assignments.sql diff --git a/apps/desktop/migrations/0103_create_notifications.sql b/migrations/0103_create_notifications.sql similarity index 100% rename from apps/desktop/migrations/0103_create_notifications.sql rename to migrations/0103_create_notifications.sql diff --git a/apps/desktop/migrations/0104_backfill_split_owner_assignments.sql b/migrations/0104_backfill_split_owner_assignments.sql similarity index 100% rename from apps/desktop/migrations/0104_backfill_split_owner_assignments.sql rename to migrations/0104_backfill_split_owner_assignments.sql diff --git a/apps/desktop/migrations/0105_add_notifications_keyset_index.sql b/migrations/0105_add_notifications_keyset_index.sql similarity index 100% rename from apps/desktop/migrations/0105_add_notifications_keyset_index.sql rename to migrations/0105_add_notifications_keyset_index.sql diff --git a/apps/desktop/migrations/0106_create_type_materials.sql b/migrations/0106_create_type_materials.sql similarity index 100% rename from apps/desktop/migrations/0106_create_type_materials.sql rename to migrations/0106_create_type_materials.sql diff --git a/apps/desktop/migrations/0107_purge_non_participant_killmails.sql b/migrations/0107_purge_non_participant_killmails.sql similarity index 100% rename from apps/desktop/migrations/0107_purge_non_participant_killmails.sql rename to migrations/0107_purge_non_participant_killmails.sql diff --git a/apps/desktop/migrations/0108_scope_tags.sql b/migrations/0108_scope_tags.sql similarity index 100% rename from apps/desktop/migrations/0108_scope_tags.sql rename to migrations/0108_scope_tags.sql diff --git a/apps/desktop/migrations/0109_dedupe_scoped_tags.sql b/migrations/0109_dedupe_scoped_tags.sql similarity index 100% rename from apps/desktop/migrations/0109_dedupe_scoped_tags.sql rename to migrations/0109_dedupe_scoped_tags.sql diff --git a/apps/desktop/migrations/0110_rekey_wallet_journal_per_wallet.sql b/migrations/0110_rekey_wallet_journal_per_wallet.sql similarity index 100% rename from apps/desktop/migrations/0110_rekey_wallet_journal_per_wallet.sql rename to migrations/0110_rekey_wallet_journal_per_wallet.sql diff --git a/apps/desktop/migrations/0111_create_industry_facility_storage.sql b/migrations/0111_create_industry_facility_storage.sql similarity index 100% rename from apps/desktop/migrations/0111_create_industry_facility_storage.sql rename to migrations/0111_create_industry_facility_storage.sql diff --git a/apps/desktop/migrations/0112_budget_journal_only.sql b/migrations/0112_budget_journal_only.sql similarity index 100% rename from apps/desktop/migrations/0112_budget_journal_only.sql rename to migrations/0112_budget_journal_only.sql diff --git a/apps/desktop/migrations/0113_create_sync_lists.sql b/migrations/0113_create_sync_lists.sql similarity index 100% rename from apps/desktop/migrations/0113_create_sync_lists.sql rename to migrations/0113_create_sync_lists.sql diff --git a/apps/desktop/migrations/0114_skill_plan_templates.sql b/migrations/0114_skill_plan_templates.sql similarity index 100% rename from apps/desktop/migrations/0114_skill_plan_templates.sql rename to migrations/0114_skill_plan_templates.sql diff --git a/apps/desktop/migrations/0115_facility_intel_snapshot.sql b/migrations/0115_facility_intel_snapshot.sql similarity index 100% rename from apps/desktop/migrations/0115_facility_intel_snapshot.sql rename to migrations/0115_facility_intel_snapshot.sql diff --git a/apps/desktop/migrations/0116_drop_pinned_structures.sql b/migrations/0116_drop_pinned_structures.sql similarity index 100% rename from apps/desktop/migrations/0116_drop_pinned_structures.sql rename to migrations/0116_drop_pinned_structures.sql diff --git a/apps/desktop/migrations/0117_skill_plan_milestones.sql b/migrations/0117_skill_plan_milestones.sql similarity index 100% rename from apps/desktop/migrations/0117_skill_plan_milestones.sql rename to migrations/0117_skill_plan_milestones.sql diff --git a/apps/desktop/migrations/0118_skill_plan_position.sql b/migrations/0118_skill_plan_position.sql similarity index 100% rename from apps/desktop/migrations/0118_skill_plan_position.sql rename to migrations/0118_skill_plan_position.sql diff --git a/apps/desktop/migrations/0119_captains_log.sql b/migrations/0119_captains_log.sql similarity index 100% rename from apps/desktop/migrations/0119_captains_log.sql rename to migrations/0119_captains_log.sql diff --git a/apps/desktop/migrations/0120_killmail_report.sql b/migrations/0120_killmail_report.sql similarity index 100% rename from apps/desktop/migrations/0120_killmail_report.sql rename to migrations/0120_killmail_report.sql diff --git a/apps/desktop/migrations/0121_skill_completion.sql b/migrations/0121_skill_completion.sql similarity index 100% rename from apps/desktop/migrations/0121_skill_completion.sql rename to migrations/0121_skill_completion.sql diff --git a/apps/desktop/migrations/0122_calendar_event_note.sql b/migrations/0122_calendar_event_note.sql similarity index 100% rename from apps/desktop/migrations/0122_calendar_event_note.sql rename to migrations/0122_calendar_event_note.sql diff --git a/apps/desktop/migrations/0123_field_notes.sql b/migrations/0123_field_notes.sql similarity index 100% rename from apps/desktop/migrations/0123_field_notes.sql rename to migrations/0123_field_notes.sql diff --git a/apps/desktop/migrations/0124_combined_net_worth_include_corporations.sql b/migrations/0124_combined_net_worth_include_corporations.sql similarity index 100% rename from apps/desktop/migrations/0124_combined_net_worth_include_corporations.sql rename to migrations/0124_combined_net_worth_include_corporations.sql diff --git a/apps/desktop/migrations/0125_captains_log_prompt_config.sql b/migrations/0125_captains_log_prompt_config.sql similarity index 100% rename from apps/desktop/migrations/0125_captains_log_prompt_config.sql rename to migrations/0125_captains_log_prompt_config.sql diff --git a/apps/desktop/migrations/0126_create_corporation_hangar_division.sql b/migrations/0126_create_corporation_hangar_division.sql similarity index 100% rename from apps/desktop/migrations/0126_create_corporation_hangar_division.sql rename to migrations/0126_create_corporation_hangar_division.sql diff --git a/apps/desktop/migrations/0127_add_asset_value_to_corporation_net_worth_snapshot.sql b/migrations/0127_add_asset_value_to_corporation_net_worth_snapshot.sql similarity index 100% rename from apps/desktop/migrations/0127_add_asset_value_to_corporation_net_worth_snapshot.sql rename to migrations/0127_add_asset_value_to_corporation_net_worth_snapshot.sql diff --git a/apps/desktop/migrations/0128_combined_net_worth_value_corp_assets.sql b/migrations/0128_combined_net_worth_value_corp_assets.sql similarity index 100% rename from apps/desktop/migrations/0128_combined_net_worth_value_corp_assets.sql rename to migrations/0128_combined_net_worth_value_corp_assets.sql diff --git a/apps/desktop/migrations/0129_create_objectives.sql b/migrations/0129_create_objectives.sql similarity index 100% rename from apps/desktop/migrations/0129_create_objectives.sql rename to migrations/0129_create_objectives.sql diff --git a/apps/desktop/migrations/0130_create_character_dossier.sql b/migrations/0130_create_character_dossier.sql similarity index 100% rename from apps/desktop/migrations/0130_create_character_dossier.sql rename to migrations/0130_create_character_dossier.sql diff --git a/apps/desktop/migrations/0131_create_character_sp_snapshot.sql b/migrations/0131_create_character_sp_snapshot.sql similarity index 100% rename from apps/desktop/migrations/0131_create_character_sp_snapshot.sql rename to migrations/0131_create_character_sp_snapshot.sql diff --git a/apps/desktop/migrations/0132_create_industry_completion.sql b/migrations/0132_create_industry_completion.sql similarity index 100% rename from apps/desktop/migrations/0132_create_industry_completion.sql rename to migrations/0132_create_industry_completion.sql diff --git a/apps/desktop/migrations/0133_add_eft_to_facility_intel.sql b/migrations/0133_add_eft_to_facility_intel.sql similarity index 100% rename from apps/desktop/migrations/0133_add_eft_to_facility_intel.sql rename to migrations/0133_add_eft_to_facility_intel.sql diff --git a/apps/desktop/migrations/0134_create_market_default.sql b/migrations/0134_create_market_default.sql similarity index 100% rename from apps/desktop/migrations/0134_create_market_default.sql rename to migrations/0134_create_market_default.sql diff --git a/apps/desktop/migrations/0135_create_market_watchlist.sql b/migrations/0135_create_market_watchlist.sql similarity index 100% rename from apps/desktop/migrations/0135_create_market_watchlist.sql rename to migrations/0135_create_market_watchlist.sql diff --git a/apps/desktop/migrations/0136_create_market_alert_state.sql b/migrations/0136_create_market_alert_state.sql similarity index 100% rename from apps/desktop/migrations/0136_create_market_alert_state.sql rename to migrations/0136_create_market_alert_state.sql diff --git a/apps/desktop/migrations/0137_create_corporation_market_orders.sql b/migrations/0137_create_corporation_market_orders.sql similarity index 100% rename from apps/desktop/migrations/0137_create_corporation_market_orders.sql rename to migrations/0137_create_corporation_market_orders.sql diff --git a/apps/desktop/migrations/0138_create_character_planets.sql b/migrations/0138_create_character_planets.sql similarity index 100% rename from apps/desktop/migrations/0138_create_character_planets.sql rename to migrations/0138_create_character_planets.sql diff --git a/apps/desktop/migrations/0139_create_character_planet_pins.sql b/migrations/0139_create_character_planet_pins.sql similarity index 100% rename from apps/desktop/migrations/0139_create_character_planet_pins.sql rename to migrations/0139_create_character_planet_pins.sql diff --git a/apps/desktop/migrations/0140_create_character_planet_pin_contents.sql b/migrations/0140_create_character_planet_pin_contents.sql similarity index 100% rename from apps/desktop/migrations/0140_create_character_planet_pin_contents.sql rename to migrations/0140_create_character_planet_pin_contents.sql diff --git a/apps/desktop/migrations/0141_create_character_planet_routes.sql b/migrations/0141_create_character_planet_routes.sql similarity index 100% rename from apps/desktop/migrations/0141_create_character_planet_routes.sql rename to migrations/0141_create_character_planet_routes.sql diff --git a/apps/desktop/migrations/0142_create_character_planet_links.sql b/migrations/0142_create_character_planet_links.sql similarity index 100% rename from apps/desktop/migrations/0142_create_character_planet_links.sql rename to migrations/0142_create_character_planet_links.sql diff --git a/apps/desktop/migrations/0143_create_planet_schematics.sql b/migrations/0143_create_planet_schematics.sql similarity index 100% rename from apps/desktop/migrations/0143_create_planet_schematics.sql rename to migrations/0143_create_planet_schematics.sql diff --git a/apps/desktop/migrations/0144_create_planet_schematic_types.sql b/migrations/0144_create_planet_schematic_types.sql similarity index 100% rename from apps/desktop/migrations/0144_create_planet_schematic_types.sql rename to migrations/0144_create_planet_schematic_types.sql diff --git a/apps/desktop/migrations/0145_create_structure_state.sql b/migrations/0145_create_structure_state.sql similarity index 100% rename from apps/desktop/migrations/0145_create_structure_state.sql rename to migrations/0145_create_structure_state.sql diff --git a/apps/desktop/migrations/0146_create_customs_offices.sql b/migrations/0146_create_customs_offices.sql similarity index 100% rename from apps/desktop/migrations/0146_create_customs_offices.sql rename to migrations/0146_create_customs_offices.sql diff --git a/apps/desktop/migrations/0147_add_watch_location_scope.sql b/migrations/0147_add_watch_location_scope.sql similarity index 100% rename from apps/desktop/migrations/0147_add_watch_location_scope.sql rename to migrations/0147_add_watch_location_scope.sql diff --git a/apps/desktop/migrations/0148_create_market_comparison.sql b/migrations/0148_create_market_comparison.sql similarity index 100% rename from apps/desktop/migrations/0148_create_market_comparison.sql rename to migrations/0148_create_market_comparison.sql diff --git a/apps/desktop/migrations/0149_add_is_corporation_to_market_orders.sql b/migrations/0149_add_is_corporation_to_market_orders.sql similarity index 100% rename from apps/desktop/migrations/0149_add_is_corporation_to_market_orders.sql rename to migrations/0149_add_is_corporation_to_market_orders.sql diff --git a/apps/desktop/migrations/0150_recreate_character_financials_exclude_corp_escrow.sql b/migrations/0150_recreate_character_financials_exclude_corp_escrow.sql similarity index 100% rename from apps/desktop/migrations/0150_recreate_character_financials_exclude_corp_escrow.sql rename to migrations/0150_recreate_character_financials_exclude_corp_escrow.sql diff --git a/apps/desktop/migrations/0151_add_market_watchlist_sort_order.sql b/migrations/0151_add_market_watchlist_sort_order.sql similarity index 100% rename from apps/desktop/migrations/0151_add_market_watchlist_sort_order.sql rename to migrations/0151_add_market_watchlist_sort_order.sql diff --git a/apps/desktop/migrations/0152_create_market_cart.sql b/migrations/0152_create_market_cart.sql similarity index 100% rename from apps/desktop/migrations/0152_create_market_cart.sql rename to migrations/0152_create_market_cart.sql diff --git a/apps/desktop/migrations/0153_create_market_comparison_pins.sql b/migrations/0153_create_market_comparison_pins.sql similarity index 100% rename from apps/desktop/migrations/0153_create_market_comparison_pins.sql rename to migrations/0153_create_market_comparison_pins.sql diff --git a/apps/desktop/migrations/0154_create_market_lot_dismissal.sql b/migrations/0154_create_market_lot_dismissal.sql similarity index 100% rename from apps/desktop/migrations/0154_create_market_lot_dismissal.sql rename to migrations/0154_create_market_lot_dismissal.sql diff --git a/apps/desktop/migrations/0155_drop_market_watchlist_character_id.sql b/migrations/0155_drop_market_watchlist_character_id.sql similarity index 100% rename from apps/desktop/migrations/0155_drop_market_watchlist_character_id.sql rename to migrations/0155_drop_market_watchlist_character_id.sql diff --git a/apps/desktop/migrations/0156_drop_market_comparison.sql b/migrations/0156_drop_market_comparison.sql similarity index 100% rename from apps/desktop/migrations/0156_drop_market_comparison.sql rename to migrations/0156_drop_market_comparison.sql diff --git a/apps/desktop/migrations/0157_create_observed_market_orders.sql b/migrations/0157_create_observed_market_orders.sql similarity index 100% rename from apps/desktop/migrations/0157_create_observed_market_orders.sql rename to migrations/0157_create_observed_market_orders.sql diff --git a/scripts/ci/commit-mtime b/scripts/ci/commit-mtime deleted file mode 100755 index 754e83b3..00000000 --- a/scripts/ci/commit-mtime +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env sh -#MISE description="Stamp every tracked file's mtime with the checked-out commit's committer date" - -set -e - -export TZ=UTC - -ts="$(git log -1 --format=%ct)" -stamp="$(date -d "@${ts}" +%Y%m%d%H%M.%S 2>/dev/null || date -r "${ts}" +%Y%m%d%H%M.%S)" -git ls-files -z | xargs -0 touch -t "${stamp}" -echo "commit-mtime: stamped tracked files with ${stamp} (UTC)" diff --git a/scripts/ci/rust-cache b/scripts/ci/rust-cache index 9d7317d7..8f57a10a 100755 --- a/scripts/ci/rust-cache +++ b/scripts/ci/rust-cache @@ -66,17 +66,6 @@ save_part() { part="$1" base="$2" shift 2 - key="${dir}/${key_base}.${part}.tar.gz" - - # The key already embeds everything the contents depend on (OS + rustc + Cargo.lock), - # so an existing object is still valid and re-uploading it only burns 15-20 minutes - # re-tarring an unchanged dependency graph; source-only drift rebuilds incrementally - # on restore. Set POD_RUST_CACHE_FORCE_SAVE=1 to overwrite a cache anyway. - if [ "${POD_RUST_CACHE_FORCE_SAVE:-}" != "1" ] && mise run ci:r2 exists "${key}"; then - echo "rust-cache: ${part} already cached for this key — skipping save" - return 0 - fi - members="" for m in "$@"; do if [ -d "${base}/${m}" ]; then @@ -98,17 +87,9 @@ save_part() { fi tarball="${work}/${part}.tar.gz" - # gzip -1 keeps the format the restore path already reads while compressing the - # multi-GB target far faster than tar -z's default level. The marker file surfaces - # a tar failure the pipe would otherwise swallow, so a truncated archive is never - # uploaded over a good one. # shellcheck disable=SC2086 - { tar -cf - ${excludes} -C "${base}" ${members} || : >"${work}/${part}.failed"; } | gzip -1 >"${tarball}" - if [ -e "${work}/${part}.failed" ]; then - echo "rust-cache: ${part} tar failed — skipping upload" - return 0 - fi - mise run ci:r2 put "${tarball}" "${key}" + tar -czf "${tarball}" ${excludes} -C "${base}" ${members} + mise run ci:r2 put "${tarball}" "${dir}/${key_base}.${part}.tar.gz" echo "rust-cache: saved ${part} (${members# })" rm -f "${tarball}" } diff --git a/scripts/format/rust b/scripts/format/rust index c4b9dbe7..3fc8f894 100755 --- a/scripts/format/rust +++ b/scripts/format/rust @@ -4,6 +4,6 @@ set -e -cargo sort --workspace --config .config/tomlfmt.toml +cargo sort --config .config/tomlfmt.toml cargo +nightly fmt --all -- --config-path .config/rustfmt.toml cargo clippy --fix --all-targets --all-features --allow-dirty --allow-staged --allow-no-vcs diff --git a/scripts/generate/flatpak b/scripts/generate/flatpak index 80e6f41b..7c2c3e59 100755 --- a/scripts/generate/flatpak +++ b/scripts/generate/flatpak @@ -56,10 +56,10 @@ ${source_block} - type: file path: dev.aaronmallen.pod.appdata.xml - type: file - path: ../apps/desktop/assets/images/identity/128x128.png + path: ../assets/images/identity/128x128.png dest-filename: 128x128.png - type: file - path: ../apps/desktop/assets/images/identity/256x256.png + path: ../assets/images/identity/256x256.png dest-filename: 256x256.png EOF diff --git a/scripts/generate/item-images b/scripts/generate/item-images index 6fe89190..0784341e 100755 --- a/scripts/generate/item-images +++ b/scripts/generate/item-images @@ -2,7 +2,7 @@ #MISE description="Fetch 64px icons for all published item types into the committed asset set" #USAGE flag "--ids " help="Space-separated type IDs to fetch instead of the full SDE set (verification mode)" #USAGE flag "--concurrency " help="Number of parallel fetch workers (default 16)" -#USAGE flag "--out " help="Output directory (default apps/desktop/assets/images/items)" +#USAGE flag "--out " help="Output directory (default assets/images/items)" #USAGE flag "--min-coverage " help="Minimum percent of published types that must resolve before a full-SDE run is a success (default 95)" set -e @@ -113,7 +113,7 @@ fi concurrency="${usage_concurrency:-16}" min_coverage="${usage_min_coverage:-95}" -out_dir="${usage_out:-apps/desktop/assets/images/items}" +out_dir="${usage_out:-assets/images/items}" max_retries=5 mkdir -p "${out_dir}" @@ -144,7 +144,7 @@ else echo "item-images: extracting..." unzip -q "${work}/sde.zip" -d "${work}/sde" - # The SDE root is the directory containing categories.yaml (mirrors find_sde_root in apps/desktop/src/clients/sde.rs). + # The SDE root is the directory containing categories.yaml (mirrors find_sde_root in src/clients/sde.rs). root="${work}/sde" if [ ! -f "${root}/categories.yaml" ]; then root="$(dirname "$(find "${work}/sde" -name categories.yaml -print -quit)")" diff --git a/scripts/generate/item-images-cache b/scripts/generate/item-images-cache index 1a980e58..e8dfe0b8 100755 --- a/scripts/generate/item-images-cache +++ b/scripts/generate/item-images-cache @@ -9,7 +9,7 @@ set -e # the on-disk restore — what the nightly pre-build cron runs so the release job # hits a warm cache. A warm cache costs a single object HEAD. mode="${1:-restore}" -out_dir="apps/desktop/assets/images/items" +out_dir="assets/images/items" echo "item-images-cache: resolving the SDE build id..." build="$(curl -fsSL "https://developers.eveonline.com/static-data/tranquility/latest.jsonl" | diff --git a/scripts/lint/rust b/scripts/lint/rust index aea12049..12e0b4ae 100755 --- a/scripts/lint/rust +++ b/scripts/lint/rust @@ -4,6 +4,6 @@ set -e -cargo sort --workspace --check --config .config/tomlfmt.toml +cargo sort --check --config .config/tomlfmt.toml cargo +nightly fmt --all --check -- --config-path .config/rustfmt.toml cargo clippy --all-targets --all-features -- -D warnings diff --git a/scripts/package b/scripts/package index 8fb4527e..8d87621d 100755 --- a/scripts/package +++ b/scripts/package @@ -46,5 +46,4 @@ if [ -d "${OUT_DIR}" ]; then fi cargo build --release ${TARGET_ARGS} -cd apps/desktop cargo-packager --release ${FORMAT_ARGS} ${TARGET_ARGS} diff --git a/scripts/test/crap b/scripts/test/crap index e063d8d6..1ba28e9d 100755 --- a/scripts/test/crap +++ b/scripts/test/crap @@ -9,7 +9,7 @@ cargo llvm-cov nextest --all-features --no-fail-fast \ --no-tests pass || true cargo llvm-cov report --cobertura --output-path coverage/rust/cobertura.xml -rust-code-analysis-cli --metrics --output-format json -p apps/desktop/src \ +rust-code-analysis-cli --metrics --output-format json -p src \ >coverage/rust/metrics.json python3 - <<'PYEOF' @@ -105,7 +105,7 @@ for entry in file_metrics: def crate_from_path(path): parts = path.replace('\\', '/').split('/') - if parts[:3] == ['apps', 'desktop', 'src']: + if parts[0] == 'src': return 'pod' return parts[0] @@ -135,8 +135,8 @@ for fn in rca_functions: score = crap(fn['cc'], cov) short_file = fn_file - if short_file.startswith('apps/desktop/src/'): - short_file = short_file[len('apps/desktop/src/'):] + if short_file.startswith('src/'): + short_file = short_file[len('src/'):] results.append({ 'crate': crate, diff --git a/apps/desktop/src/app.rs b/src/app.rs similarity index 100% rename from apps/desktop/src/app.rs rename to src/app.rs diff --git a/apps/desktop/src/app/boot.rs b/src/app/boot.rs similarity index 100% rename from apps/desktop/src/app/boot.rs rename to src/app/boot.rs diff --git a/apps/desktop/src/app/dispatch.rs b/src/app/dispatch.rs similarity index 100% rename from apps/desktop/src/app/dispatch.rs rename to src/app/dispatch.rs diff --git a/apps/desktop/src/app/graphics.rs b/src/app/graphics.rs similarity index 100% rename from apps/desktop/src/app/graphics.rs rename to src/app/graphics.rs diff --git a/apps/desktop/src/app/image_heal.rs b/src/app/image_heal.rs similarity index 100% rename from apps/desktop/src/app/image_heal.rs rename to src/app/image_heal.rs diff --git a/apps/desktop/src/app/lease.rs b/src/app/lease.rs similarity index 100% rename from apps/desktop/src/app/lease.rs rename to src/app/lease.rs diff --git a/apps/desktop/src/app/lifecycle.rs b/src/app/lifecycle.rs similarity index 100% rename from apps/desktop/src/app/lifecycle.rs rename to src/app/lifecycle.rs diff --git a/apps/desktop/src/app/logging.rs b/src/app/logging.rs similarity index 100% rename from apps/desktop/src/app/logging.rs rename to src/app/logging.rs diff --git a/apps/desktop/src/app/navigation.rs b/src/app/navigation.rs similarity index 100% rename from apps/desktop/src/app/navigation.rs rename to src/app/navigation.rs diff --git a/apps/desktop/src/app/notification_center.rs b/src/app/notification_center.rs similarity index 100% rename from apps/desktop/src/app/notification_center.rs rename to src/app/notification_center.rs diff --git a/apps/desktop/src/app/pack_open.rs b/src/app/pack_open.rs similarity index 100% rename from apps/desktop/src/app/pack_open.rs rename to src/app/pack_open.rs diff --git a/apps/desktop/src/app/palette.rs b/src/app/palette.rs similarity index 100% rename from apps/desktop/src/app/palette.rs rename to src/app/palette.rs diff --git a/apps/desktop/src/app/settings_ops.rs b/src/app/settings_ops.rs similarity index 100% rename from apps/desktop/src/app/settings_ops.rs rename to src/app/settings_ops.rs diff --git a/apps/desktop/src/app/shortcuts.rs b/src/app/shortcuts.rs similarity index 100% rename from apps/desktop/src/app/shortcuts.rs rename to src/app/shortcuts.rs diff --git a/apps/desktop/src/app/snooze_scheduler.rs b/src/app/snooze_scheduler.rs similarity index 100% rename from apps/desktop/src/app/snooze_scheduler.rs rename to src/app/snooze_scheduler.rs diff --git a/apps/desktop/src/app/status_bar.rs b/src/app/status_bar.rs similarity index 100% rename from apps/desktop/src/app/status_bar.rs rename to src/app/status_bar.rs diff --git a/apps/desktop/src/app/trash_purge_scheduler.rs b/src/app/trash_purge_scheduler.rs similarity index 100% rename from apps/desktop/src/app/trash_purge_scheduler.rs rename to src/app/trash_purge_scheduler.rs diff --git a/apps/desktop/src/app/windows.rs b/src/app/windows.rs similarity index 100% rename from apps/desktop/src/app/windows.rs rename to src/app/windows.rs diff --git a/apps/desktop/src/clients.rs b/src/clients.rs similarity index 100% rename from apps/desktop/src/clients.rs rename to src/clients.rs diff --git a/apps/desktop/src/clients/esi.rs b/src/clients/esi.rs similarity index 100% rename from apps/desktop/src/clients/esi.rs rename to src/clients/esi.rs diff --git a/apps/desktop/src/clients/esi/alliance.rs b/src/clients/esi/alliance.rs similarity index 100% rename from apps/desktop/src/clients/esi/alliance.rs rename to src/clients/esi/alliance.rs diff --git a/apps/desktop/src/clients/esi/bloodlines.rs b/src/clients/esi/bloodlines.rs similarity index 100% rename from apps/desktop/src/clients/esi/bloodlines.rs rename to src/clients/esi/bloodlines.rs diff --git a/apps/desktop/src/clients/esi/character.rs b/src/clients/esi/character.rs similarity index 100% rename from apps/desktop/src/clients/esi/character.rs rename to src/clients/esi/character.rs diff --git a/apps/desktop/src/clients/esi/corporation.rs b/src/clients/esi/corporation.rs similarity index 100% rename from apps/desktop/src/clients/esi/corporation.rs rename to src/clients/esi/corporation.rs diff --git a/apps/desktop/src/clients/esi/dogma.rs b/src/clients/esi/dogma.rs similarity index 100% rename from apps/desktop/src/clients/esi/dogma.rs rename to src/clients/esi/dogma.rs diff --git a/apps/desktop/src/clients/esi/faction.rs b/src/clients/esi/faction.rs similarity index 100% rename from apps/desktop/src/clients/esi/faction.rs rename to src/clients/esi/faction.rs diff --git a/apps/desktop/src/clients/esi/industry.rs b/src/clients/esi/industry.rs similarity index 100% rename from apps/desktop/src/clients/esi/industry.rs rename to src/clients/esi/industry.rs diff --git a/apps/desktop/src/clients/esi/killmail.rs b/src/clients/esi/killmail.rs similarity index 100% rename from apps/desktop/src/clients/esi/killmail.rs rename to src/clients/esi/killmail.rs diff --git a/apps/desktop/src/clients/esi/market.rs b/src/clients/esi/market.rs similarity index 100% rename from apps/desktop/src/clients/esi/market.rs rename to src/clients/esi/market.rs diff --git a/apps/desktop/src/clients/esi/models.rs b/src/clients/esi/models.rs similarity index 100% rename from apps/desktop/src/clients/esi/models.rs rename to src/clients/esi/models.rs diff --git a/apps/desktop/src/clients/esi/models/alliance.rs b/src/clients/esi/models/alliance.rs similarity index 100% rename from apps/desktop/src/clients/esi/models/alliance.rs rename to src/clients/esi/models/alliance.rs diff --git a/apps/desktop/src/clients/esi/models/assets.rs b/src/clients/esi/models/assets.rs similarity index 100% rename from apps/desktop/src/clients/esi/models/assets.rs rename to src/clients/esi/models/assets.rs diff --git a/apps/desktop/src/clients/esi/models/bloodlines.rs b/src/clients/esi/models/bloodlines.rs similarity index 100% rename from apps/desktop/src/clients/esi/models/bloodlines.rs rename to src/clients/esi/models/bloodlines.rs diff --git a/apps/desktop/src/clients/esi/models/blueprint.rs b/src/clients/esi/models/blueprint.rs similarity index 100% rename from apps/desktop/src/clients/esi/models/blueprint.rs rename to src/clients/esi/models/blueprint.rs diff --git a/apps/desktop/src/clients/esi/models/character.rs b/src/clients/esi/models/character.rs similarity index 100% rename from apps/desktop/src/clients/esi/models/character.rs rename to src/clients/esi/models/character.rs diff --git a/apps/desktop/src/clients/esi/models/corporation.rs b/src/clients/esi/models/corporation.rs similarity index 100% rename from apps/desktop/src/clients/esi/models/corporation.rs rename to src/clients/esi/models/corporation.rs diff --git a/apps/desktop/src/clients/esi/models/dogma.rs b/src/clients/esi/models/dogma.rs similarity index 100% rename from apps/desktop/src/clients/esi/models/dogma.rs rename to src/clients/esi/models/dogma.rs diff --git a/apps/desktop/src/clients/esi/models/faction.rs b/src/clients/esi/models/faction.rs similarity index 100% rename from apps/desktop/src/clients/esi/models/faction.rs rename to src/clients/esi/models/faction.rs diff --git a/apps/desktop/src/clients/esi/models/industry.rs b/src/clients/esi/models/industry.rs similarity index 100% rename from apps/desktop/src/clients/esi/models/industry.rs rename to src/clients/esi/models/industry.rs diff --git a/apps/desktop/src/clients/esi/models/killmail.rs b/src/clients/esi/models/killmail.rs similarity index 100% rename from apps/desktop/src/clients/esi/models/killmail.rs rename to src/clients/esi/models/killmail.rs diff --git a/apps/desktop/src/clients/esi/models/market.rs b/src/clients/esi/models/market.rs similarity index 100% rename from apps/desktop/src/clients/esi/models/market.rs rename to src/clients/esi/models/market.rs diff --git a/apps/desktop/src/clients/esi/models/races.rs b/src/clients/esi/models/races.rs similarity index 100% rename from apps/desktop/src/clients/esi/models/races.rs rename to src/clients/esi/models/races.rs diff --git a/apps/desktop/src/clients/esi/models/universe.rs b/src/clients/esi/models/universe.rs similarity index 100% rename from apps/desktop/src/clients/esi/models/universe.rs rename to src/clients/esi/models/universe.rs diff --git a/apps/desktop/src/clients/esi/races.rs b/src/clients/esi/races.rs similarity index 100% rename from apps/desktop/src/clients/esi/races.rs rename to src/clients/esi/races.rs diff --git a/apps/desktop/src/clients/esi/scopes.rs b/src/clients/esi/scopes.rs similarity index 100% rename from apps/desktop/src/clients/esi/scopes.rs rename to src/clients/esi/scopes.rs diff --git a/apps/desktop/src/clients/esi/universe.rs b/src/clients/esi/universe.rs similarity index 100% rename from apps/desktop/src/clients/esi/universe.rs rename to src/clients/esi/universe.rs diff --git a/apps/desktop/src/clients/eve_image.rs b/src/clients/eve_image.rs similarity index 100% rename from apps/desktop/src/clients/eve_image.rs rename to src/clients/eve_image.rs diff --git a/apps/desktop/src/clients/eve_sso.rs b/src/clients/eve_sso.rs similarity index 100% rename from apps/desktop/src/clients/eve_sso.rs rename to src/clients/eve_sso.rs diff --git a/apps/desktop/src/clients/http.rs b/src/clients/http.rs similarity index 100% rename from apps/desktop/src/clients/http.rs rename to src/clients/http.rs diff --git a/apps/desktop/src/clients/muta_market.rs b/src/clients/muta_market.rs similarity index 100% rename from apps/desktop/src/clients/muta_market.rs rename to src/clients/muta_market.rs diff --git a/apps/desktop/src/clients/sde.rs b/src/clients/sde.rs similarity index 100% rename from apps/desktop/src/clients/sde.rs rename to src/clients/sde.rs diff --git a/apps/desktop/src/clients/telemetry.rs b/src/clients/telemetry.rs similarity index 100% rename from apps/desktop/src/clients/telemetry.rs rename to src/clients/telemetry.rs diff --git a/apps/desktop/src/clients/zkillboard.rs b/src/clients/zkillboard.rs similarity index 100% rename from apps/desktop/src/clients/zkillboard.rs rename to src/clients/zkillboard.rs diff --git a/apps/desktop/src/config.rs b/src/config.rs similarity index 100% rename from apps/desktop/src/config.rs rename to src/config.rs diff --git a/apps/desktop/src/features.rs b/src/features.rs similarity index 100% rename from apps/desktop/src/features.rs rename to src/features.rs diff --git a/apps/desktop/src/features/assets.rs b/src/features/assets.rs similarity index 100% rename from apps/desktop/src/features/assets.rs rename to src/features/assets.rs diff --git a/apps/desktop/src/features/assets/abyssals.rs b/src/features/assets/abyssals.rs similarity index 100% rename from apps/desktop/src/features/assets/abyssals.rs rename to src/features/assets/abyssals.rs diff --git a/apps/desktop/src/features/assets/abyssals/card.rs b/src/features/assets/abyssals/card.rs similarity index 100% rename from apps/desktop/src/features/assets/abyssals/card.rs rename to src/features/assets/abyssals/card.rs diff --git a/apps/desktop/src/features/assets/abyssals/card_grid.rs b/src/features/assets/abyssals/card_grid.rs similarity index 100% rename from apps/desktop/src/features/assets/abyssals/card_grid.rs rename to src/features/assets/abyssals/card_grid.rs diff --git a/apps/desktop/src/features/assets/abyssals/filter_sidebar.rs b/src/features/assets/abyssals/filter_sidebar.rs similarity index 100% rename from apps/desktop/src/features/assets/abyssals/filter_sidebar.rs rename to src/features/assets/abyssals/filter_sidebar.rs diff --git a/apps/desktop/src/features/assets/abyssals/module_type_picker.rs b/src/features/assets/abyssals/module_type_picker.rs similarity index 100% rename from apps/desktop/src/features/assets/abyssals/module_type_picker.rs rename to src/features/assets/abyssals/module_type_picker.rs diff --git a/apps/desktop/src/features/assets/abyssals/stat_ranges.rs b/src/features/assets/abyssals/stat_ranges.rs similarity index 100% rename from apps/desktop/src/features/assets/abyssals/stat_ranges.rs rename to src/features/assets/abyssals/stat_ranges.rs diff --git a/apps/desktop/src/features/assets/abyssals/stat_row.rs b/src/features/assets/abyssals/stat_row.rs similarity index 100% rename from apps/desktop/src/features/assets/abyssals/stat_row.rs rename to src/features/assets/abyssals/stat_row.rs diff --git a/apps/desktop/src/features/assets/abyssals/tier_badge.rs b/src/features/assets/abyssals/tier_badge.rs similarity index 100% rename from apps/desktop/src/features/assets/abyssals/tier_badge.rs rename to src/features/assets/abyssals/tier_badge.rs diff --git a/apps/desktop/src/features/assets/abyssals/type_icon_tile.rs b/src/features/assets/abyssals/type_icon_tile.rs similarity index 100% rename from apps/desktop/src/features/assets/abyssals/type_icon_tile.rs rename to src/features/assets/abyssals/type_icon_tile.rs diff --git a/apps/desktop/src/features/assets/header.rs b/src/features/assets/header.rs similarity index 100% rename from apps/desktop/src/features/assets/header.rs rename to src/features/assets/header.rs diff --git a/apps/desktop/src/features/assets/inventory.rs b/src/features/assets/inventory.rs similarity index 100% rename from apps/desktop/src/features/assets/inventory.rs rename to src/features/assets/inventory.rs diff --git a/apps/desktop/src/features/assets/shell.rs b/src/features/assets/shell.rs similarity index 100% rename from apps/desktop/src/features/assets/shell.rs rename to src/features/assets/shell.rs diff --git a/apps/desktop/src/features/assets/stockpile_multibuy.rs b/src/features/assets/stockpile_multibuy.rs similarity index 100% rename from apps/desktop/src/features/assets/stockpile_multibuy.rs rename to src/features/assets/stockpile_multibuy.rs diff --git a/apps/desktop/src/features/assets/stockpile_search.rs b/src/features/assets/stockpile_search.rs similarity index 100% rename from apps/desktop/src/features/assets/stockpile_search.rs rename to src/features/assets/stockpile_search.rs diff --git a/apps/desktop/src/features/assets/stockpiles.rs b/src/features/assets/stockpiles.rs similarity index 100% rename from apps/desktop/src/features/assets/stockpiles.rs rename to src/features/assets/stockpiles.rs diff --git a/apps/desktop/src/features/assets/stockpiles/card.rs b/src/features/assets/stockpiles/card.rs similarity index 100% rename from apps/desktop/src/features/assets/stockpiles/card.rs rename to src/features/assets/stockpiles/card.rs diff --git a/apps/desktop/src/features/assets/stockpiles/card_grid.rs b/src/features/assets/stockpiles/card_grid.rs similarity index 100% rename from apps/desktop/src/features/assets/stockpiles/card_grid.rs rename to src/features/assets/stockpiles/card_grid.rs diff --git a/apps/desktop/src/features/assets/stockpiles/item_row.rs b/src/features/assets/stockpiles/item_row.rs similarity index 100% rename from apps/desktop/src/features/assets/stockpiles/item_row.rs rename to src/features/assets/stockpiles/item_row.rs diff --git a/apps/desktop/src/features/assets/tracker.rs b/src/features/assets/tracker.rs similarity index 100% rename from apps/desktop/src/features/assets/tracker.rs rename to src/features/assets/tracker.rs diff --git a/apps/desktop/src/features/assets/tree.rs b/src/features/assets/tree.rs similarity index 100% rename from apps/desktop/src/features/assets/tree.rs rename to src/features/assets/tree.rs diff --git a/apps/desktop/src/features/assets/values.rs b/src/features/assets/values.rs similarity index 100% rename from apps/desktop/src/features/assets/values.rs rename to src/features/assets/values.rs diff --git a/apps/desktop/src/features/calendar.rs b/src/features/calendar.rs similarity index 100% rename from apps/desktop/src/features/calendar.rs rename to src/features/calendar.rs diff --git a/apps/desktop/src/features/calendar/agenda.rs b/src/features/calendar/agenda.rs similarity index 100% rename from apps/desktop/src/features/calendar/agenda.rs rename to src/features/calendar/agenda.rs diff --git a/apps/desktop/src/features/calendar/day.rs b/src/features/calendar/day.rs similarity index 100% rename from apps/desktop/src/features/calendar/day.rs rename to src/features/calendar/day.rs diff --git a/apps/desktop/src/features/calendar/detail.rs b/src/features/calendar/detail.rs similarity index 100% rename from apps/desktop/src/features/calendar/detail.rs rename to src/features/calendar/detail.rs diff --git a/apps/desktop/src/features/calendar/grid.rs b/src/features/calendar/grid.rs similarity index 100% rename from apps/desktop/src/features/calendar/grid.rs rename to src/features/calendar/grid.rs diff --git a/apps/desktop/src/features/calendar/loaders.rs b/src/features/calendar/loaders.rs similarity index 100% rename from apps/desktop/src/features/calendar/loaders.rs rename to src/features/calendar/loaders.rs diff --git a/apps/desktop/src/features/calendar/month.rs b/src/features/calendar/month.rs similarity index 100% rename from apps/desktop/src/features/calendar/month.rs rename to src/features/calendar/month.rs diff --git a/apps/desktop/src/features/calendar/palette.rs b/src/features/calendar/palette.rs similarity index 100% rename from apps/desktop/src/features/calendar/palette.rs rename to src/features/calendar/palette.rs diff --git a/apps/desktop/src/features/calendar/respond.rs b/src/features/calendar/respond.rs similarity index 100% rename from apps/desktop/src/features/calendar/respond.rs rename to src/features/calendar/respond.rs diff --git a/apps/desktop/src/features/calendar/shell.rs b/src/features/calendar/shell.rs similarity index 100% rename from apps/desktop/src/features/calendar/shell.rs rename to src/features/calendar/shell.rs diff --git a/apps/desktop/src/features/calendar/switcher.rs b/src/features/calendar/switcher.rs similarity index 100% rename from apps/desktop/src/features/calendar/switcher.rs rename to src/features/calendar/switcher.rs diff --git a/apps/desktop/src/features/calendar/time.rs b/src/features/calendar/time.rs similarity index 100% rename from apps/desktop/src/features/calendar/time.rs rename to src/features/calendar/time.rs diff --git a/apps/desktop/src/features/calendar/week.rs b/src/features/calendar/week.rs similarity index 100% rename from apps/desktop/src/features/calendar/week.rs rename to src/features/calendar/week.rs diff --git a/apps/desktop/src/features/calendar/year.rs b/src/features/calendar/year.rs similarity index 100% rename from apps/desktop/src/features/calendar/year.rs rename to src/features/calendar/year.rs diff --git a/apps/desktop/src/features/industry.rs b/src/features/industry.rs similarity index 100% rename from apps/desktop/src/features/industry.rs rename to src/features/industry.rs diff --git a/apps/desktop/src/features/industry/blueprints.rs b/src/features/industry/blueprints.rs similarity index 100% rename from apps/desktop/src/features/industry/blueprints.rs rename to src/features/industry/blueprints.rs diff --git a/apps/desktop/src/features/industry/colonies.rs b/src/features/industry/colonies.rs similarity index 100% rename from apps/desktop/src/features/industry/colonies.rs rename to src/features/industry/colonies.rs diff --git a/apps/desktop/src/features/industry/colony_drawer.rs b/src/features/industry/colony_drawer.rs similarity index 100% rename from apps/desktop/src/features/industry/colony_drawer.rs rename to src/features/industry/colony_drawer.rs diff --git a/apps/desktop/src/features/industry/extractions.rs b/src/features/industry/extractions.rs similarity index 100% rename from apps/desktop/src/features/industry/extractions.rs rename to src/features/industry/extractions.rs diff --git a/apps/desktop/src/features/industry/facility_owner.rs b/src/features/industry/facility_owner.rs similarity index 100% rename from apps/desktop/src/features/industry/facility_owner.rs rename to src/features/industry/facility_owner.rs diff --git a/apps/desktop/src/features/industry/jobs.rs b/src/features/industry/jobs.rs similarity index 100% rename from apps/desktop/src/features/industry/jobs.rs rename to src/features/industry/jobs.rs diff --git a/apps/desktop/src/features/industry/loaders.rs b/src/features/industry/loaders.rs similarity index 100% rename from apps/desktop/src/features/industry/loaders.rs rename to src/features/industry/loaders.rs diff --git a/apps/desktop/src/features/industry/planner.rs b/src/features/industry/planner.rs similarity index 100% rename from apps/desktop/src/features/industry/planner.rs rename to src/features/industry/planner.rs diff --git a/apps/desktop/src/features/industry/planner_loaders.rs b/src/features/industry/planner_loaders.rs similarity index 100% rename from apps/desktop/src/features/industry/planner_loaders.rs rename to src/features/industry/planner_loaders.rs diff --git a/apps/desktop/src/features/industry/planner_model.rs b/src/features/industry/planner_model.rs similarity index 100% rename from apps/desktop/src/features/industry/planner_model.rs rename to src/features/industry/planner_model.rs diff --git a/apps/desktop/src/features/industry/planner_search.rs b/src/features/industry/planner_search.rs similarity index 100% rename from apps/desktop/src/features/industry/planner_search.rs rename to src/features/industry/planner_search.rs diff --git a/apps/desktop/src/features/industry/rig_bonuses.rs b/src/features/industry/rig_bonuses.rs similarity index 100% rename from apps/desktop/src/features/industry/rig_bonuses.rs rename to src/features/industry/rig_bonuses.rs diff --git a/apps/desktop/src/features/industry/shell.rs b/src/features/industry/shell.rs similarity index 100% rename from apps/desktop/src/features/industry/shell.rs rename to src/features/industry/shell.rs diff --git a/apps/desktop/src/features/industry/side_rail.rs b/src/features/industry/side_rail.rs similarity index 100% rename from apps/desktop/src/features/industry/side_rail.rs rename to src/features/industry/side_rail.rs diff --git a/apps/desktop/src/features/industry/switcher.rs b/src/features/industry/switcher.rs similarity index 100% rename from apps/desktop/src/features/industry/switcher.rs rename to src/features/industry/switcher.rs diff --git a/apps/desktop/src/features/mail.rs b/src/features/mail.rs similarity index 100% rename from apps/desktop/src/features/mail.rs rename to src/features/mail.rs diff --git a/apps/desktop/src/features/mail/compose.rs b/src/features/mail/compose.rs similarity index 100% rename from apps/desktop/src/features/mail/compose.rs rename to src/features/mail/compose.rs diff --git a/apps/desktop/src/features/mail/draft.rs b/src/features/mail/draft.rs similarity index 100% rename from apps/desktop/src/features/mail/draft.rs rename to src/features/mail/draft.rs diff --git a/apps/desktop/src/features/mail/folder_pane.rs b/src/features/mail/folder_pane.rs similarity index 100% rename from apps/desktop/src/features/mail/folder_pane.rs rename to src/features/mail/folder_pane.rs diff --git a/apps/desktop/src/features/mail/labels.rs b/src/features/mail/labels.rs similarity index 100% rename from apps/desktop/src/features/mail/labels.rs rename to src/features/mail/labels.rs diff --git a/apps/desktop/src/features/mail/loaders.rs b/src/features/mail/loaders.rs similarity index 100% rename from apps/desktop/src/features/mail/loaders.rs rename to src/features/mail/loaders.rs diff --git a/apps/desktop/src/features/mail/markup.rs b/src/features/mail/markup.rs similarity index 100% rename from apps/desktop/src/features/mail/markup.rs rename to src/features/mail/markup.rs diff --git a/apps/desktop/src/features/mail/message_list.rs b/src/features/mail/message_list.rs similarity index 100% rename from apps/desktop/src/features/mail/message_list.rs rename to src/features/mail/message_list.rs diff --git a/apps/desktop/src/features/mail/outbox_indicator.rs b/src/features/mail/outbox_indicator.rs similarity index 100% rename from apps/desktop/src/features/mail/outbox_indicator.rs rename to src/features/mail/outbox_indicator.rs diff --git a/apps/desktop/src/features/mail/read_state.rs b/src/features/mail/read_state.rs similarity index 100% rename from apps/desktop/src/features/mail/read_state.rs rename to src/features/mail/read_state.rs diff --git a/apps/desktop/src/features/mail/reading_pane.rs b/src/features/mail/reading_pane.rs similarity index 100% rename from apps/desktop/src/features/mail/reading_pane.rs rename to src/features/mail/reading_pane.rs diff --git a/apps/desktop/src/features/mail/shell.rs b/src/features/mail/shell.rs similarity index 100% rename from apps/desktop/src/features/mail/shell.rs rename to src/features/mail/shell.rs diff --git a/apps/desktop/src/features/mail/snooze.rs b/src/features/mail/snooze.rs similarity index 100% rename from apps/desktop/src/features/mail/snooze.rs rename to src/features/mail/snooze.rs diff --git a/apps/desktop/src/features/mail/switcher.rs b/src/features/mail/switcher.rs similarity index 100% rename from apps/desktop/src/features/mail/switcher.rs rename to src/features/mail/switcher.rs diff --git a/apps/desktop/src/features/mail/triage.rs b/src/features/mail/triage.rs similarity index 100% rename from apps/desktop/src/features/mail/triage.rs rename to src/features/mail/triage.rs diff --git a/apps/desktop/src/features/market.rs b/src/features/market.rs similarity index 100% rename from apps/desktop/src/features/market.rs rename to src/features/market.rs diff --git a/apps/desktop/src/features/market/book.rs b/src/features/market/book.rs similarity index 100% rename from apps/desktop/src/features/market/book.rs rename to src/features/market/book.rs diff --git a/apps/desktop/src/features/market/book_view.rs b/src/features/market/book_view.rs similarity index 100% rename from apps/desktop/src/features/market/book_view.rs rename to src/features/market/book_view.rs diff --git a/apps/desktop/src/features/market/browse.rs b/src/features/market/browse.rs similarity index 100% rename from apps/desktop/src/features/market/browse.rs rename to src/features/market/browse.rs diff --git a/apps/desktop/src/features/market/cart.rs b/src/features/market/cart.rs similarity index 100% rename from apps/desktop/src/features/market/cart.rs rename to src/features/market/cart.rs diff --git a/apps/desktop/src/features/market/compare.rs b/src/features/market/compare.rs similarity index 100% rename from apps/desktop/src/features/market/compare.rs rename to src/features/market/compare.rs diff --git a/apps/desktop/src/features/market/compare/view.rs b/src/features/market/compare/view.rs similarity index 100% rename from apps/desktop/src/features/market/compare/view.rs rename to src/features/market/compare/view.rs diff --git a/apps/desktop/src/features/market/history.rs b/src/features/market/history.rs similarity index 100% rename from apps/desktop/src/features/market/history.rs rename to src/features/market/history.rs diff --git a/apps/desktop/src/features/market/history_chart.rs b/src/features/market/history_chart.rs similarity index 100% rename from apps/desktop/src/features/market/history_chart.rs rename to src/features/market/history_chart.rs diff --git a/apps/desktop/src/features/market/history_view.rs b/src/features/market/history_view.rs similarity index 100% rename from apps/desktop/src/features/market/history_view.rs rename to src/features/market/history_view.rs diff --git a/apps/desktop/src/features/market/i18n.rs b/src/features/market/i18n.rs similarity index 100% rename from apps/desktop/src/features/market/i18n.rs rename to src/features/market/i18n.rs diff --git a/apps/desktop/src/features/market/my_orders.rs b/src/features/market/my_orders.rs similarity index 100% rename from apps/desktop/src/features/market/my_orders.rs rename to src/features/market/my_orders.rs diff --git a/apps/desktop/src/features/market/order_history.rs b/src/features/market/order_history.rs similarity index 100% rename from apps/desktop/src/features/market/order_history.rs rename to src/features/market/order_history.rs diff --git a/apps/desktop/src/features/market/outbid.rs b/src/features/market/outbid.rs similarity index 100% rename from apps/desktop/src/features/market/outbid.rs rename to src/features/market/outbid.rs diff --git a/apps/desktop/src/features/market/shell.rs b/src/features/market/shell.rs similarity index 100% rename from apps/desktop/src/features/market/shell.rs rename to src/features/market/shell.rs diff --git a/apps/desktop/src/features/market/tree.rs b/src/features/market/tree.rs similarity index 100% rename from apps/desktop/src/features/market/tree.rs rename to src/features/market/tree.rs diff --git a/apps/desktop/src/features/market/watch_eval.rs b/src/features/market/watch_eval.rs similarity index 100% rename from apps/desktop/src/features/market/watch_eval.rs rename to src/features/market/watch_eval.rs diff --git a/apps/desktop/src/features/market/watchlist.rs b/src/features/market/watchlist.rs similarity index 100% rename from apps/desktop/src/features/market/watchlist.rs rename to src/features/market/watchlist.rs diff --git a/apps/desktop/src/features/roster.rs b/src/features/roster.rs similarity index 100% rename from apps/desktop/src/features/roster.rs rename to src/features/roster.rs diff --git a/apps/desktop/src/features/roster/add_character.rs b/src/features/roster/add_character.rs similarity index 100% rename from apps/desktop/src/features/roster/add_character.rs rename to src/features/roster/add_character.rs diff --git a/apps/desktop/src/features/roster/auth.rs b/src/features/roster/auth.rs similarity index 100% rename from apps/desktop/src/features/roster/auth.rs rename to src/features/roster/auth.rs diff --git a/apps/desktop/src/features/roster/auth/deep_link.rs b/src/features/roster/auth/deep_link.rs similarity index 100% rename from apps/desktop/src/features/roster/auth/deep_link.rs rename to src/features/roster/auth/deep_link.rs diff --git a/apps/desktop/src/features/roster/auth/deep_link/linux.rs b/src/features/roster/auth/deep_link/linux.rs similarity index 100% rename from apps/desktop/src/features/roster/auth/deep_link/linux.rs rename to src/features/roster/auth/deep_link/linux.rs diff --git a/apps/desktop/src/features/roster/auth/deep_link/macos.rs b/src/features/roster/auth/deep_link/macos.rs similarity index 100% rename from apps/desktop/src/features/roster/auth/deep_link/macos.rs rename to src/features/roster/auth/deep_link/macos.rs diff --git a/apps/desktop/src/features/roster/auth/deep_link/single_instance.rs b/src/features/roster/auth/deep_link/single_instance.rs similarity index 100% rename from apps/desktop/src/features/roster/auth/deep_link/single_instance.rs rename to src/features/roster/auth/deep_link/single_instance.rs diff --git a/apps/desktop/src/features/roster/auth/deep_link/windows.rs b/src/features/roster/auth/deep_link/windows.rs similarity index 100% rename from apps/desktop/src/features/roster/auth/deep_link/windows.rs rename to src/features/roster/auth/deep_link/windows.rs diff --git a/apps/desktop/src/features/roster/auth/session.rs b/src/features/roster/auth/session.rs similarity index 100% rename from apps/desktop/src/features/roster/auth/session.rs rename to src/features/roster/auth/session.rs diff --git a/apps/desktop/src/features/roster/captains_log.rs b/src/features/roster/captains_log.rs similarity index 100% rename from apps/desktop/src/features/roster/captains_log.rs rename to src/features/roster/captains_log.rs diff --git a/apps/desktop/src/features/roster/captains_log/entries.rs b/src/features/roster/captains_log/entries.rs similarity index 100% rename from apps/desktop/src/features/roster/captains_log/entries.rs rename to src/features/roster/captains_log/entries.rs diff --git a/apps/desktop/src/features/roster/captains_log/eve_date.rs b/src/features/roster/captains_log/eve_date.rs similarity index 100% rename from apps/desktop/src/features/roster/captains_log/eve_date.rs rename to src/features/roster/captains_log/eve_date.rs diff --git a/apps/desktop/src/features/roster/captains_log/events.rs b/src/features/roster/captains_log/events.rs similarity index 100% rename from apps/desktop/src/features/roster/captains_log/events.rs rename to src/features/roster/captains_log/events.rs diff --git a/apps/desktop/src/features/roster/captains_log/field_notes.rs b/src/features/roster/captains_log/field_notes.rs similarity index 100% rename from apps/desktop/src/features/roster/captains_log/field_notes.rs rename to src/features/roster/captains_log/field_notes.rs diff --git a/apps/desktop/src/features/roster/captains_log/header.rs b/src/features/roster/captains_log/header.rs similarity index 100% rename from apps/desktop/src/features/roster/captains_log/header.rs rename to src/features/roster/captains_log/header.rs diff --git a/apps/desktop/src/features/roster/captains_log/km_report.rs b/src/features/roster/captains_log/km_report.rs similarity index 100% rename from apps/desktop/src/features/roster/captains_log/km_report.rs rename to src/features/roster/captains_log/km_report.rs diff --git a/apps/desktop/src/features/roster/captains_log/narrative.rs b/src/features/roster/captains_log/narrative.rs similarity index 100% rename from apps/desktop/src/features/roster/captains_log/narrative.rs rename to src/features/roster/captains_log/narrative.rs diff --git a/apps/desktop/src/features/roster/captains_log/objective_link.rs b/src/features/roster/captains_log/objective_link.rs similarity index 100% rename from apps/desktop/src/features/roster/captains_log/objective_link.rs rename to src/features/roster/captains_log/objective_link.rs diff --git a/apps/desktop/src/features/roster/captains_log/past.rs b/src/features/roster/captains_log/past.rs similarity index 100% rename from apps/desktop/src/features/roster/captains_log/past.rs rename to src/features/roster/captains_log/past.rs diff --git a/apps/desktop/src/features/roster/captains_log/prompts.rs b/src/features/roster/captains_log/prompts.rs similarity index 100% rename from apps/desktop/src/features/roster/captains_log/prompts.rs rename to src/features/roster/captains_log/prompts.rs diff --git a/apps/desktop/src/features/roster/captains_log/rollup.rs b/src/features/roster/captains_log/rollup.rs similarity index 100% rename from apps/desktop/src/features/roster/captains_log/rollup.rs rename to src/features/roster/captains_log/rollup.rs diff --git a/apps/desktop/src/features/roster/captains_log/rollup_tiles.rs b/src/features/roster/captains_log/rollup_tiles.rs similarity index 100% rename from apps/desktop/src/features/roster/captains_log/rollup_tiles.rs rename to src/features/roster/captains_log/rollup_tiles.rs diff --git a/apps/desktop/src/features/roster/captains_log/wizard.rs b/src/features/roster/captains_log/wizard.rs similarity index 100% rename from apps/desktop/src/features/roster/captains_log/wizard.rs rename to src/features/roster/captains_log/wizard.rs diff --git a/apps/desktop/src/features/roster/captains_log_nudge.rs b/src/features/roster/captains_log_nudge.rs similarity index 100% rename from apps/desktop/src/features/roster/captains_log_nudge.rs rename to src/features/roster/captains_log_nudge.rs diff --git a/apps/desktop/src/features/roster/card.rs b/src/features/roster/card.rs similarity index 100% rename from apps/desktop/src/features/roster/card.rs rename to src/features/roster/card.rs diff --git a/apps/desktop/src/features/roster/character_detail.rs b/src/features/roster/character_detail.rs similarity index 100% rename from apps/desktop/src/features/roster/character_detail.rs rename to src/features/roster/character_detail.rs diff --git a/apps/desktop/src/features/roster/character_detail/header.rs b/src/features/roster/character_detail/header.rs similarity index 100% rename from apps/desktop/src/features/roster/character_detail/header.rs rename to src/features/roster/character_detail/header.rs diff --git a/apps/desktop/src/features/roster/character_detail/killmail_loader.rs b/src/features/roster/character_detail/killmail_loader.rs similarity index 100% rename from apps/desktop/src/features/roster/character_detail/killmail_loader.rs rename to src/features/roster/character_detail/killmail_loader.rs diff --git a/apps/desktop/src/features/roster/character_detail/tabs.rs b/src/features/roster/character_detail/tabs.rs similarity index 100% rename from apps/desktop/src/features/roster/character_detail/tabs.rs rename to src/features/roster/character_detail/tabs.rs diff --git a/apps/desktop/src/features/roster/character_detail/tabs/clones.rs b/src/features/roster/character_detail/tabs/clones.rs similarity index 100% rename from apps/desktop/src/features/roster/character_detail/tabs/clones.rs rename to src/features/roster/character_detail/tabs/clones.rs diff --git a/apps/desktop/src/features/roster/character_detail/tabs/contact_modal.rs b/src/features/roster/character_detail/tabs/contact_modal.rs similarity index 100% rename from apps/desktop/src/features/roster/character_detail/tabs/contact_modal.rs rename to src/features/roster/character_detail/tabs/contact_modal.rs diff --git a/apps/desktop/src/features/roster/character_detail/tabs/contacts.rs b/src/features/roster/character_detail/tabs/contacts.rs similarity index 100% rename from apps/desktop/src/features/roster/character_detail/tabs/contacts.rs rename to src/features/roster/character_detail/tabs/contacts.rs diff --git a/apps/desktop/src/features/roster/character_detail/tabs/dossier.rs b/src/features/roster/character_detail/tabs/dossier.rs similarity index 100% rename from apps/desktop/src/features/roster/character_detail/tabs/dossier.rs rename to src/features/roster/character_detail/tabs/dossier.rs diff --git a/apps/desktop/src/features/roster/character_detail/tabs/killlog.rs b/src/features/roster/character_detail/tabs/killlog.rs similarity index 100% rename from apps/desktop/src/features/roster/character_detail/tabs/killlog.rs rename to src/features/roster/character_detail/tabs/killlog.rs diff --git a/apps/desktop/src/features/roster/character_detail/tabs/notifications.rs b/src/features/roster/character_detail/tabs/notifications.rs similarity index 100% rename from apps/desktop/src/features/roster/character_detail/tabs/notifications.rs rename to src/features/roster/character_detail/tabs/notifications.rs diff --git a/apps/desktop/src/features/roster/character_detail/tabs/shared.rs b/src/features/roster/character_detail/tabs/shared.rs similarity index 100% rename from apps/desktop/src/features/roster/character_detail/tabs/shared.rs rename to src/features/roster/character_detail/tabs/shared.rs diff --git a/apps/desktop/src/features/roster/character_detail/tabs/standings.rs b/src/features/roster/character_detail/tabs/standings.rs similarity index 100% rename from apps/desktop/src/features/roster/character_detail/tabs/standings.rs rename to src/features/roster/character_detail/tabs/standings.rs diff --git a/apps/desktop/src/features/roster/compact_card.rs b/src/features/roster/compact_card.rs similarity index 100% rename from apps/desktop/src/features/roster/compact_card.rs rename to src/features/roster/compact_card.rs diff --git a/apps/desktop/src/features/roster/contact_sync.rs b/src/features/roster/contact_sync.rs similarity index 100% rename from apps/desktop/src/features/roster/contact_sync.rs rename to src/features/roster/contact_sync.rs diff --git a/apps/desktop/src/features/roster/contact_sync/editor.rs b/src/features/roster/contact_sync/editor.rs similarity index 100% rename from apps/desktop/src/features/roster/contact_sync/editor.rs rename to src/features/roster/contact_sync/editor.rs diff --git a/apps/desktop/src/features/roster/contact_sync/index.rs b/src/features/roster/contact_sync/index.rs similarity index 100% rename from apps/desktop/src/features/roster/contact_sync/index.rs rename to src/features/roster/contact_sync/index.rs diff --git a/apps/desktop/src/features/roster/corp_card.rs b/src/features/roster/corp_card.rs similarity index 100% rename from apps/desktop/src/features/roster/corp_card.rs rename to src/features/roster/corp_card.rs diff --git a/apps/desktop/src/features/roster/corp_compact_card.rs b/src/features/roster/corp_compact_card.rs similarity index 100% rename from apps/desktop/src/features/roster/corp_compact_card.rs rename to src/features/roster/corp_compact_card.rs diff --git a/apps/desktop/src/features/roster/corp_list_row.rs b/src/features/roster/corp_list_row.rs similarity index 100% rename from apps/desktop/src/features/roster/corp_list_row.rs rename to src/features/roster/corp_list_row.rs diff --git a/apps/desktop/src/features/roster/corporation_detail.rs b/src/features/roster/corporation_detail.rs similarity index 100% rename from apps/desktop/src/features/roster/corporation_detail.rs rename to src/features/roster/corporation_detail.rs diff --git a/apps/desktop/src/features/roster/corporation_detail/killmail_loader.rs b/src/features/roster/corporation_detail/killmail_loader.rs similarity index 100% rename from apps/desktop/src/features/roster/corporation_detail/killmail_loader.rs rename to src/features/roster/corporation_detail/killmail_loader.rs diff --git a/apps/desktop/src/features/roster/corporation_detail/tabs.rs b/src/features/roster/corporation_detail/tabs.rs similarity index 100% rename from apps/desktop/src/features/roster/corporation_detail/tabs.rs rename to src/features/roster/corporation_detail/tabs.rs diff --git a/apps/desktop/src/features/roster/corporation_detail/tabs/contacts.rs b/src/features/roster/corporation_detail/tabs/contacts.rs similarity index 100% rename from apps/desktop/src/features/roster/corporation_detail/tabs/contacts.rs rename to src/features/roster/corporation_detail/tabs/contacts.rs diff --git a/apps/desktop/src/features/roster/corporation_detail/tabs/killlog.rs b/src/features/roster/corporation_detail/tabs/killlog.rs similarity index 100% rename from apps/desktop/src/features/roster/corporation_detail/tabs/killlog.rs rename to src/features/roster/corporation_detail/tabs/killlog.rs diff --git a/apps/desktop/src/features/roster/corporation_detail/tabs/shared.rs b/src/features/roster/corporation_detail/tabs/shared.rs similarity index 100% rename from apps/desktop/src/features/roster/corporation_detail/tabs/shared.rs rename to src/features/roster/corporation_detail/tabs/shared.rs diff --git a/apps/desktop/src/features/roster/corporation_detail/tabs/standings.rs b/src/features/roster/corporation_detail/tabs/standings.rs similarity index 100% rename from apps/desktop/src/features/roster/corporation_detail/tabs/standings.rs rename to src/features/roster/corporation_detail/tabs/standings.rs diff --git a/apps/desktop/src/features/roster/entity_search.rs b/src/features/roster/entity_search.rs similarity index 100% rename from apps/desktop/src/features/roster/entity_search.rs rename to src/features/roster/entity_search.rs diff --git a/apps/desktop/src/features/roster/killmail_detail.rs b/src/features/roster/killmail_detail.rs similarity index 100% rename from apps/desktop/src/features/roster/killmail_detail.rs rename to src/features/roster/killmail_detail.rs diff --git a/apps/desktop/src/features/roster/list_row.rs b/src/features/roster/list_row.rs similarity index 100% rename from apps/desktop/src/features/roster/list_row.rs rename to src/features/roster/list_row.rs diff --git a/apps/desktop/src/features/roster/name_link.rs b/src/features/roster/name_link.rs similarity index 100% rename from apps/desktop/src/features/roster/name_link.rs rename to src/features/roster/name_link.rs diff --git a/apps/desktop/src/features/roster/roster.rs b/src/features/roster/roster.rs similarity index 100% rename from apps/desktop/src/features/roster/roster.rs rename to src/features/roster/roster.rs diff --git a/apps/desktop/src/features/roster/roster_tabs.rs b/src/features/roster/roster_tabs.rs similarity index 100% rename from apps/desktop/src/features/roster/roster_tabs.rs rename to src/features/roster/roster_tabs.rs diff --git a/apps/desktop/src/features/roster/search_help.rs b/src/features/roster/search_help.rs similarity index 100% rename from apps/desktop/src/features/roster/search_help.rs rename to src/features/roster/search_help.rs diff --git a/apps/desktop/src/features/roster/squad_ui.rs b/src/features/roster/squad_ui.rs similarity index 100% rename from apps/desktop/src/features/roster/squad_ui.rs rename to src/features/roster/squad_ui.rs diff --git a/apps/desktop/src/features/roster/standing_orders.rs b/src/features/roster/standing_orders.rs similarity index 100% rename from apps/desktop/src/features/roster/standing_orders.rs rename to src/features/roster/standing_orders.rs diff --git a/apps/desktop/src/features/roster/standing_orders/board.rs b/src/features/roster/standing_orders/board.rs similarity index 100% rename from apps/desktop/src/features/roster/standing_orders/board.rs rename to src/features/roster/standing_orders/board.rs diff --git a/apps/desktop/src/features/roster/standing_orders/detail.rs b/src/features/roster/standing_orders/detail.rs similarity index 100% rename from apps/desktop/src/features/roster/standing_orders/detail.rs rename to src/features/roster/standing_orders/detail.rs diff --git a/apps/desktop/src/features/roster/standing_orders/modal.rs b/src/features/roster/standing_orders/modal.rs similarity index 100% rename from apps/desktop/src/features/roster/standing_orders/modal.rs rename to src/features/roster/standing_orders/modal.rs diff --git a/apps/desktop/src/features/roster/standing_orders/ui.rs b/src/features/roster/standing_orders/ui.rs similarity index 100% rename from apps/desktop/src/features/roster/standing_orders/ui.rs rename to src/features/roster/standing_orders/ui.rs diff --git a/apps/desktop/src/features/roster/structure_alerts.rs b/src/features/roster/structure_alerts.rs similarity index 100% rename from apps/desktop/src/features/roster/structure_alerts.rs rename to src/features/roster/structure_alerts.rs diff --git a/apps/desktop/src/features/roster/view_mode.rs b/src/features/roster/view_mode.rs similarity index 100% rename from apps/desktop/src/features/roster/view_mode.rs rename to src/features/roster/view_mode.rs diff --git a/apps/desktop/src/features/settings.rs b/src/features/settings.rs similarity index 100% rename from apps/desktop/src/features/settings.rs rename to src/features/settings.rs diff --git a/apps/desktop/src/features/settings/about_tab.rs b/src/features/settings/about_tab.rs similarity index 100% rename from apps/desktop/src/features/settings/about_tab.rs rename to src/features/settings/about_tab.rs diff --git a/apps/desktop/src/features/settings/accessibility_tab.rs b/src/features/settings/accessibility_tab.rs similarity index 100% rename from apps/desktop/src/features/settings/accessibility_tab.rs rename to src/features/settings/accessibility_tab.rs diff --git a/apps/desktop/src/features/settings/captains_log_tab.rs b/src/features/settings/captains_log_tab.rs similarity index 100% rename from apps/desktop/src/features/settings/captains_log_tab.rs rename to src/features/settings/captains_log_tab.rs diff --git a/apps/desktop/src/features/settings/data_export.rs b/src/features/settings/data_export.rs similarity index 100% rename from apps/desktop/src/features/settings/data_export.rs rename to src/features/settings/data_export.rs diff --git a/apps/desktop/src/features/settings/facility_intel_fit.rs b/src/features/settings/facility_intel_fit.rs similarity index 100% rename from apps/desktop/src/features/settings/facility_intel_fit.rs rename to src/features/settings/facility_intel_fit.rs diff --git a/apps/desktop/src/features/settings/facility_intel_import.rs b/src/features/settings/facility_intel_import.rs similarity index 100% rename from apps/desktop/src/features/settings/facility_intel_import.rs rename to src/features/settings/facility_intel_import.rs diff --git a/apps/desktop/src/features/settings/facility_intel_share.rs b/src/features/settings/facility_intel_share.rs similarity index 100% rename from apps/desktop/src/features/settings/facility_intel_share.rs rename to src/features/settings/facility_intel_share.rs diff --git a/apps/desktop/src/features/settings/facility_tab.rs b/src/features/settings/facility_tab.rs similarity index 100% rename from apps/desktop/src/features/settings/facility_tab.rs rename to src/features/settings/facility_tab.rs diff --git a/apps/desktop/src/features/settings/features_tab.rs b/src/features/settings/features_tab.rs similarity index 100% rename from apps/desktop/src/features/settings/features_tab.rs rename to src/features/settings/features_tab.rs diff --git a/apps/desktop/src/features/settings/i18n.rs b/src/features/settings/i18n.rs similarity index 100% rename from apps/desktop/src/features/settings/i18n.rs rename to src/features/settings/i18n.rs diff --git a/apps/desktop/src/features/settings/log_export.rs b/src/features/settings/log_export.rs similarity index 100% rename from apps/desktop/src/features/settings/log_export.rs rename to src/features/settings/log_export.rs diff --git a/apps/desktop/src/features/settings/mcp_tab.rs b/src/features/settings/mcp_tab.rs similarity index 100% rename from apps/desktop/src/features/settings/mcp_tab.rs rename to src/features/settings/mcp_tab.rs diff --git a/apps/desktop/src/features/settings/storage_tab.rs b/src/features/settings/storage_tab.rs similarity index 100% rename from apps/desktop/src/features/settings/storage_tab.rs rename to src/features/settings/storage_tab.rs diff --git a/apps/desktop/src/features/settings/tags_tab.rs b/src/features/settings/tags_tab.rs similarity index 100% rename from apps/desktop/src/features/settings/tags_tab.rs rename to src/features/settings/tags_tab.rs diff --git a/apps/desktop/src/features/settings/telemetry_tab.rs b/src/features/settings/telemetry_tab.rs similarity index 100% rename from apps/desktop/src/features/settings/telemetry_tab.rs rename to src/features/settings/telemetry_tab.rs diff --git a/apps/desktop/src/features/settings/ui_tab.rs b/src/features/settings/ui_tab.rs similarity index 100% rename from apps/desktop/src/features/settings/ui_tab.rs rename to src/features/settings/ui_tab.rs diff --git a/apps/desktop/src/features/shell.rs b/src/features/shell.rs similarity index 100% rename from apps/desktop/src/features/shell.rs rename to src/features/shell.rs diff --git a/apps/desktop/src/features/shell/command_palette.rs b/src/features/shell/command_palette.rs similarity index 100% rename from apps/desktop/src/features/shell/command_palette.rs rename to src/features/shell/command_palette.rs diff --git a/apps/desktop/src/features/shell/focus_search.rs b/src/features/shell/focus_search.rs similarity index 100% rename from apps/desktop/src/features/shell/focus_search.rs rename to src/features/shell/focus_search.rs diff --git a/apps/desktop/src/features/shell/nav_catalog.rs b/src/features/shell/nav_catalog.rs similarity index 100% rename from apps/desktop/src/features/shell/nav_catalog.rs rename to src/features/shell/nav_catalog.rs diff --git a/apps/desktop/src/features/shell/notifications.rs b/src/features/shell/notifications.rs similarity index 100% rename from apps/desktop/src/features/shell/notifications.rs rename to src/features/shell/notifications.rs diff --git a/apps/desktop/src/features/shell/registry.rs b/src/features/shell/registry.rs similarity index 100% rename from apps/desktop/src/features/shell/registry.rs rename to src/features/shell/registry.rs diff --git a/apps/desktop/src/features/shell/window_chrome.rs b/src/features/shell/window_chrome.rs similarity index 100% rename from apps/desktop/src/features/shell/window_chrome.rs rename to src/features/shell/window_chrome.rs diff --git a/apps/desktop/src/features/shell/window_state.rs b/src/features/shell/window_state.rs similarity index 100% rename from apps/desktop/src/features/shell/window_state.rs rename to src/features/shell/window_state.rs diff --git a/apps/desktop/src/features/shell/window_state/coalesce.rs b/src/features/shell/window_state/coalesce.rs similarity index 100% rename from apps/desktop/src/features/shell/window_state/coalesce.rs rename to src/features/shell/window_state/coalesce.rs diff --git a/apps/desktop/src/features/shell/window_state/validity.rs b/src/features/shell/window_state/validity.rs similarity index 100% rename from apps/desktop/src/features/shell/window_state/validity.rs rename to src/features/shell/window_state/validity.rs diff --git a/apps/desktop/src/features/skills.rs b/src/features/skills.rs similarity index 100% rename from apps/desktop/src/features/skills.rs rename to src/features/skills.rs diff --git a/apps/desktop/src/features/skills/attributes.rs b/src/features/skills/attributes.rs similarity index 100% rename from apps/desktop/src/features/skills/attributes.rs rename to src/features/skills/attributes.rs diff --git a/apps/desktop/src/features/skills/browse.rs b/src/features/skills/browse.rs similarity index 100% rename from apps/desktop/src/features/skills/browse.rs rename to src/features/skills/browse.rs diff --git a/apps/desktop/src/features/skills/format.rs b/src/features/skills/format.rs similarity index 100% rename from apps/desktop/src/features/skills/format.rs rename to src/features/skills/format.rs diff --git a/apps/desktop/src/features/skills/header.rs b/src/features/skills/header.rs similarity index 100% rename from apps/desktop/src/features/skills/header.rs rename to src/features/skills/header.rs diff --git a/apps/desktop/src/features/skills/layout_shell.rs b/src/features/skills/layout_shell.rs similarity index 100% rename from apps/desktop/src/features/skills/layout_shell.rs rename to src/features/skills/layout_shell.rs diff --git a/apps/desktop/src/features/skills/optimizer.rs b/src/features/skills/optimizer.rs similarity index 100% rename from apps/desktop/src/features/skills/optimizer.rs rename to src/features/skills/optimizer.rs diff --git a/apps/desktop/src/features/skills/plan_csv.rs b/src/features/skills/plan_csv.rs similarity index 100% rename from apps/desktop/src/features/skills/plan_csv.rs rename to src/features/skills/plan_csv.rs diff --git a/apps/desktop/src/features/skills/plan_math.rs b/src/features/skills/plan_math.rs similarity index 100% rename from apps/desktop/src/features/skills/plan_math.rs rename to src/features/skills/plan_math.rs diff --git a/apps/desktop/src/features/skills/plan_summary.rs b/src/features/skills/plan_summary.rs similarity index 100% rename from apps/desktop/src/features/skills/plan_summary.rs rename to src/features/skills/plan_summary.rs diff --git a/apps/desktop/src/features/skills/plan_summary/attr_optimization_section.rs b/src/features/skills/plan_summary/attr_optimization_section.rs similarity index 100% rename from apps/desktop/src/features/skills/plan_summary/attr_optimization_section.rs rename to src/features/skills/plan_summary/attr_optimization_section.rs diff --git a/apps/desktop/src/features/skills/plan_summary/bar_chart.rs b/src/features/skills/plan_summary/bar_chart.rs similarity index 100% rename from apps/desktop/src/features/skills/plan_summary/bar_chart.rs rename to src/features/skills/plan_summary/bar_chart.rs diff --git a/apps/desktop/src/features/skills/plan_summary/implant_effect_section.rs b/src/features/skills/plan_summary/implant_effect_section.rs similarity index 100% rename from apps/desktop/src/features/skills/plan_summary/implant_effect_section.rs rename to src/features/skills/plan_summary/implant_effect_section.rs diff --git a/apps/desktop/src/features/skills/plan_summary/injector_section.rs b/src/features/skills/plan_summary/injector_section.rs similarity index 100% rename from apps/desktop/src/features/skills/plan_summary/injector_section.rs rename to src/features/skills/plan_summary/injector_section.rs diff --git a/apps/desktop/src/features/skills/plan_summary/plan_totals_section.rs b/src/features/skills/plan_summary/plan_totals_section.rs similarity index 100% rename from apps/desktop/src/features/skills/plan_summary/plan_totals_section.rs rename to src/features/skills/plan_summary/plan_totals_section.rs diff --git a/apps/desktop/src/features/skills/plan_summary/time_by_group_section.rs b/src/features/skills/plan_summary/time_by_group_section.rs similarity index 100% rename from apps/desktop/src/features/skills/plan_summary/time_by_group_section.rs rename to src/features/skills/plan_summary/time_by_group_section.rs diff --git a/apps/desktop/src/features/skills/plan_summary/time_by_pair_section.rs b/src/features/skills/plan_summary/time_by_pair_section.rs similarity index 100% rename from apps/desktop/src/features/skills/plan_summary/time_by_pair_section.rs rename to src/features/skills/plan_summary/time_by_pair_section.rs diff --git a/apps/desktop/src/features/skills/queue.rs b/src/features/skills/queue.rs similarity index 100% rename from apps/desktop/src/features/skills/queue.rs rename to src/features/skills/queue.rs diff --git a/apps/desktop/src/features/skills/queue_section.rs b/src/features/skills/queue_section.rs similarity index 100% rename from apps/desktop/src/features/skills/queue_section.rs rename to src/features/skills/queue_section.rs diff --git a/apps/desktop/src/features/skills/queue_section/col_header.rs b/src/features/skills/queue_section/col_header.rs similarity index 100% rename from apps/desktop/src/features/skills/queue_section/col_header.rs rename to src/features/skills/queue_section/col_header.rs diff --git a/apps/desktop/src/features/skills/queue_section/empty_state.rs b/src/features/skills/queue_section/empty_state.rs similarity index 100% rename from apps/desktop/src/features/skills/queue_section/empty_state.rs rename to src/features/skills/queue_section/empty_state.rs diff --git a/apps/desktop/src/features/skills/queue_section/footer.rs b/src/features/skills/queue_section/footer.rs similarity index 100% rename from apps/desktop/src/features/skills/queue_section/footer.rs rename to src/features/skills/queue_section/footer.rs diff --git a/apps/desktop/src/features/skills/queue_section/row.rs b/src/features/skills/queue_section/row.rs similarity index 100% rename from apps/desktop/src/features/skills/queue_section/row.rs rename to src/features/skills/queue_section/row.rs diff --git a/apps/desktop/src/features/skills/queue_timing.rs b/src/features/skills/queue_timing.rs similarity index 100% rename from apps/desktop/src/features/skills/queue_timing.rs rename to src/features/skills/queue_timing.rs diff --git a/apps/desktop/src/features/skills/right_panel.rs b/src/features/skills/right_panel.rs similarity index 100% rename from apps/desktop/src/features/skills/right_panel.rs rename to src/features/skills/right_panel.rs diff --git a/apps/desktop/src/features/skills/right_panel/attributes_tab.rs b/src/features/skills/right_panel/attributes_tab.rs similarity index 100% rename from apps/desktop/src/features/skills/right_panel/attributes_tab.rs rename to src/features/skills/right_panel/attributes_tab.rs diff --git a/apps/desktop/src/features/skills/right_panel/attributes_tab/attr_row.rs b/src/features/skills/right_panel/attributes_tab/attr_row.rs similarity index 100% rename from apps/desktop/src/features/skills/right_panel/attributes_tab/attr_row.rs rename to src/features/skills/right_panel/attributes_tab/attr_row.rs diff --git a/apps/desktop/src/features/skills/right_panel/attributes_tab/rate_grid.rs b/src/features/skills/right_panel/attributes_tab/rate_grid.rs similarity index 100% rename from apps/desktop/src/features/skills/right_panel/attributes_tab/rate_grid.rs rename to src/features/skills/right_panel/attributes_tab/rate_grid.rs diff --git a/apps/desktop/src/features/skills/right_panel/attributes_tab/remap_card.rs b/src/features/skills/right_panel/attributes_tab/remap_card.rs similarity index 100% rename from apps/desktop/src/features/skills/right_panel/attributes_tab/remap_card.rs rename to src/features/skills/right_panel/attributes_tab/remap_card.rs diff --git a/apps/desktop/src/features/skills/right_panel/attributes_tab/section_header.rs b/src/features/skills/right_panel/attributes_tab/section_header.rs similarity index 100% rename from apps/desktop/src/features/skills/right_panel/attributes_tab/section_header.rs rename to src/features/skills/right_panel/attributes_tab/section_header.rs diff --git a/apps/desktop/src/features/skills/right_panel/browser_tab.rs b/src/features/skills/right_panel/browser_tab.rs similarity index 100% rename from apps/desktop/src/features/skills/right_panel/browser_tab.rs rename to src/features/skills/right_panel/browser_tab.rs diff --git a/apps/desktop/src/features/skills/right_panel/browser_tab/group_header.rs b/src/features/skills/right_panel/browser_tab/group_header.rs similarity index 100% rename from apps/desktop/src/features/skills/right_panel/browser_tab/group_header.rs rename to src/features/skills/right_panel/browser_tab/group_header.rs diff --git a/apps/desktop/src/features/skills/right_panel/browser_tab/search_bar.rs b/src/features/skills/right_panel/browser_tab/search_bar.rs similarity index 100% rename from apps/desktop/src/features/skills/right_panel/browser_tab/search_bar.rs rename to src/features/skills/right_panel/browser_tab/search_bar.rs diff --git a/apps/desktop/src/features/skills/right_panel/browser_tab/skill_row.rs b/src/features/skills/right_panel/browser_tab/skill_row.rs similarity index 100% rename from apps/desktop/src/features/skills/right_panel/browser_tab/skill_row.rs rename to src/features/skills/right_panel/browser_tab/skill_row.rs diff --git a/apps/desktop/src/features/skills/right_panel/plans_tab.rs b/src/features/skills/right_panel/plans_tab.rs similarity index 100% rename from apps/desktop/src/features/skills/right_panel/plans_tab.rs rename to src/features/skills/right_panel/plans_tab.rs diff --git a/apps/desktop/src/features/skills/right_panel/plans_tab/empty_state.rs b/src/features/skills/right_panel/plans_tab/empty_state.rs similarity index 100% rename from apps/desktop/src/features/skills/right_panel/plans_tab/empty_state.rs rename to src/features/skills/right_panel/plans_tab/empty_state.rs diff --git a/apps/desktop/src/features/skills/right_panel/plans_tab/from_queue_button.rs b/src/features/skills/right_panel/plans_tab/from_queue_button.rs similarity index 100% rename from apps/desktop/src/features/skills/right_panel/plans_tab/from_queue_button.rs rename to src/features/skills/right_panel/plans_tab/from_queue_button.rs diff --git a/apps/desktop/src/features/skills/right_panel/plans_tab/from_selected_button.rs b/src/features/skills/right_panel/plans_tab/from_selected_button.rs similarity index 100% rename from apps/desktop/src/features/skills/right_panel/plans_tab/from_selected_button.rs rename to src/features/skills/right_panel/plans_tab/from_selected_button.rs diff --git a/apps/desktop/src/features/skills/right_panel/plans_tab/new_plan_button.rs b/src/features/skills/right_panel/plans_tab/new_plan_button.rs similarity index 100% rename from apps/desktop/src/features/skills/right_panel/plans_tab/new_plan_button.rs rename to src/features/skills/right_panel/plans_tab/new_plan_button.rs diff --git a/apps/desktop/src/features/skills/right_panel/plans_tab/plan_card.rs b/src/features/skills/right_panel/plans_tab/plan_card.rs similarity index 100% rename from apps/desktop/src/features/skills/right_panel/plans_tab/plan_card.rs rename to src/features/skills/right_panel/plans_tab/plan_card.rs diff --git a/apps/desktop/src/features/skills/right_panel/queue_tab.rs b/src/features/skills/right_panel/queue_tab.rs similarity index 100% rename from apps/desktop/src/features/skills/right_panel/queue_tab.rs rename to src/features/skills/right_panel/queue_tab.rs diff --git a/apps/desktop/src/features/skills/skill_plan_editor.rs b/src/features/skills/skill_plan_editor.rs similarity index 100% rename from apps/desktop/src/features/skills/skill_plan_editor.rs rename to src/features/skills/skill_plan_editor.rs diff --git a/apps/desktop/src/features/skills/skill_plan_editor/clipboard_win.rs b/src/features/skills/skill_plan_editor/clipboard_win.rs similarity index 100% rename from apps/desktop/src/features/skills/skill_plan_editor/clipboard_win.rs rename to src/features/skills/skill_plan_editor/clipboard_win.rs diff --git a/apps/desktop/src/features/skills/skill_plan_editor/eft.rs b/src/features/skills/skill_plan_editor/eft.rs similarity index 100% rename from apps/desktop/src/features/skills/skill_plan_editor/eft.rs rename to src/features/skills/skill_plan_editor/eft.rs diff --git a/apps/desktop/src/features/skills/skill_plan_editor/empty_state.rs b/src/features/skills/skill_plan_editor/empty_state.rs similarity index 100% rename from apps/desktop/src/features/skills/skill_plan_editor/empty_state.rs rename to src/features/skills/skill_plan_editor/empty_state.rs diff --git a/apps/desktop/src/features/skills/skill_plan_editor/entry_row.rs b/src/features/skills/skill_plan_editor/entry_row.rs similarity index 100% rename from apps/desktop/src/features/skills/skill_plan_editor/entry_row.rs rename to src/features/skills/skill_plan_editor/entry_row.rs diff --git a/apps/desktop/src/features/skills/skill_plan_editor/header.rs b/src/features/skills/skill_plan_editor/header.rs similarity index 100% rename from apps/desktop/src/features/skills/skill_plan_editor/header.rs rename to src/features/skills/skill_plan_editor/header.rs diff --git a/apps/desktop/src/features/skills/skill_plan_editor/import_export.rs b/src/features/skills/skill_plan_editor/import_export.rs similarity index 100% rename from apps/desktop/src/features/skills/skill_plan_editor/import_export.rs rename to src/features/skills/skill_plan_editor/import_export.rs diff --git a/apps/desktop/src/features/skills/skill_plan_editor/milestone_divider.rs b/src/features/skills/skill_plan_editor/milestone_divider.rs similarity index 100% rename from apps/desktop/src/features/skills/skill_plan_editor/milestone_divider.rs rename to src/features/skills/skill_plan_editor/milestone_divider.rs diff --git a/apps/desktop/src/features/skills/skill_plan_editor/picker.rs b/src/features/skills/skill_plan_editor/picker.rs similarity index 100% rename from apps/desktop/src/features/skills/skill_plan_editor/picker.rs rename to src/features/skills/skill_plan_editor/picker.rs diff --git a/apps/desktop/src/features/skills/skill_plan_editor/picker/empty_state.rs b/src/features/skills/skill_plan_editor/picker/empty_state.rs similarity index 100% rename from apps/desktop/src/features/skills/skill_plan_editor/picker/empty_state.rs rename to src/features/skills/skill_plan_editor/picker/empty_state.rs diff --git a/apps/desktop/src/features/skills/skill_plan_editor/picker/group_header.rs b/src/features/skills/skill_plan_editor/picker/group_header.rs similarity index 100% rename from apps/desktop/src/features/skills/skill_plan_editor/picker/group_header.rs rename to src/features/skills/skill_plan_editor/picker/group_header.rs diff --git a/apps/desktop/src/features/skills/skill_plan_editor/picker/item_row.rs b/src/features/skills/skill_plan_editor/picker/item_row.rs similarity index 100% rename from apps/desktop/src/features/skills/skill_plan_editor/picker/item_row.rs rename to src/features/skills/skill_plan_editor/picker/item_row.rs diff --git a/apps/desktop/src/features/skills/skill_plan_editor/picker/result_row.rs b/src/features/skills/skill_plan_editor/picker/result_row.rs similarity index 100% rename from apps/desktop/src/features/skills/skill_plan_editor/picker/result_row.rs rename to src/features/skills/skill_plan_editor/picker/result_row.rs diff --git a/apps/desktop/src/features/skills/skill_plan_editor/picker/search_bar.rs b/src/features/skills/skill_plan_editor/picker/search_bar.rs similarity index 100% rename from apps/desktop/src/features/skills/skill_plan_editor/picker/search_bar.rs rename to src/features/skills/skill_plan_editor/picker/search_bar.rs diff --git a/apps/desktop/src/features/skills/skill_plan_editor/picker/tabs.rs b/src/features/skills/skill_plan_editor/picker/tabs.rs similarity index 100% rename from apps/desktop/src/features/skills/skill_plan_editor/picker/tabs.rs rename to src/features/skills/skill_plan_editor/picker/tabs.rs diff --git a/apps/desktop/src/features/skills/skill_plan_editor/plan_entry_list.rs b/src/features/skills/skill_plan_editor/plan_entry_list.rs similarity index 100% rename from apps/desktop/src/features/skills/skill_plan_editor/plan_entry_list.rs rename to src/features/skills/skill_plan_editor/plan_entry_list.rs diff --git a/apps/desktop/src/features/skills/skill_plan_editor/stats_strip.rs b/src/features/skills/skill_plan_editor/stats_strip.rs similarity index 100% rename from apps/desktop/src/features/skills/skill_plan_editor/stats_strip.rs rename to src/features/skills/skill_plan_editor/stats_strip.rs diff --git a/apps/desktop/src/features/skills/skill_plan_editor/summary.rs b/src/features/skills/skill_plan_editor/summary.rs similarity index 100% rename from apps/desktop/src/features/skills/skill_plan_editor/summary.rs rename to src/features/skills/skill_plan_editor/summary.rs diff --git a/apps/desktop/src/features/skills/skill_plan_manager.rs b/src/features/skills/skill_plan_manager.rs similarity index 100% rename from apps/desktop/src/features/skills/skill_plan_manager.rs rename to src/features/skills/skill_plan_manager.rs diff --git a/apps/desktop/src/features/skills/skills_compare.rs b/src/features/skills/skills_compare.rs similarity index 100% rename from apps/desktop/src/features/skills/skills_compare.rs rename to src/features/skills/skills_compare.rs diff --git a/apps/desktop/src/features/skills/skills_compare/header.rs b/src/features/skills/skills_compare/header.rs similarity index 100% rename from apps/desktop/src/features/skills/skills_compare/header.rs rename to src/features/skills/skills_compare/header.rs diff --git a/apps/desktop/src/features/skills/skills_compare/matrix.rs b/src/features/skills/skills_compare/matrix.rs similarity index 100% rename from apps/desktop/src/features/skills/skills_compare/matrix.rs rename to src/features/skills/skills_compare/matrix.rs diff --git a/apps/desktop/src/features/skills/skills_compare/model.rs b/src/features/skills/skills_compare/model.rs similarity index 100% rename from apps/desktop/src/features/skills/skills_compare/model.rs rename to src/features/skills/skills_compare/model.rs diff --git a/apps/desktop/src/features/skills/skills_compare/summary.rs b/src/features/skills/skills_compare/summary.rs similarity index 100% rename from apps/desktop/src/features/skills/skills_compare/summary.rs rename to src/features/skills/skills_compare/summary.rs diff --git a/apps/desktop/src/features/skills/training_hero.rs b/src/features/skills/training_hero.rs similarity index 100% rename from apps/desktop/src/features/skills/training_hero.rs rename to src/features/skills/training_hero.rs diff --git a/apps/desktop/src/features/skills/training_hero/active.rs b/src/features/skills/training_hero/active.rs similarity index 100% rename from apps/desktop/src/features/skills/training_hero/active.rs rename to src/features/skills/training_hero/active.rs diff --git a/apps/desktop/src/features/skills/training_hero/idle.rs b/src/features/skills/training_hero/idle.rs similarity index 100% rename from apps/desktop/src/features/skills/training_hero/idle.rs rename to src/features/skills/training_hero/idle.rs diff --git a/apps/desktop/src/features/skills/training_hero/pip_row.rs b/src/features/skills/training_hero/pip_row.rs similarity index 100% rename from apps/desktop/src/features/skills/training_hero/pip_row.rs rename to src/features/skills/training_hero/pip_row.rs diff --git a/apps/desktop/src/features/skills/training_hero/queue_item.rs b/src/features/skills/training_hero/queue_item.rs similarity index 100% rename from apps/desktop/src/features/skills/training_hero/queue_item.rs rename to src/features/skills/training_hero/queue_item.rs diff --git a/apps/desktop/src/features/skills/training_hero/right_col.rs b/src/features/skills/training_hero/right_col.rs similarity index 100% rename from apps/desktop/src/features/skills/training_hero/right_col.rs rename to src/features/skills/training_hero/right_col.rs diff --git a/apps/desktop/src/features/skills/warning_strip.rs b/src/features/skills/warning_strip.rs similarity index 100% rename from apps/desktop/src/features/skills/warning_strip.rs rename to src/features/skills/warning_strip.rs diff --git a/apps/desktop/src/features/splash.rs b/src/features/splash.rs similarity index 100% rename from apps/desktop/src/features/splash.rs rename to src/features/splash.rs diff --git a/apps/desktop/src/features/splash/animation.rs b/src/features/splash/animation.rs similarity index 100% rename from apps/desktop/src/features/splash/animation.rs rename to src/features/splash/animation.rs diff --git a/apps/desktop/src/features/splash/preflight.rs b/src/features/splash/preflight.rs similarity index 100% rename from apps/desktop/src/features/splash/preflight.rs rename to src/features/splash/preflight.rs diff --git a/apps/desktop/src/features/splash/seed.rs b/src/features/splash/seed.rs similarity index 100% rename from apps/desktop/src/features/splash/seed.rs rename to src/features/splash/seed.rs diff --git a/apps/desktop/src/features/splash/status_message.rs b/src/features/splash/status_message.rs similarity index 100% rename from apps/desktop/src/features/splash/status_message.rs rename to src/features/splash/status_message.rs diff --git a/apps/desktop/src/features/splash/version.rs b/src/features/splash/version.rs similarity index 100% rename from apps/desktop/src/features/splash/version.rs rename to src/features/splash/version.rs diff --git a/apps/desktop/src/features/wallet.rs b/src/features/wallet.rs similarity index 100% rename from apps/desktop/src/features/wallet.rs rename to src/features/wallet.rs diff --git a/apps/desktop/src/features/wallet/budget.rs b/src/features/wallet/budget.rs similarity index 100% rename from apps/desktop/src/features/wallet/budget.rs rename to src/features/wallet/budget.rs diff --git a/apps/desktop/src/features/wallet/budget_engine.rs b/src/features/wallet/budget_engine.rs similarity index 100% rename from apps/desktop/src/features/wallet/budget_engine.rs rename to src/features/wallet/budget_engine.rs diff --git a/apps/desktop/src/features/wallet/budget_reflect.rs b/src/features/wallet/budget_reflect.rs similarity index 100% rename from apps/desktop/src/features/wallet/budget_reflect.rs rename to src/features/wallet/budget_reflect.rs diff --git a/apps/desktop/src/features/wallet/budget_rules.rs b/src/features/wallet/budget_rules.rs similarity index 100% rename from apps/desktop/src/features/wallet/budget_rules.rs rename to src/features/wallet/budget_rules.rs diff --git a/apps/desktop/src/features/wallet/budget_view.rs b/src/features/wallet/budget_view.rs similarity index 100% rename from apps/desktop/src/features/wallet/budget_view.rs rename to src/features/wallet/budget_view.rs diff --git a/apps/desktop/src/features/wallet/contract_detail.rs b/src/features/wallet/contract_detail.rs similarity index 100% rename from apps/desktop/src/features/wallet/contract_detail.rs rename to src/features/wallet/contract_detail.rs diff --git a/apps/desktop/src/features/wallet/header.rs b/src/features/wallet/header.rs similarity index 100% rename from apps/desktop/src/features/wallet/header.rs rename to src/features/wallet/header.rs diff --git a/apps/desktop/src/features/wallet/hero.rs b/src/features/wallet/hero.rs similarity index 100% rename from apps/desktop/src/features/wallet/hero.rs rename to src/features/wallet/hero.rs diff --git a/apps/desktop/src/features/wallet/i18n.rs b/src/features/wallet/i18n.rs similarity index 100% rename from apps/desktop/src/features/wallet/i18n.rs rename to src/features/wallet/i18n.rs diff --git a/apps/desktop/src/features/wallet/loaders.rs b/src/features/wallet/loaders.rs similarity index 100% rename from apps/desktop/src/features/wallet/loaders.rs rename to src/features/wallet/loaders.rs diff --git a/apps/desktop/src/features/wallet/rule_pack.rs b/src/features/wallet/rule_pack.rs similarity index 100% rename from apps/desktop/src/features/wallet/rule_pack.rs rename to src/features/wallet/rule_pack.rs diff --git a/apps/desktop/src/features/wallet/selection.rs b/src/features/wallet/selection.rs similarity index 100% rename from apps/desktop/src/features/wallet/selection.rs rename to src/features/wallet/selection.rs diff --git a/apps/desktop/src/features/wallet/shell.rs b/src/features/wallet/shell.rs similarity index 100% rename from apps/desktop/src/features/wallet/shell.rs rename to src/features/wallet/shell.rs diff --git a/apps/desktop/src/features/wallet/side_filter.rs b/src/features/wallet/side_filter.rs similarity index 100% rename from apps/desktop/src/features/wallet/side_filter.rs rename to src/features/wallet/side_filter.rs diff --git a/apps/desktop/src/features/wallet/wallets_view.rs b/src/features/wallet/wallets_view.rs similarity index 100% rename from apps/desktop/src/features/wallet/wallets_view.rs rename to src/features/wallet/wallets_view.rs diff --git a/apps/desktop/src/features/wizard.rs b/src/features/wizard.rs similarity index 100% rename from apps/desktop/src/features/wizard.rs rename to src/features/wizard.rs diff --git a/apps/desktop/src/main.rs b/src/main.rs similarity index 100% rename from apps/desktop/src/main.rs rename to src/main.rs diff --git a/apps/desktop/src/services.rs b/src/services.rs similarity index 100% rename from apps/desktop/src/services.rs rename to src/services.rs diff --git a/apps/desktop/src/services/corp_eligibility.rs b/src/services/corp_eligibility.rs similarity index 100% rename from apps/desktop/src/services/corp_eligibility.rs rename to src/services/corp_eligibility.rs diff --git a/apps/desktop/src/services/fitting.rs b/src/services/fitting.rs similarity index 100% rename from apps/desktop/src/services/fitting.rs rename to src/services/fitting.rs diff --git a/apps/desktop/src/services/i18n.rs b/src/services/i18n.rs similarity index 100% rename from apps/desktop/src/services/i18n.rs rename to src/services/i18n.rs diff --git a/apps/desktop/src/services/i18n/language.rs b/src/services/i18n/language.rs similarity index 100% rename from apps/desktop/src/services/i18n/language.rs rename to src/services/i18n/language.rs diff --git a/apps/desktop/src/services/images.rs b/src/services/images.rs similarity index 100% rename from apps/desktop/src/services/images.rs rename to src/services/images.rs diff --git a/apps/desktop/src/services/inventory_lots.rs b/src/services/inventory_lots.rs similarity index 100% rename from apps/desktop/src/services/inventory_lots.rs rename to src/services/inventory_lots.rs diff --git a/apps/desktop/src/services/location_search.rs b/src/services/location_search.rs similarity index 100% rename from apps/desktop/src/services/location_search.rs rename to src/services/location_search.rs diff --git a/apps/desktop/src/services/market_prices.rs b/src/services/market_prices.rs similarity index 100% rename from apps/desktop/src/services/market_prices.rs rename to src/services/market_prices.rs diff --git a/apps/desktop/src/services/mcp.rs b/src/services/mcp.rs similarity index 100% rename from apps/desktop/src/services/mcp.rs rename to src/services/mcp.rs diff --git a/apps/desktop/src/services/mcp/args.rs b/src/services/mcp/args.rs similarity index 100% rename from apps/desktop/src/services/mcp/args.rs rename to src/services/mcp/args.rs diff --git a/apps/desktop/src/services/mcp/bridge.rs b/src/services/mcp/bridge.rs similarity index 100% rename from apps/desktop/src/services/mcp/bridge.rs rename to src/services/mcp/bridge.rs diff --git a/apps/desktop/src/services/mcp/names.rs b/src/services/mcp/names.rs similarity index 100% rename from apps/desktop/src/services/mcp/names.rs rename to src/services/mcp/names.rs diff --git a/apps/desktop/src/services/mcp/protocol.rs b/src/services/mcp/protocol.rs similarity index 100% rename from apps/desktop/src/services/mcp/protocol.rs rename to src/services/mcp/protocol.rs diff --git a/apps/desktop/src/services/mcp/reload.rs b/src/services/mcp/reload.rs similarity index 100% rename from apps/desktop/src/services/mcp/reload.rs rename to src/services/mcp/reload.rs diff --git a/apps/desktop/src/services/mcp/server.rs b/src/services/mcp/server.rs similarity index 100% rename from apps/desktop/src/services/mcp/server.rs rename to src/services/mcp/server.rs diff --git a/apps/desktop/src/services/mcp/tool.rs b/src/services/mcp/tool.rs similarity index 100% rename from apps/desktop/src/services/mcp/tool.rs rename to src/services/mcp/tool.rs diff --git a/apps/desktop/src/services/mcp/tools_captains_log.rs b/src/services/mcp/tools_captains_log.rs similarity index 100% rename from apps/desktop/src/services/mcp/tools_captains_log.rs rename to src/services/mcp/tools_captains_log.rs diff --git a/apps/desktop/src/services/mcp/tools_dossier.rs b/src/services/mcp/tools_dossier.rs similarity index 100% rename from apps/desktop/src/services/mcp/tools_dossier.rs rename to src/services/mcp/tools_dossier.rs diff --git a/apps/desktop/src/services/mcp/tools_mail.rs b/src/services/mcp/tools_mail.rs similarity index 100% rename from apps/desktop/src/services/mcp/tools_mail.rs rename to src/services/mcp/tools_mail.rs diff --git a/apps/desktop/src/services/mcp/tools_objectives.rs b/src/services/mcp/tools_objectives.rs similarity index 100% rename from apps/desktop/src/services/mcp/tools_objectives.rs rename to src/services/mcp/tools_objectives.rs diff --git a/apps/desktop/src/services/mcp/tools_read.rs b/src/services/mcp/tools_read.rs similarity index 100% rename from apps/desktop/src/services/mcp/tools_read.rs rename to src/services/mcp/tools_read.rs diff --git a/apps/desktop/src/services/mcp/tools_write.rs b/src/services/mcp/tools_write.rs similarity index 100% rename from apps/desktop/src/services/mcp/tools_write.rs rename to src/services/mcp/tools_write.rs diff --git a/apps/desktop/src/services/mcp/transport.rs b/src/services/mcp/transport.rs similarity index 100% rename from apps/desktop/src/services/mcp/transport.rs rename to src/services/mcp/transport.rs diff --git a/apps/desktop/src/services/migration.rs b/src/services/migration.rs similarity index 100% rename from apps/desktop/src/services/migration.rs rename to src/services/migration.rs diff --git a/apps/desktop/src/services/migration/v0_6_11.rs b/src/services/migration/v0_6_11.rs similarity index 100% rename from apps/desktop/src/services/migration/v0_6_11.rs rename to src/services/migration/v0_6_11.rs diff --git a/apps/desktop/src/services/migration/v0_6_20.rs b/src/services/migration/v0_6_20.rs similarity index 100% rename from apps/desktop/src/services/migration/v0_6_20.rs rename to src/services/migration/v0_6_20.rs diff --git a/apps/desktop/src/services/migration/v0_6_8.rs b/src/services/migration/v0_6_8.rs similarity index 100% rename from apps/desktop/src/services/migration/v0_6_8.rs rename to src/services/migration/v0_6_8.rs diff --git a/apps/desktop/src/services/parsing.rs b/src/services/parsing.rs similarity index 100% rename from apps/desktop/src/services/parsing.rs rename to src/services/parsing.rs diff --git a/apps/desktop/src/services/parsing/dispatch.rs b/src/services/parsing/dispatch.rs similarity index 100% rename from apps/desktop/src/services/parsing/dispatch.rs rename to src/services/parsing/dispatch.rs diff --git a/apps/desktop/src/services/parsing/eft.rs b/src/services/parsing/eft.rs similarity index 100% rename from apps/desktop/src/services/parsing/eft.rs rename to src/services/parsing/eft.rs diff --git a/apps/desktop/src/services/parsing/level.rs b/src/services/parsing/level.rs similarity index 100% rename from apps/desktop/src/services/parsing/level.rs rename to src/services/parsing/level.rs diff --git a/apps/desktop/src/services/parsing/quantity.rs b/src/services/parsing/quantity.rs similarity index 100% rename from apps/desktop/src/services/parsing/quantity.rs rename to src/services/parsing/quantity.rs diff --git a/apps/desktop/src/services/parsing/resolve.rs b/src/services/parsing/resolve.rs similarity index 100% rename from apps/desktop/src/services/parsing/resolve.rs rename to src/services/parsing/resolve.rs diff --git a/apps/desktop/src/services/parsing/sanitize.rs b/src/services/parsing/sanitize.rs similarity index 100% rename from apps/desktop/src/services/parsing/sanitize.rs rename to src/services/parsing/sanitize.rs diff --git a/apps/desktop/src/services/pod_pack.rs b/src/services/pod_pack.rs similarity index 100% rename from apps/desktop/src/services/pod_pack.rs rename to src/services/pod_pack.rs diff --git a/apps/desktop/src/services/prices.rs b/src/services/prices.rs similarity index 100% rename from apps/desktop/src/services/prices.rs rename to src/services/prices.rs diff --git a/apps/desktop/src/services/telemetry.rs b/src/services/telemetry.rs similarity index 100% rename from apps/desktop/src/services/telemetry.rs rename to src/services/telemetry.rs diff --git a/apps/desktop/src/services/telemetry/collector.rs b/src/services/telemetry/collector.rs similarity index 100% rename from apps/desktop/src/services/telemetry/collector.rs rename to src/services/telemetry/collector.rs diff --git a/apps/desktop/src/services/telemetry/contract.rs b/src/services/telemetry/contract.rs similarity index 99% rename from apps/desktop/src/services/telemetry/contract.rs rename to src/services/telemetry/contract.rs index d192274f..76a6adfe 100644 --- a/apps/desktop/src/services/telemetry/contract.rs +++ b/src/services/telemetry/contract.rs @@ -441,8 +441,8 @@ mod conformance { use super::*; - const WORKER_CONTRACT_TS: &str = include_str!("../../../../../apps/telemetry/src/contract.ts"); - const D1_INIT_SQL: &str = include_str!("../../../../../apps/telemetry/migrations/0001_init.sql"); + const WORKER_CONTRACT_TS: &str = include_str!("../../../web/telemetry/src/contract.ts"); + const D1_INIT_SQL: &str = include_str!("../../../web/telemetry/migrations/0001_init.sql"); fn settings_preview_batch() -> Batch { Batch { diff --git a/apps/desktop/src/services/telemetry/crash.rs b/src/services/telemetry/crash.rs similarity index 100% rename from apps/desktop/src/services/telemetry/crash.rs rename to src/services/telemetry/crash.rs diff --git a/apps/desktop/src/services/telemetry/pii.rs b/src/services/telemetry/pii.rs similarity index 100% rename from apps/desktop/src/services/telemetry/pii.rs rename to src/services/telemetry/pii.rs diff --git a/apps/desktop/src/services/updater.rs b/src/services/updater.rs similarity index 100% rename from apps/desktop/src/services/updater.rs rename to src/services/updater.rs diff --git a/apps/desktop/src/store.rs b/src/store.rs similarity index 100% rename from apps/desktop/src/store.rs rename to src/store.rs diff --git a/apps/desktop/src/store/asset_filter.rs b/src/store/asset_filter.rs similarity index 100% rename from apps/desktop/src/store/asset_filter.rs rename to src/store/asset_filter.rs diff --git a/apps/desktop/src/store/bootstrap.rs b/src/store/bootstrap.rs similarity index 100% rename from apps/desktop/src/store/bootstrap.rs rename to src/store/bootstrap.rs diff --git a/apps/desktop/src/store/data_restore.rs b/src/store/data_restore.rs similarity index 100% rename from apps/desktop/src/store/data_restore.rs rename to src/store/data_restore.rs diff --git a/apps/desktop/src/store/fs_kind.rs b/src/store/fs_kind.rs similarity index 100% rename from apps/desktop/src/store/fs_kind.rs rename to src/store/fs_kind.rs diff --git a/apps/desktop/src/store/images.rs b/src/store/images.rs similarity index 100% rename from apps/desktop/src/store/images.rs rename to src/store/images.rs diff --git a/apps/desktop/src/store/killmail_slot.rs b/src/store/killmail_slot.rs similarity index 100% rename from apps/desktop/src/store/killmail_slot.rs rename to src/store/killmail_slot.rs diff --git a/apps/desktop/src/store/lease.rs b/src/store/lease.rs similarity index 100% rename from apps/desktop/src/store/lease.rs rename to src/store/lease.rs diff --git a/apps/desktop/src/store/model.rs b/src/store/model.rs similarity index 100% rename from apps/desktop/src/store/model.rs rename to src/store/model.rs diff --git a/apps/desktop/src/store/model/abyssal_item.rs b/src/store/model/abyssal_item.rs similarity index 100% rename from apps/desktop/src/store/model/abyssal_item.rs rename to src/store/model/abyssal_item.rs diff --git a/apps/desktop/src/store/model/abyssal_module_stat.rs b/src/store/model/abyssal_module_stat.rs similarity index 100% rename from apps/desktop/src/store/model/abyssal_module_stat.rs rename to src/store/model/abyssal_module_stat.rs diff --git a/apps/desktop/src/store/model/abyssal_source_type_filter.rs b/src/store/model/abyssal_source_type_filter.rs similarity index 100% rename from apps/desktop/src/store/model/abyssal_source_type_filter.rs rename to src/store/model/abyssal_source_type_filter.rs diff --git a/apps/desktop/src/store/model/abyssal_stat_template.rs b/src/store/model/abyssal_stat_template.rs similarity index 100% rename from apps/desktop/src/store/model/abyssal_stat_template.rs rename to src/store/model/abyssal_stat_template.rs diff --git a/apps/desktop/src/store/model/agent_type.rs b/src/store/model/agent_type.rs similarity index 100% rename from apps/desktop/src/store/model/agent_type.rs rename to src/store/model/agent_type.rs diff --git a/apps/desktop/src/store/model/all_blueprints.rs b/src/store/model/all_blueprints.rs similarity index 100% rename from apps/desktop/src/store/model/all_blueprints.rs rename to src/store/model/all_blueprints.rs diff --git a/apps/desktop/src/store/model/all_industry_jobs.rs b/src/store/model/all_industry_jobs.rs similarity index 100% rename from apps/desktop/src/store/model/all_industry_jobs.rs rename to src/store/model/all_industry_jobs.rs diff --git a/apps/desktop/src/store/model/alliance.rs b/src/store/model/alliance.rs similarity index 100% rename from apps/desktop/src/store/model/alliance.rs rename to src/store/model/alliance.rs diff --git a/apps/desktop/src/store/model/asset_query.rs b/src/store/model/asset_query.rs similarity index 100% rename from apps/desktop/src/store/model/asset_query.rs rename to src/store/model/asset_query.rs diff --git a/apps/desktop/src/store/model/bloodline.rs b/src/store/model/bloodline.rs similarity index 100% rename from apps/desktop/src/store/model/bloodline.rs rename to src/store/model/bloodline.rs diff --git a/apps/desktop/src/store/model/blueprint_activity_material.rs b/src/store/model/blueprint_activity_material.rs similarity index 100% rename from apps/desktop/src/store/model/blueprint_activity_material.rs rename to src/store/model/blueprint_activity_material.rs diff --git a/apps/desktop/src/store/model/blueprint_activity_meta.rs b/src/store/model/blueprint_activity_meta.rs similarity index 100% rename from apps/desktop/src/store/model/blueprint_activity_meta.rs rename to src/store/model/blueprint_activity_meta.rs diff --git a/apps/desktop/src/store/model/blueprint_activity_product.rs b/src/store/model/blueprint_activity_product.rs similarity index 100% rename from apps/desktop/src/store/model/blueprint_activity_product.rs rename to src/store/model/blueprint_activity_product.rs diff --git a/apps/desktop/src/store/model/budget_assignment.rs b/src/store/model/budget_assignment.rs similarity index 100% rename from apps/desktop/src/store/model/budget_assignment.rs rename to src/store/model/budget_assignment.rs diff --git a/apps/desktop/src/store/model/budget_category.rs b/src/store/model/budget_category.rs similarity index 100% rename from apps/desktop/src/store/model/budget_category.rs rename to src/store/model/budget_category.rs diff --git a/apps/desktop/src/store/model/budget_category_group.rs b/src/store/model/budget_category_group.rs similarity index 100% rename from apps/desktop/src/store/model/budget_category_group.rs rename to src/store/model/budget_category_group.rs diff --git a/apps/desktop/src/store/model/budget_entry_assignment.rs b/src/store/model/budget_entry_assignment.rs similarity index 100% rename from apps/desktop/src/store/model/budget_entry_assignment.rs rename to src/store/model/budget_entry_assignment.rs diff --git a/apps/desktop/src/store/model/budget_owner.rs b/src/store/model/budget_owner.rs similarity index 100% rename from apps/desktop/src/store/model/budget_owner.rs rename to src/store/model/budget_owner.rs diff --git a/apps/desktop/src/store/model/budget_rule.rs b/src/store/model/budget_rule.rs similarity index 100% rename from apps/desktop/src/store/model/budget_rule.rs rename to src/store/model/budget_rule.rs diff --git a/apps/desktop/src/store/model/budget_target.rs b/src/store/model/budget_target.rs similarity index 100% rename from apps/desktop/src/store/model/budget_target.rs rename to src/store/model/budget_target.rs diff --git a/apps/desktop/src/store/model/calendar_event_note.rs b/src/store/model/calendar_event_note.rs similarity index 100% rename from apps/desktop/src/store/model/calendar_event_note.rs rename to src/store/model/calendar_event_note.rs diff --git a/apps/desktop/src/store/model/captains_log.rs b/src/store/model/captains_log.rs similarity index 100% rename from apps/desktop/src/store/model/captains_log.rs rename to src/store/model/captains_log.rs diff --git a/apps/desktop/src/store/model/catalog_type.rs b/src/store/model/catalog_type.rs similarity index 100% rename from apps/desktop/src/store/model/catalog_type.rs rename to src/store/model/catalog_type.rs diff --git a/apps/desktop/src/store/model/certificate.rs b/src/store/model/certificate.rs similarity index 100% rename from apps/desktop/src/store/model/certificate.rs rename to src/store/model/certificate.rs diff --git a/apps/desktop/src/store/model/certificate_skill.rs b/src/store/model/certificate_skill.rs similarity index 100% rename from apps/desktop/src/store/model/certificate_skill.rs rename to src/store/model/certificate_skill.rs diff --git a/apps/desktop/src/store/model/character.rs b/src/store/model/character.rs similarity index 100% rename from apps/desktop/src/store/model/character.rs rename to src/store/model/character.rs diff --git a/apps/desktop/src/store/model/character_asset.rs b/src/store/model/character_asset.rs similarity index 100% rename from apps/desktop/src/store/model/character_asset.rs rename to src/store/model/character_asset.rs diff --git a/apps/desktop/src/store/model/character_attributes.rs b/src/store/model/character_attributes.rs similarity index 100% rename from apps/desktop/src/store/model/character_attributes.rs rename to src/store/model/character_attributes.rs diff --git a/apps/desktop/src/store/model/character_blueprint.rs b/src/store/model/character_blueprint.rs similarity index 100% rename from apps/desktop/src/store/model/character_blueprint.rs rename to src/store/model/character_blueprint.rs diff --git a/apps/desktop/src/store/model/character_calendar.rs b/src/store/model/character_calendar.rs similarity index 100% rename from apps/desktop/src/store/model/character_calendar.rs rename to src/store/model/character_calendar.rs diff --git a/apps/desktop/src/store/model/character_calendar_attendee.rs b/src/store/model/character_calendar_attendee.rs similarity index 100% rename from apps/desktop/src/store/model/character_calendar_attendee.rs rename to src/store/model/character_calendar_attendee.rs diff --git a/apps/desktop/src/store/model/character_calendar_view.rs b/src/store/model/character_calendar_view.rs similarity index 100% rename from apps/desktop/src/store/model/character_calendar_view.rs rename to src/store/model/character_calendar_view.rs diff --git a/apps/desktop/src/store/model/character_card.rs b/src/store/model/character_card.rs similarity index 100% rename from apps/desktop/src/store/model/character_card.rs rename to src/store/model/character_card.rs diff --git a/apps/desktop/src/store/model/character_clone.rs b/src/store/model/character_clone.rs similarity index 100% rename from apps/desktop/src/store/model/character_clone.rs rename to src/store/model/character_clone.rs diff --git a/apps/desktop/src/store/model/character_clone_implant.rs b/src/store/model/character_clone_implant.rs similarity index 100% rename from apps/desktop/src/store/model/character_clone_implant.rs rename to src/store/model/character_clone_implant.rs diff --git a/apps/desktop/src/store/model/character_clone_view.rs b/src/store/model/character_clone_view.rs similarity index 100% rename from apps/desktop/src/store/model/character_clone_view.rs rename to src/store/model/character_clone_view.rs diff --git a/apps/desktop/src/store/model/character_contact.rs b/src/store/model/character_contact.rs similarity index 100% rename from apps/desktop/src/store/model/character_contact.rs rename to src/store/model/character_contact.rs diff --git a/apps/desktop/src/store/model/character_contact_label.rs b/src/store/model/character_contact_label.rs similarity index 100% rename from apps/desktop/src/store/model/character_contact_label.rs rename to src/store/model/character_contact_label.rs diff --git a/apps/desktop/src/store/model/character_contacts_view.rs b/src/store/model/character_contacts_view.rs similarity index 100% rename from apps/desktop/src/store/model/character_contacts_view.rs rename to src/store/model/character_contacts_view.rs diff --git a/apps/desktop/src/store/model/character_contract.rs b/src/store/model/character_contract.rs similarity index 100% rename from apps/desktop/src/store/model/character_contract.rs rename to src/store/model/character_contract.rs diff --git a/apps/desktop/src/store/model/character_contract_bid.rs b/src/store/model/character_contract_bid.rs similarity index 100% rename from apps/desktop/src/store/model/character_contract_bid.rs rename to src/store/model/character_contract_bid.rs diff --git a/apps/desktop/src/store/model/character_contract_item.rs b/src/store/model/character_contract_item.rs similarity index 100% rename from apps/desktop/src/store/model/character_contract_item.rs rename to src/store/model/character_contract_item.rs diff --git a/apps/desktop/src/store/model/character_financials.rs b/src/store/model/character_financials.rs similarity index 100% rename from apps/desktop/src/store/model/character_financials.rs rename to src/store/model/character_financials.rs diff --git a/apps/desktop/src/store/model/character_implant.rs b/src/store/model/character_implant.rs similarity index 100% rename from apps/desktop/src/store/model/character_implant.rs rename to src/store/model/character_implant.rs diff --git a/apps/desktop/src/store/model/character_industry_job.rs b/src/store/model/character_industry_job.rs similarity index 100% rename from apps/desktop/src/store/model/character_industry_job.rs rename to src/store/model/character_industry_job.rs diff --git a/apps/desktop/src/store/model/character_jump_clone.rs b/src/store/model/character_jump_clone.rs similarity index 100% rename from apps/desktop/src/store/model/character_jump_clone.rs rename to src/store/model/character_jump_clone.rs diff --git a/apps/desktop/src/store/model/character_killmail.rs b/src/store/model/character_killmail.rs similarity index 100% rename from apps/desktop/src/store/model/character_killmail.rs rename to src/store/model/character_killmail.rs diff --git a/apps/desktop/src/store/model/character_mail.rs b/src/store/model/character_mail.rs similarity index 100% rename from apps/desktop/src/store/model/character_mail.rs rename to src/store/model/character_mail.rs diff --git a/apps/desktop/src/store/model/character_mail_body.rs b/src/store/model/character_mail_body.rs similarity index 100% rename from apps/desktop/src/store/model/character_mail_body.rs rename to src/store/model/character_mail_body.rs diff --git a/apps/desktop/src/store/model/character_mail_label.rs b/src/store/model/character_mail_label.rs similarity index 100% rename from apps/desktop/src/store/model/character_mail_label.rs rename to src/store/model/character_mail_label.rs diff --git a/apps/desktop/src/store/model/character_mail_label_membership.rs b/src/store/model/character_mail_label_membership.rs similarity index 100% rename from apps/desktop/src/store/model/character_mail_label_membership.rs rename to src/store/model/character_mail_label_membership.rs diff --git a/apps/desktop/src/store/model/character_mail_recipient.rs b/src/store/model/character_mail_recipient.rs similarity index 100% rename from apps/desktop/src/store/model/character_mail_recipient.rs rename to src/store/model/character_mail_recipient.rs diff --git a/apps/desktop/src/store/model/character_mail_view.rs b/src/store/model/character_mail_view.rs similarity index 100% rename from apps/desktop/src/store/model/character_mail_view.rs rename to src/store/model/character_mail_view.rs diff --git a/apps/desktop/src/store/model/character_net_worth_series.rs b/src/store/model/character_net_worth_series.rs similarity index 100% rename from apps/desktop/src/store/model/character_net_worth_series.rs rename to src/store/model/character_net_worth_series.rs diff --git a/apps/desktop/src/store/model/character_net_worth_snapshot.rs b/src/store/model/character_net_worth_snapshot.rs similarity index 100% rename from apps/desktop/src/store/model/character_net_worth_snapshot.rs rename to src/store/model/character_net_worth_snapshot.rs diff --git a/apps/desktop/src/store/model/character_notification.rs b/src/store/model/character_notification.rs similarity index 100% rename from apps/desktop/src/store/model/character_notification.rs rename to src/store/model/character_notification.rs diff --git a/apps/desktop/src/store/model/character_planet.rs b/src/store/model/character_planet.rs similarity index 100% rename from apps/desktop/src/store/model/character_planet.rs rename to src/store/model/character_planet.rs diff --git a/apps/desktop/src/store/model/character_planet_link.rs b/src/store/model/character_planet_link.rs similarity index 100% rename from apps/desktop/src/store/model/character_planet_link.rs rename to src/store/model/character_planet_link.rs diff --git a/apps/desktop/src/store/model/character_planet_pin.rs b/src/store/model/character_planet_pin.rs similarity index 100% rename from apps/desktop/src/store/model/character_planet_pin.rs rename to src/store/model/character_planet_pin.rs diff --git a/apps/desktop/src/store/model/character_planet_pin_content.rs b/src/store/model/character_planet_pin_content.rs similarity index 100% rename from apps/desktop/src/store/model/character_planet_pin_content.rs rename to src/store/model/character_planet_pin_content.rs diff --git a/apps/desktop/src/store/model/character_planet_route.rs b/src/store/model/character_planet_route.rs similarity index 100% rename from apps/desktop/src/store/model/character_planet_route.rs rename to src/store/model/character_planet_route.rs diff --git a/apps/desktop/src/store/model/character_skill.rs b/src/store/model/character_skill.rs similarity index 100% rename from apps/desktop/src/store/model/character_skill.rs rename to src/store/model/character_skill.rs diff --git a/apps/desktop/src/store/model/character_skillqueue.rs b/src/store/model/character_skillqueue.rs similarity index 100% rename from apps/desktop/src/store/model/character_skillqueue.rs rename to src/store/model/character_skillqueue.rs diff --git a/apps/desktop/src/store/model/character_squad.rs b/src/store/model/character_squad.rs similarity index 100% rename from apps/desktop/src/store/model/character_squad.rs rename to src/store/model/character_squad.rs diff --git a/apps/desktop/src/store/model/character_standing.rs b/src/store/model/character_standing.rs similarity index 100% rename from apps/desktop/src/store/model/character_standing.rs rename to src/store/model/character_standing.rs diff --git a/apps/desktop/src/store/model/character_state.rs b/src/store/model/character_state.rs similarity index 100% rename from apps/desktop/src/store/model/character_state.rs rename to src/store/model/character_state.rs diff --git a/apps/desktop/src/store/model/character_telemetry.rs b/src/store/model/character_telemetry.rs similarity index 100% rename from apps/desktop/src/store/model/character_telemetry.rs rename to src/store/model/character_telemetry.rs diff --git a/apps/desktop/src/store/model/character_wallet_journal.rs b/src/store/model/character_wallet_journal.rs similarity index 100% rename from apps/desktop/src/store/model/character_wallet_journal.rs rename to src/store/model/character_wallet_journal.rs diff --git a/apps/desktop/src/store/model/character_wallet_period_summary.rs b/src/store/model/character_wallet_period_summary.rs similarity index 100% rename from apps/desktop/src/store/model/character_wallet_period_summary.rs rename to src/store/model/character_wallet_period_summary.rs diff --git a/apps/desktop/src/store/model/character_wallet_transaction.rs b/src/store/model/character_wallet_transaction.rs similarity index 100% rename from apps/desktop/src/store/model/character_wallet_transaction.rs rename to src/store/model/character_wallet_transaction.rs diff --git a/apps/desktop/src/store/model/constellation.rs b/src/store/model/constellation.rs similarity index 100% rename from apps/desktop/src/store/model/constellation.rs rename to src/store/model/constellation.rs diff --git a/apps/desktop/src/store/model/corporation.rs b/src/store/model/corporation.rs similarity index 100% rename from apps/desktop/src/store/model/corporation.rs rename to src/store/model/corporation.rs diff --git a/apps/desktop/src/store/model/corporation_abyssal_item.rs b/src/store/model/corporation_abyssal_item.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_abyssal_item.rs rename to src/store/model/corporation_abyssal_item.rs diff --git a/apps/desktop/src/store/model/corporation_asset.rs b/src/store/model/corporation_asset.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_asset.rs rename to src/store/model/corporation_asset.rs diff --git a/apps/desktop/src/store/model/corporation_blueprint.rs b/src/store/model/corporation_blueprint.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_blueprint.rs rename to src/store/model/corporation_blueprint.rs diff --git a/apps/desktop/src/store/model/corporation_card.rs b/src/store/model/corporation_card.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_card.rs rename to src/store/model/corporation_card.rs diff --git a/apps/desktop/src/store/model/corporation_contact.rs b/src/store/model/corporation_contact.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_contact.rs rename to src/store/model/corporation_contact.rs diff --git a/apps/desktop/src/store/model/corporation_contact_label.rs b/src/store/model/corporation_contact_label.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_contact_label.rs rename to src/store/model/corporation_contact_label.rs diff --git a/apps/desktop/src/store/model/corporation_contract.rs b/src/store/model/corporation_contract.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_contract.rs rename to src/store/model/corporation_contract.rs diff --git a/apps/desktop/src/store/model/corporation_contract_bid.rs b/src/store/model/corporation_contract_bid.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_contract_bid.rs rename to src/store/model/corporation_contract_bid.rs diff --git a/apps/desktop/src/store/model/corporation_contract_item.rs b/src/store/model/corporation_contract_item.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_contract_item.rs rename to src/store/model/corporation_contract_item.rs diff --git a/apps/desktop/src/store/model/corporation_hangar_division.rs b/src/store/model/corporation_hangar_division.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_hangar_division.rs rename to src/store/model/corporation_hangar_division.rs diff --git a/apps/desktop/src/store/model/corporation_industry_job.rs b/src/store/model/corporation_industry_job.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_industry_job.rs rename to src/store/model/corporation_industry_job.rs diff --git a/apps/desktop/src/store/model/corporation_killmail.rs b/src/store/model/corporation_killmail.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_killmail.rs rename to src/store/model/corporation_killmail.rs diff --git a/apps/desktop/src/store/model/corporation_killmail_attacker.rs b/src/store/model/corporation_killmail_attacker.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_killmail_attacker.rs rename to src/store/model/corporation_killmail_attacker.rs diff --git a/apps/desktop/src/store/model/corporation_killmail_item.rs b/src/store/model/corporation_killmail_item.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_killmail_item.rs rename to src/store/model/corporation_killmail_item.rs diff --git a/apps/desktop/src/store/model/corporation_market_order.rs b/src/store/model/corporation_market_order.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_market_order.rs rename to src/store/model/corporation_market_order.rs diff --git a/apps/desktop/src/store/model/corporation_member_role.rs b/src/store/model/corporation_member_role.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_member_role.rs rename to src/store/model/corporation_member_role.rs diff --git a/apps/desktop/src/store/model/corporation_mining_extraction.rs b/src/store/model/corporation_mining_extraction.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_mining_extraction.rs rename to src/store/model/corporation_mining_extraction.rs diff --git a/apps/desktop/src/store/model/corporation_net_worth_snapshot.rs b/src/store/model/corporation_net_worth_snapshot.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_net_worth_snapshot.rs rename to src/store/model/corporation_net_worth_snapshot.rs diff --git a/apps/desktop/src/store/model/corporation_standing.rs b/src/store/model/corporation_standing.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_standing.rs rename to src/store/model/corporation_standing.rs diff --git a/apps/desktop/src/store/model/corporation_wallet_division.rs b/src/store/model/corporation_wallet_division.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_wallet_division.rs rename to src/store/model/corporation_wallet_division.rs diff --git a/apps/desktop/src/store/model/corporation_wallet_journal.rs b/src/store/model/corporation_wallet_journal.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_wallet_journal.rs rename to src/store/model/corporation_wallet_journal.rs diff --git a/apps/desktop/src/store/model/corporation_wallet_transaction.rs b/src/store/model/corporation_wallet_transaction.rs similarity index 100% rename from apps/desktop/src/store/model/corporation_wallet_transaction.rs rename to src/store/model/corporation_wallet_transaction.rs diff --git a/apps/desktop/src/store/model/credential.rs b/src/store/model/credential.rs similarity index 100% rename from apps/desktop/src/store/model/credential.rs rename to src/store/model/credential.rs diff --git a/apps/desktop/src/store/model/customs_office.rs b/src/store/model/customs_office.rs similarity index 100% rename from apps/desktop/src/store/model/customs_office.rs rename to src/store/model/customs_office.rs diff --git a/apps/desktop/src/store/model/dogma_attribute.rs b/src/store/model/dogma_attribute.rs similarity index 100% rename from apps/desktop/src/store/model/dogma_attribute.rs rename to src/store/model/dogma_attribute.rs diff --git a/apps/desktop/src/store/model/dossier.rs b/src/store/model/dossier.rs similarity index 100% rename from apps/desktop/src/store/model/dossier.rs rename to src/store/model/dossier.rs diff --git a/apps/desktop/src/store/model/entity_tag.rs b/src/store/model/entity_tag.rs similarity index 100% rename from apps/desktop/src/store/model/entity_tag.rs rename to src/store/model/entity_tag.rs diff --git a/apps/desktop/src/store/model/facility.rs b/src/store/model/facility.rs similarity index 100% rename from apps/desktop/src/store/model/facility.rs rename to src/store/model/facility.rs diff --git a/apps/desktop/src/store/model/facility_intel.rs b/src/store/model/facility_intel.rs similarity index 100% rename from apps/desktop/src/store/model/facility_intel.rs rename to src/store/model/facility_intel.rs diff --git a/apps/desktop/src/store/model/faction.rs b/src/store/model/faction.rs similarity index 100% rename from apps/desktop/src/store/model/faction.rs rename to src/store/model/faction.rs diff --git a/apps/desktop/src/store/model/field_notes.rs b/src/store/model/field_notes.rs similarity index 100% rename from apps/desktop/src/store/model/field_notes.rs rename to src/store/model/field_notes.rs diff --git a/apps/desktop/src/store/model/http_cache_entry.rs b/src/store/model/http_cache_entry.rs similarity index 100% rename from apps/desktop/src/store/model/http_cache_entry.rs rename to src/store/model/http_cache_entry.rs diff --git a/apps/desktop/src/store/model/implant_time_bonus.rs b/src/store/model/implant_time_bonus.rs similarity index 100% rename from apps/desktop/src/store/model/implant_time_bonus.rs rename to src/store/model/implant_time_bonus.rs diff --git a/apps/desktop/src/store/model/inaccessible_structure.rs b/src/store/model/inaccessible_structure.rs similarity index 100% rename from apps/desktop/src/store/model/inaccessible_structure.rs rename to src/store/model/inaccessible_structure.rs diff --git a/apps/desktop/src/store/model/industry_cost_index.rs b/src/store/model/industry_cost_index.rs similarity index 100% rename from apps/desktop/src/store/model/industry_cost_index.rs rename to src/store/model/industry_cost_index.rs diff --git a/apps/desktop/src/store/model/industry_plan.rs b/src/store/model/industry_plan.rs similarity index 100% rename from apps/desktop/src/store/model/industry_plan.rs rename to src/store/model/industry_plan.rs diff --git a/apps/desktop/src/store/model/item_category.rs b/src/store/model/item_category.rs similarity index 100% rename from apps/desktop/src/store/model/item_category.rs rename to src/store/model/item_category.rs diff --git a/apps/desktop/src/store/model/item_group.rs b/src/store/model/item_group.rs similarity index 100% rename from apps/desktop/src/store/model/item_group.rs rename to src/store/model/item_group.rs diff --git a/apps/desktop/src/store/model/item_type.rs b/src/store/model/item_type.rs similarity index 100% rename from apps/desktop/src/store/model/item_type.rs rename to src/store/model/item_type.rs diff --git a/apps/desktop/src/store/model/killmail_attacker.rs b/src/store/model/killmail_attacker.rs similarity index 100% rename from apps/desktop/src/store/model/killmail_attacker.rs rename to src/store/model/killmail_attacker.rs diff --git a/apps/desktop/src/store/model/killmail_item.rs b/src/store/model/killmail_item.rs similarity index 100% rename from apps/desktop/src/store/model/killmail_item.rs rename to src/store/model/killmail_item.rs diff --git a/apps/desktop/src/store/model/killmail_report.rs b/src/store/model/killmail_report.rs similarity index 100% rename from apps/desktop/src/store/model/killmail_report.rs rename to src/store/model/killmail_report.rs diff --git a/apps/desktop/src/store/model/mail_draft.rs b/src/store/model/mail_draft.rs similarity index 100% rename from apps/desktop/src/store/model/mail_draft.rs rename to src/store/model/mail_draft.rs diff --git a/apps/desktop/src/store/model/mail_folder_assignment.rs b/src/store/model/mail_folder_assignment.rs similarity index 100% rename from apps/desktop/src/store/model/mail_folder_assignment.rs rename to src/store/model/mail_folder_assignment.rs diff --git a/apps/desktop/src/store/model/mail_overlay_state.rs b/src/store/model/mail_overlay_state.rs similarity index 100% rename from apps/desktop/src/store/model/mail_overlay_state.rs rename to src/store/model/mail_overlay_state.rs diff --git a/apps/desktop/src/store/model/mail_query.rs b/src/store/model/mail_query.rs similarity index 100% rename from apps/desktop/src/store/model/mail_query.rs rename to src/store/model/mail_query.rs diff --git a/apps/desktop/src/store/model/mail_snapshot.rs b/src/store/model/mail_snapshot.rs similarity index 100% rename from apps/desktop/src/store/model/mail_snapshot.rs rename to src/store/model/mail_snapshot.rs diff --git a/apps/desktop/src/store/model/mail_snooze.rs b/src/store/model/mail_snooze.rs similarity index 100% rename from apps/desktop/src/store/model/mail_snooze.rs rename to src/store/model/mail_snooze.rs diff --git a/apps/desktop/src/store/model/mail_triage.rs b/src/store/model/mail_triage.rs similarity index 100% rename from apps/desktop/src/store/model/mail_triage.rs rename to src/store/model/mail_triage.rs diff --git a/apps/desktop/src/store/model/market_alert_state.rs b/src/store/model/market_alert_state.rs similarity index 100% rename from apps/desktop/src/store/model/market_alert_state.rs rename to src/store/model/market_alert_state.rs diff --git a/apps/desktop/src/store/model/market_cart.rs b/src/store/model/market_cart.rs similarity index 100% rename from apps/desktop/src/store/model/market_cart.rs rename to src/store/model/market_cart.rs diff --git a/apps/desktop/src/store/model/market_comparison_pin.rs b/src/store/model/market_comparison_pin.rs similarity index 100% rename from apps/desktop/src/store/model/market_comparison_pin.rs rename to src/store/model/market_comparison_pin.rs diff --git a/apps/desktop/src/store/model/market_group.rs b/src/store/model/market_group.rs similarity index 100% rename from apps/desktop/src/store/model/market_group.rs rename to src/store/model/market_group.rs diff --git a/apps/desktop/src/store/model/market_order.rs b/src/store/model/market_order.rs similarity index 100% rename from apps/desktop/src/store/model/market_order.rs rename to src/store/model/market_order.rs diff --git a/apps/desktop/src/store/model/market_price.rs b/src/store/model/market_price.rs similarity index 100% rename from apps/desktop/src/store/model/market_price.rs rename to src/store/model/market_price.rs diff --git a/apps/desktop/src/store/model/market_watchlist.rs b/src/store/model/market_watchlist.rs similarity index 100% rename from apps/desktop/src/store/model/market_watchlist.rs rename to src/store/model/market_watchlist.rs diff --git a/apps/desktop/src/store/model/moon.rs b/src/store/model/moon.rs similarity index 100% rename from apps/desktop/src/store/model/moon.rs rename to src/store/model/moon.rs diff --git a/apps/desktop/src/store/model/notification.rs b/src/store/model/notification.rs similarity index 100% rename from apps/desktop/src/store/model/notification.rs rename to src/store/model/notification.rs diff --git a/apps/desktop/src/store/model/npc_agent.rs b/src/store/model/npc_agent.rs similarity index 100% rename from apps/desktop/src/store/model/npc_agent.rs rename to src/store/model/npc_agent.rs diff --git a/apps/desktop/src/store/model/npc_agent_skill.rs b/src/store/model/npc_agent_skill.rs similarity index 100% rename from apps/desktop/src/store/model/npc_agent_skill.rs rename to src/store/model/npc_agent_skill.rs diff --git a/apps/desktop/src/store/model/npc_corporation_division.rs b/src/store/model/npc_corporation_division.rs similarity index 100% rename from apps/desktop/src/store/model/npc_corporation_division.rs rename to src/store/model/npc_corporation_division.rs diff --git a/apps/desktop/src/store/model/objective.rs b/src/store/model/objective.rs similarity index 100% rename from apps/desktop/src/store/model/objective.rs rename to src/store/model/objective.rs diff --git a/apps/desktop/src/store/model/observed_market_order.rs b/src/store/model/observed_market_order.rs similarity index 100% rename from apps/desktop/src/store/model/observed_market_order.rs rename to src/store/model/observed_market_order.rs diff --git a/apps/desktop/src/store/model/outbox.rs b/src/store/model/outbox.rs similarity index 100% rename from apps/desktop/src/store/model/outbox.rs rename to src/store/model/outbox.rs diff --git a/apps/desktop/src/store/model/owned_corporation.rs b/src/store/model/owned_corporation.rs similarity index 100% rename from apps/desktop/src/store/model/owned_corporation.rs rename to src/store/model/owned_corporation.rs diff --git a/apps/desktop/src/store/model/race.rs b/src/store/model/race.rs similarity index 100% rename from apps/desktop/src/store/model/race.rs rename to src/store/model/race.rs diff --git a/apps/desktop/src/store/model/region.rs b/src/store/model/region.rs similarity index 100% rename from apps/desktop/src/store/model/region.rs rename to src/store/model/region.rs diff --git a/apps/desktop/src/store/model/saved_asset_filter.rs b/src/store/model/saved_asset_filter.rs similarity index 100% rename from apps/desktop/src/store/model/saved_asset_filter.rs rename to src/store/model/saved_asset_filter.rs diff --git a/apps/desktop/src/store/model/sde_picker_item.rs b/src/store/model/sde_picker_item.rs similarity index 100% rename from apps/desktop/src/store/model/sde_picker_item.rs rename to src/store/model/sde_picker_item.rs diff --git a/apps/desktop/src/store/model/ship_mastery.rs b/src/store/model/ship_mastery.rs similarity index 100% rename from apps/desktop/src/store/model/ship_mastery.rs rename to src/store/model/ship_mastery.rs diff --git a/apps/desktop/src/store/model/skill_completion.rs b/src/store/model/skill_completion.rs similarity index 100% rename from apps/desktop/src/store/model/skill_completion.rs rename to src/store/model/skill_completion.rs diff --git a/apps/desktop/src/store/model/skill_metadata.rs b/src/store/model/skill_metadata.rs similarity index 100% rename from apps/desktop/src/store/model/skill_metadata.rs rename to src/store/model/skill_metadata.rs diff --git a/apps/desktop/src/store/model/skill_plan.rs b/src/store/model/skill_plan.rs similarity index 100% rename from apps/desktop/src/store/model/skill_plan.rs rename to src/store/model/skill_plan.rs diff --git a/apps/desktop/src/store/model/skill_plan_cert_proficiency.rs b/src/store/model/skill_plan_cert_proficiency.rs similarity index 100% rename from apps/desktop/src/store/model/skill_plan_cert_proficiency.rs rename to src/store/model/skill_plan_cert_proficiency.rs diff --git a/apps/desktop/src/store/model/skill_plan_entry.rs b/src/store/model/skill_plan_entry.rs similarity index 100% rename from apps/desktop/src/store/model/skill_plan_entry.rs rename to src/store/model/skill_plan_entry.rs diff --git a/apps/desktop/src/store/model/skill_plan_milestone.rs b/src/store/model/skill_plan_milestone.rs similarity index 100% rename from apps/desktop/src/store/model/skill_plan_milestone.rs rename to src/store/model/skill_plan_milestone.rs diff --git a/apps/desktop/src/store/model/skill_plan_ship_mastery.rs b/src/store/model/skill_plan_ship_mastery.rs similarity index 100% rename from apps/desktop/src/store/model/skill_plan_ship_mastery.rs rename to src/store/model/skill_plan_ship_mastery.rs diff --git a/apps/desktop/src/store/model/solar_system.rs b/src/store/model/solar_system.rs similarity index 100% rename from apps/desktop/src/store/model/solar_system.rs rename to src/store/model/solar_system.rs diff --git a/apps/desktop/src/store/model/squad.rs b/src/store/model/squad.rs similarity index 100% rename from apps/desktop/src/store/model/squad.rs rename to src/store/model/squad.rs diff --git a/apps/desktop/src/store/model/standings_catalog.rs b/src/store/model/standings_catalog.rs similarity index 100% rename from apps/desktop/src/store/model/standings_catalog.rs rename to src/store/model/standings_catalog.rs diff --git a/apps/desktop/src/store/model/station.rs b/src/store/model/station.rs similarity index 100% rename from apps/desktop/src/store/model/station.rs rename to src/store/model/station.rs diff --git a/apps/desktop/src/store/model/stockpile.rs b/src/store/model/stockpile.rs similarity index 100% rename from apps/desktop/src/store/model/stockpile.rs rename to src/store/model/stockpile.rs diff --git a/apps/desktop/src/store/model/stockpile_fill.rs b/src/store/model/stockpile_fill.rs similarity index 100% rename from apps/desktop/src/store/model/stockpile_fill.rs rename to src/store/model/stockpile_fill.rs diff --git a/apps/desktop/src/store/model/stockpile_item.rs b/src/store/model/stockpile_item.rs similarity index 100% rename from apps/desktop/src/store/model/stockpile_item.rs rename to src/store/model/stockpile_item.rs diff --git a/apps/desktop/src/store/model/structure.rs b/src/store/model/structure.rs similarity index 100% rename from apps/desktop/src/store/model/structure.rs rename to src/store/model/structure.rs diff --git a/apps/desktop/src/store/model/structure_rig_bonus.rs b/src/store/model/structure_rig_bonus.rs similarity index 100% rename from apps/desktop/src/store/model/structure_rig_bonus.rs rename to src/store/model/structure_rig_bonus.rs diff --git a/apps/desktop/src/store/model/structure_state.rs b/src/store/model/structure_state.rs similarity index 100% rename from apps/desktop/src/store/model/structure_state.rs rename to src/store/model/structure_state.rs diff --git a/apps/desktop/src/store/model/sync_ledger.rs b/src/store/model/sync_ledger.rs similarity index 100% rename from apps/desktop/src/store/model/sync_ledger.rs rename to src/store/model/sync_ledger.rs diff --git a/apps/desktop/src/store/model/sync_list.rs b/src/store/model/sync_list.rs similarity index 100% rename from apps/desktop/src/store/model/sync_list.rs rename to src/store/model/sync_list.rs diff --git a/apps/desktop/src/store/model/sync_list_contact.rs b/src/store/model/sync_list_contact.rs similarity index 100% rename from apps/desktop/src/store/model/sync_list_contact.rs rename to src/store/model/sync_list_contact.rs diff --git a/apps/desktop/src/store/model/sync_list_target.rs b/src/store/model/sync_list_target.rs similarity index 100% rename from apps/desktop/src/store/model/sync_list_target.rs rename to src/store/model/sync_list_target.rs diff --git a/apps/desktop/src/store/model/sync_pushed_contact.rs b/src/store/model/sync_pushed_contact.rs similarity index 100% rename from apps/desktop/src/store/model/sync_pushed_contact.rs rename to src/store/model/sync_pushed_contact.rs diff --git a/apps/desktop/src/store/model/tag.rs b/src/store/model/tag.rs similarity index 100% rename from apps/desktop/src/store/model/tag.rs rename to src/store/model/tag.rs diff --git a/apps/desktop/src/store/model/type_material.rs b/src/store/model/type_material.rs similarity index 100% rename from apps/desktop/src/store/model/type_material.rs rename to src/store/model/type_material.rs diff --git a/apps/desktop/src/store/model/type_price_history.rs b/src/store/model/type_price_history.rs similarity index 100% rename from apps/desktop/src/store/model/type_price_history.rs rename to src/store/model/type_price_history.rs diff --git a/apps/desktop/src/store/reconcile.rs b/src/store/reconcile.rs similarity index 100% rename from apps/desktop/src/store/reconcile.rs rename to src/store/reconcile.rs diff --git a/apps/desktop/src/store/repo.rs b/src/store/repo.rs similarity index 100% rename from apps/desktop/src/store/repo.rs rename to src/store/repo.rs diff --git a/apps/desktop/src/store/repo/assets.rs b/src/store/repo/assets.rs similarity index 100% rename from apps/desktop/src/store/repo/assets.rs rename to src/store/repo/assets.rs diff --git a/apps/desktop/src/store/repo/blueprints.rs b/src/store/repo/blueprints.rs similarity index 100% rename from apps/desktop/src/store/repo/blueprints.rs rename to src/store/repo/blueprints.rs diff --git a/apps/desktop/src/store/repo/budget.rs b/src/store/repo/budget.rs similarity index 100% rename from apps/desktop/src/store/repo/budget.rs rename to src/store/repo/budget.rs diff --git a/apps/desktop/src/store/repo/calendar.rs b/src/store/repo/calendar.rs similarity index 100% rename from apps/desktop/src/store/repo/calendar.rs rename to src/store/repo/calendar.rs diff --git a/apps/desktop/src/store/repo/calendar_event_note.rs b/src/store/repo/calendar_event_note.rs similarity index 100% rename from apps/desktop/src/store/repo/calendar_event_note.rs rename to src/store/repo/calendar_event_note.rs diff --git a/apps/desktop/src/store/repo/captains_log.rs b/src/store/repo/captains_log.rs similarity index 100% rename from apps/desktop/src/store/repo/captains_log.rs rename to src/store/repo/captains_log.rs diff --git a/apps/desktop/src/store/repo/captains_log_rollup.rs b/src/store/repo/captains_log_rollup.rs similarity index 100% rename from apps/desktop/src/store/repo/captains_log_rollup.rs rename to src/store/repo/captains_log_rollup.rs diff --git a/apps/desktop/src/store/repo/character.rs b/src/store/repo/character.rs similarity index 100% rename from apps/desktop/src/store/repo/character.rs rename to src/store/repo/character.rs diff --git a/apps/desktop/src/store/repo/character_sp_snapshot.rs b/src/store/repo/character_sp_snapshot.rs similarity index 100% rename from apps/desktop/src/store/repo/character_sp_snapshot.rs rename to src/store/repo/character_sp_snapshot.rs diff --git a/apps/desktop/src/store/repo/colonies.rs b/src/store/repo/colonies.rs similarity index 100% rename from apps/desktop/src/store/repo/colonies.rs rename to src/store/repo/colonies.rs diff --git a/apps/desktop/src/store/repo/contact_sync.rs b/src/store/repo/contact_sync.rs similarity index 100% rename from apps/desktop/src/store/repo/contact_sync.rs rename to src/store/repo/contact_sync.rs diff --git a/apps/desktop/src/store/repo/customs_office.rs b/src/store/repo/customs_office.rs similarity index 100% rename from apps/desktop/src/store/repo/customs_office.rs rename to src/store/repo/customs_office.rs diff --git a/apps/desktop/src/store/repo/dossier.rs b/src/store/repo/dossier.rs similarity index 100% rename from apps/desktop/src/store/repo/dossier.rs rename to src/store/repo/dossier.rs diff --git a/apps/desktop/src/store/repo/field_notes.rs b/src/store/repo/field_notes.rs similarity index 100% rename from apps/desktop/src/store/repo/field_notes.rs rename to src/store/repo/field_notes.rs diff --git a/apps/desktop/src/store/repo/finance.rs b/src/store/repo/finance.rs similarity index 100% rename from apps/desktop/src/store/repo/finance.rs rename to src/store/repo/finance.rs diff --git a/apps/desktop/src/store/repo/fitting.rs b/src/store/repo/fitting.rs similarity index 100% rename from apps/desktop/src/store/repo/fitting.rs rename to src/store/repo/fitting.rs diff --git a/apps/desktop/src/store/repo/industry.rs b/src/store/repo/industry.rs similarity index 100% rename from apps/desktop/src/store/repo/industry.rs rename to src/store/repo/industry.rs diff --git a/apps/desktop/src/store/repo/industry_completion.rs b/src/store/repo/industry_completion.rs similarity index 100% rename from apps/desktop/src/store/repo/industry_completion.rs rename to src/store/repo/industry_completion.rs diff --git a/apps/desktop/src/store/repo/infra.rs b/src/store/repo/infra.rs similarity index 100% rename from apps/desktop/src/store/repo/infra.rs rename to src/store/repo/infra.rs diff --git a/apps/desktop/src/store/repo/killmail_report.rs b/src/store/repo/killmail_report.rs similarity index 100% rename from apps/desktop/src/store/repo/killmail_report.rs rename to src/store/repo/killmail_report.rs diff --git a/apps/desktop/src/store/repo/mail.rs b/src/store/repo/mail.rs similarity index 100% rename from apps/desktop/src/store/repo/mail.rs rename to src/store/repo/mail.rs diff --git a/apps/desktop/src/store/repo/market.rs b/src/store/repo/market.rs similarity index 100% rename from apps/desktop/src/store/repo/market.rs rename to src/store/repo/market.rs diff --git a/apps/desktop/src/store/repo/market_alert_state.rs b/src/store/repo/market_alert_state.rs similarity index 100% rename from apps/desktop/src/store/repo/market_alert_state.rs rename to src/store/repo/market_alert_state.rs diff --git a/apps/desktop/src/store/repo/market_cart.rs b/src/store/repo/market_cart.rs similarity index 100% rename from apps/desktop/src/store/repo/market_cart.rs rename to src/store/repo/market_cart.rs diff --git a/apps/desktop/src/store/repo/market_comparison_pin.rs b/src/store/repo/market_comparison_pin.rs similarity index 100% rename from apps/desktop/src/store/repo/market_comparison_pin.rs rename to src/store/repo/market_comparison_pin.rs diff --git a/apps/desktop/src/store/repo/market_watchlist.rs b/src/store/repo/market_watchlist.rs similarity index 100% rename from apps/desktop/src/store/repo/market_watchlist.rs rename to src/store/repo/market_watchlist.rs diff --git a/apps/desktop/src/store/repo/notifications.rs b/src/store/repo/notifications.rs similarity index 100% rename from apps/desktop/src/store/repo/notifications.rs rename to src/store/repo/notifications.rs diff --git a/apps/desktop/src/store/repo/objective.rs b/src/store/repo/objective.rs similarity index 100% rename from apps/desktop/src/store/repo/objective.rs rename to src/store/repo/objective.rs diff --git a/apps/desktop/src/store/repo/org.rs b/src/store/repo/org.rs similarity index 100% rename from apps/desktop/src/store/repo/org.rs rename to src/store/repo/org.rs diff --git a/apps/desktop/src/store/repo/sde.rs b/src/store/repo/sde.rs similarity index 100% rename from apps/desktop/src/store/repo/sde.rs rename to src/store/repo/sde.rs diff --git a/apps/desktop/src/store/repo/skill_completion.rs b/src/store/repo/skill_completion.rs similarity index 100% rename from apps/desktop/src/store/repo/skill_completion.rs rename to src/store/repo/skill_completion.rs diff --git a/apps/desktop/src/store/repo/skills.rs b/src/store/repo/skills.rs similarity index 100% rename from apps/desktop/src/store/repo/skills.rs rename to src/store/repo/skills.rs diff --git a/apps/desktop/src/store/repo/standings.rs b/src/store/repo/standings.rs similarity index 100% rename from apps/desktop/src/store/repo/standings.rs rename to src/store/repo/standings.rs diff --git a/apps/desktop/src/store/repo/structure_state.rs b/src/store/repo/structure_state.rs similarity index 100% rename from apps/desktop/src/store/repo/structure_state.rs rename to src/store/repo/structure_state.rs diff --git a/apps/desktop/src/store/repo/sync_ledger.rs b/src/store/repo/sync_ledger.rs similarity index 100% rename from apps/desktop/src/store/repo/sync_ledger.rs rename to src/store/repo/sync_ledger.rs diff --git a/apps/desktop/src/store/search.rs b/src/store/search.rs similarity index 100% rename from apps/desktop/src/store/search.rs rename to src/store/search.rs diff --git a/apps/desktop/src/store/share_meta.rs b/src/store/share_meta.rs similarity index 100% rename from apps/desktop/src/store/share_meta.rs rename to src/store/share_meta.rs diff --git a/apps/desktop/src/store/storage_migration.rs b/src/store/storage_migration.rs similarity index 100% rename from apps/desktop/src/store/storage_migration.rs rename to src/store/storage_migration.rs diff --git a/apps/desktop/src/store/sync_copy.rs b/src/store/sync_copy.rs similarity index 100% rename from apps/desktop/src/store/sync_copy.rs rename to src/store/sync_copy.rs diff --git a/apps/desktop/src/store/sync_session.rs b/src/store/sync_session.rs similarity index 100% rename from apps/desktop/src/store/sync_session.rs rename to src/store/sync_session.rs diff --git a/apps/desktop/src/sync.rs b/src/sync.rs similarity index 100% rename from apps/desktop/src/sync.rs rename to src/sync.rs diff --git a/apps/desktop/src/sync/calendar_handlers.rs b/src/sync/calendar_handlers.rs similarity index 100% rename from apps/desktop/src/sync/calendar_handlers.rs rename to src/sync/calendar_handlers.rs diff --git a/apps/desktop/src/sync/command.rs b/src/sync/command.rs similarity index 100% rename from apps/desktop/src/sync/command.rs rename to src/sync/command.rs diff --git a/apps/desktop/src/sync/contact_handlers.rs b/src/sync/contact_handlers.rs similarity index 100% rename from apps/desktop/src/sync/contact_handlers.rs rename to src/sync/contact_handlers.rs diff --git a/apps/desktop/src/sync/drain.rs b/src/sync/drain.rs similarity index 100% rename from apps/desktop/src/sync/drain.rs rename to src/sync/drain.rs diff --git a/apps/desktop/src/sync/engine.rs b/src/sync/engine.rs similarity index 100% rename from apps/desktop/src/sync/engine.rs rename to src/sync/engine.rs diff --git a/apps/desktop/src/sync/event.rs b/src/sync/event.rs similarity index 100% rename from apps/desktop/src/sync/event.rs rename to src/sync/event.rs diff --git a/apps/desktop/src/sync/freshness.rs b/src/sync/freshness.rs similarity index 100% rename from apps/desktop/src/sync/freshness.rs rename to src/sync/freshness.rs diff --git a/apps/desktop/src/sync/handle.rs b/src/sync/handle.rs similarity index 100% rename from apps/desktop/src/sync/handle.rs rename to src/sync/handle.rs diff --git a/apps/desktop/src/sync/job.rs b/src/sync/job.rs similarity index 100% rename from apps/desktop/src/sync/job.rs rename to src/sync/job.rs diff --git a/apps/desktop/src/sync/jobs.rs b/src/sync/jobs.rs similarity index 100% rename from apps/desktop/src/sync/jobs.rs rename to src/sync/jobs.rs diff --git a/apps/desktop/src/sync/jobs/abyssals.rs b/src/sync/jobs/abyssals.rs similarity index 100% rename from apps/desktop/src/sync/jobs/abyssals.rs rename to src/sync/jobs/abyssals.rs diff --git a/apps/desktop/src/sync/jobs/asset_sync.rs b/src/sync/jobs/asset_sync.rs similarity index 100% rename from apps/desktop/src/sync/jobs/asset_sync.rs rename to src/sync/jobs/asset_sync.rs diff --git a/apps/desktop/src/sync/jobs/blueprints.rs b/src/sync/jobs/blueprints.rs similarity index 100% rename from apps/desktop/src/sync/jobs/blueprints.rs rename to src/sync/jobs/blueprints.rs diff --git a/apps/desktop/src/sync/jobs/character_calendar.rs b/src/sync/jobs/character_calendar.rs similarity index 100% rename from apps/desktop/src/sync/jobs/character_calendar.rs rename to src/sync/jobs/character_calendar.rs diff --git a/apps/desktop/src/sync/jobs/character_clones.rs b/src/sync/jobs/character_clones.rs similarity index 100% rename from apps/desktop/src/sync/jobs/character_clones.rs rename to src/sync/jobs/character_clones.rs diff --git a/apps/desktop/src/sync/jobs/character_contacts.rs b/src/sync/jobs/character_contacts.rs similarity index 100% rename from apps/desktop/src/sync/jobs/character_contacts.rs rename to src/sync/jobs/character_contacts.rs diff --git a/apps/desktop/src/sync/jobs/character_contracts.rs b/src/sync/jobs/character_contracts.rs similarity index 100% rename from apps/desktop/src/sync/jobs/character_contracts.rs rename to src/sync/jobs/character_contracts.rs diff --git a/apps/desktop/src/sync/jobs/character_killmails.rs b/src/sync/jobs/character_killmails.rs similarity index 100% rename from apps/desktop/src/sync/jobs/character_killmails.rs rename to src/sync/jobs/character_killmails.rs diff --git a/apps/desktop/src/sync/jobs/character_mail.rs b/src/sync/jobs/character_mail.rs similarity index 100% rename from apps/desktop/src/sync/jobs/character_mail.rs rename to src/sync/jobs/character_mail.rs diff --git a/apps/desktop/src/sync/jobs/character_market_orders.rs b/src/sync/jobs/character_market_orders.rs similarity index 100% rename from apps/desktop/src/sync/jobs/character_market_orders.rs rename to src/sync/jobs/character_market_orders.rs diff --git a/apps/desktop/src/sync/jobs/character_notifications.rs b/src/sync/jobs/character_notifications.rs similarity index 100% rename from apps/desktop/src/sync/jobs/character_notifications.rs rename to src/sync/jobs/character_notifications.rs diff --git a/apps/desktop/src/sync/jobs/character_planets.rs b/src/sync/jobs/character_planets.rs similarity index 100% rename from apps/desktop/src/sync/jobs/character_planets.rs rename to src/sync/jobs/character_planets.rs diff --git a/apps/desktop/src/sync/jobs/character_profile.rs b/src/sync/jobs/character_profile.rs similarity index 100% rename from apps/desktop/src/sync/jobs/character_profile.rs rename to src/sync/jobs/character_profile.rs diff --git a/apps/desktop/src/sync/jobs/character_roles.rs b/src/sync/jobs/character_roles.rs similarity index 100% rename from apps/desktop/src/sync/jobs/character_roles.rs rename to src/sync/jobs/character_roles.rs diff --git a/apps/desktop/src/sync/jobs/character_skills.rs b/src/sync/jobs/character_skills.rs similarity index 100% rename from apps/desktop/src/sync/jobs/character_skills.rs rename to src/sync/jobs/character_skills.rs diff --git a/apps/desktop/src/sync/jobs/character_standings.rs b/src/sync/jobs/character_standings.rs similarity index 100% rename from apps/desktop/src/sync/jobs/character_standings.rs rename to src/sync/jobs/character_standings.rs diff --git a/apps/desktop/src/sync/jobs/character_telemetry.rs b/src/sync/jobs/character_telemetry.rs similarity index 100% rename from apps/desktop/src/sync/jobs/character_telemetry.rs rename to src/sync/jobs/character_telemetry.rs diff --git a/apps/desktop/src/sync/jobs/character_wallet.rs b/src/sync/jobs/character_wallet.rs similarity index 100% rename from apps/desktop/src/sync/jobs/character_wallet.rs rename to src/sync/jobs/character_wallet.rs diff --git a/apps/desktop/src/sync/jobs/contact_sync.rs b/src/sync/jobs/contact_sync.rs similarity index 100% rename from apps/desktop/src/sync/jobs/contact_sync.rs rename to src/sync/jobs/contact_sync.rs diff --git a/apps/desktop/src/sync/jobs/corporation_contacts.rs b/src/sync/jobs/corporation_contacts.rs similarity index 100% rename from apps/desktop/src/sync/jobs/corporation_contacts.rs rename to src/sync/jobs/corporation_contacts.rs diff --git a/apps/desktop/src/sync/jobs/corporation_contracts.rs b/src/sync/jobs/corporation_contracts.rs similarity index 100% rename from apps/desktop/src/sync/jobs/corporation_contracts.rs rename to src/sync/jobs/corporation_contracts.rs diff --git a/apps/desktop/src/sync/jobs/corporation_customs_offices.rs b/src/sync/jobs/corporation_customs_offices.rs similarity index 100% rename from apps/desktop/src/sync/jobs/corporation_customs_offices.rs rename to src/sync/jobs/corporation_customs_offices.rs diff --git a/apps/desktop/src/sync/jobs/corporation_killmails.rs b/src/sync/jobs/corporation_killmails.rs similarity index 100% rename from apps/desktop/src/sync/jobs/corporation_killmails.rs rename to src/sync/jobs/corporation_killmails.rs diff --git a/apps/desktop/src/sync/jobs/corporation_market_orders.rs b/src/sync/jobs/corporation_market_orders.rs similarity index 100% rename from apps/desktop/src/sync/jobs/corporation_market_orders.rs rename to src/sync/jobs/corporation_market_orders.rs diff --git a/apps/desktop/src/sync/jobs/corporation_profile.rs b/src/sync/jobs/corporation_profile.rs similarity index 100% rename from apps/desktop/src/sync/jobs/corporation_profile.rs rename to src/sync/jobs/corporation_profile.rs diff --git a/apps/desktop/src/sync/jobs/corporation_standings.rs b/src/sync/jobs/corporation_standings.rs similarity index 100% rename from apps/desktop/src/sync/jobs/corporation_standings.rs rename to src/sync/jobs/corporation_standings.rs diff --git a/apps/desktop/src/sync/jobs/corporation_structures.rs b/src/sync/jobs/corporation_structures.rs similarity index 100% rename from apps/desktop/src/sync/jobs/corporation_structures.rs rename to src/sync/jobs/corporation_structures.rs diff --git a/apps/desktop/src/sync/jobs/corporation_wallet.rs b/src/sync/jobs/corporation_wallet.rs similarity index 100% rename from apps/desktop/src/sync/jobs/corporation_wallet.rs rename to src/sync/jobs/corporation_wallet.rs diff --git a/apps/desktop/src/sync/jobs/industry.rs b/src/sync/jobs/industry.rs similarity index 100% rename from apps/desktop/src/sync/jobs/industry.rs rename to src/sync/jobs/industry.rs diff --git a/apps/desktop/src/sync/jobs/industry_cost_indices.rs b/src/sync/jobs/industry_cost_indices.rs similarity index 100% rename from apps/desktop/src/sync/jobs/industry_cost_indices.rs rename to src/sync/jobs/industry_cost_indices.rs diff --git a/apps/desktop/src/sync/jobs/killmail_detail_backfill.rs b/src/sync/jobs/killmail_detail_backfill.rs similarity index 100% rename from apps/desktop/src/sync/jobs/killmail_detail_backfill.rs rename to src/sync/jobs/killmail_detail_backfill.rs diff --git a/apps/desktop/src/sync/jobs/killmail_reconcile.rs b/src/sync/jobs/killmail_reconcile.rs similarity index 100% rename from apps/desktop/src/sync/jobs/killmail_reconcile.rs rename to src/sync/jobs/killmail_reconcile.rs diff --git a/apps/desktop/src/sync/jobs/killmail_value.rs b/src/sync/jobs/killmail_value.rs similarity index 100% rename from apps/desktop/src/sync/jobs/killmail_value.rs rename to src/sync/jobs/killmail_value.rs diff --git a/apps/desktop/src/sync/jobs/market_prices.rs b/src/sync/jobs/market_prices.rs similarity index 100% rename from apps/desktop/src/sync/jobs/market_prices.rs rename to src/sync/jobs/market_prices.rs diff --git a/apps/desktop/src/sync/jobs/mining_extractions.rs b/src/sync/jobs/mining_extractions.rs similarity index 100% rename from apps/desktop/src/sync/jobs/mining_extractions.rs rename to src/sync/jobs/mining_extractions.rs diff --git a/apps/desktop/src/sync/jobs/names.rs b/src/sync/jobs/names.rs similarity index 100% rename from apps/desktop/src/sync/jobs/names.rs rename to src/sync/jobs/names.rs diff --git a/apps/desktop/src/sync/jobs/net_worth_snapshot.rs b/src/sync/jobs/net_worth_snapshot.rs similarity index 100% rename from apps/desktop/src/sync/jobs/net_worth_snapshot.rs rename to src/sync/jobs/net_worth_snapshot.rs diff --git a/apps/desktop/src/sync/jobs/resolve.rs b/src/sync/jobs/resolve.rs similarity index 100% rename from apps/desktop/src/sync/jobs/resolve.rs rename to src/sync/jobs/resolve.rs diff --git a/apps/desktop/src/sync/jobs/token_audit.rs b/src/sync/jobs/token_audit.rs similarity index 100% rename from apps/desktop/src/sync/jobs/token_audit.rs rename to src/sync/jobs/token_audit.rs diff --git a/apps/desktop/src/sync/jobs/wallet_journal_reconcile.rs b/src/sync/jobs/wallet_journal_reconcile.rs similarity index 100% rename from apps/desktop/src/sync/jobs/wallet_journal_reconcile.rs rename to src/sync/jobs/wallet_journal_reconcile.rs diff --git a/apps/desktop/src/sync/language_refresh.rs b/src/sync/language_refresh.rs similarity index 100% rename from apps/desktop/src/sync/language_refresh.rs rename to src/sync/language_refresh.rs diff --git a/apps/desktop/src/sync/mail_handlers.rs b/src/sync/mail_handlers.rs similarity index 100% rename from apps/desktop/src/sync/mail_handlers.rs rename to src/sync/mail_handlers.rs diff --git a/apps/desktop/src/sync/outbox.rs b/src/sync/outbox.rs similarity index 100% rename from apps/desktop/src/sync/outbox.rs rename to src/sync/outbox.rs diff --git a/apps/desktop/src/sync/outcome.rs b/src/sync/outcome.rs similarity index 100% rename from apps/desktop/src/sync/outcome.rs rename to src/sync/outcome.rs diff --git a/apps/desktop/src/sync/schedule.rs b/src/sync/schedule.rs similarity index 100% rename from apps/desktop/src/sync/schedule.rs rename to src/sync/schedule.rs diff --git a/apps/desktop/src/sync/status.rs b/src/sync/status.rs similarity index 100% rename from apps/desktop/src/sync/status.rs rename to src/sync/status.rs diff --git a/apps/desktop/src/sync/structure_resolution.rs b/src/sync/structure_resolution.rs similarity index 100% rename from apps/desktop/src/sync/structure_resolution.rs rename to src/sync/structure_resolution.rs diff --git a/apps/desktop/src/sync/subject.rs b/src/sync/subject.rs similarity index 100% rename from apps/desktop/src/sync/subject.rs rename to src/sync/subject.rs diff --git a/apps/desktop/src/sync/token.rs b/src/sync/token.rs similarity index 100% rename from apps/desktop/src/sync/token.rs rename to src/sync/token.rs diff --git a/apps/desktop/src/ui.rs b/src/ui.rs similarity index 100% rename from apps/desktop/src/ui.rs rename to src/ui.rs diff --git a/apps/desktop/src/ui/components.rs b/src/ui/components.rs similarity index 100% rename from apps/desktop/src/ui/components.rs rename to src/ui/components.rs diff --git a/apps/desktop/src/ui/components/add_tag_modal.rs b/src/ui/components/add_tag_modal.rs similarity index 100% rename from apps/desktop/src/ui/components/add_tag_modal.rs rename to src/ui/components/add_tag_modal.rs diff --git a/apps/desktop/src/ui/components/anchored_dropdown.rs b/src/ui/components/anchored_dropdown.rs similarity index 100% rename from apps/desktop/src/ui/components/anchored_dropdown.rs rename to src/ui/components/anchored_dropdown.rs diff --git a/apps/desktop/src/ui/components/avatar.rs b/src/ui/components/avatar.rs similarity index 100% rename from apps/desktop/src/ui/components/avatar.rs rename to src/ui/components/avatar.rs diff --git a/apps/desktop/src/ui/components/backdrop.rs b/src/ui/components/backdrop.rs similarity index 100% rename from apps/desktop/src/ui/components/backdrop.rs rename to src/ui/components/backdrop.rs diff --git a/apps/desktop/src/ui/components/badge.rs b/src/ui/components/badge.rs similarity index 100% rename from apps/desktop/src/ui/components/badge.rs rename to src/ui/components/badge.rs diff --git a/apps/desktop/src/ui/components/button.rs b/src/ui/components/button.rs similarity index 100% rename from apps/desktop/src/ui/components/button.rs rename to src/ui/components/button.rs diff --git a/apps/desktop/src/ui/components/card.rs b/src/ui/components/card.rs similarity index 100% rename from apps/desktop/src/ui/components/card.rs rename to src/ui/components/card.rs diff --git a/apps/desktop/src/ui/components/chip.rs b/src/ui/components/chip.rs similarity index 100% rename from apps/desktop/src/ui/components/chip.rs rename to src/ui/components/chip.rs diff --git a/apps/desktop/src/ui/components/clip.rs b/src/ui/components/clip.rs similarity index 100% rename from apps/desktop/src/ui/components/clip.rs rename to src/ui/components/clip.rs diff --git a/apps/desktop/src/ui/components/color_picker.rs b/src/ui/components/color_picker.rs similarity index 100% rename from apps/desktop/src/ui/components/color_picker.rs rename to src/ui/components/color_picker.rs diff --git a/apps/desktop/src/ui/components/confirm_modal.rs b/src/ui/components/confirm_modal.rs similarity index 100% rename from apps/desktop/src/ui/components/confirm_modal.rs rename to src/ui/components/confirm_modal.rs diff --git a/apps/desktop/src/ui/components/context_menu.rs b/src/ui/components/context_menu.rs similarity index 100% rename from apps/desktop/src/ui/components/context_menu.rs rename to src/ui/components/context_menu.rs diff --git a/apps/desktop/src/ui/components/count_badge.rs b/src/ui/components/count_badge.rs similarity index 100% rename from apps/desktop/src/ui/components/count_badge.rs rename to src/ui/components/count_badge.rs diff --git a/apps/desktop/src/ui/components/date_picker.rs b/src/ui/components/date_picker.rs similarity index 100% rename from apps/desktop/src/ui/components/date_picker.rs rename to src/ui/components/date_picker.rs diff --git a/apps/desktop/src/ui/components/empty_state.rs b/src/ui/components/empty_state.rs similarity index 100% rename from apps/desktop/src/ui/components/empty_state.rs rename to src/ui/components/empty_state.rs diff --git a/apps/desktop/src/ui/components/entity_search.rs b/src/ui/components/entity_search.rs similarity index 100% rename from apps/desktop/src/ui/components/entity_search.rs rename to src/ui/components/entity_search.rs diff --git a/apps/desktop/src/ui/components/esi_status.rs b/src/ui/components/esi_status.rs similarity index 100% rename from apps/desktop/src/ui/components/esi_status.rs rename to src/ui/components/esi_status.rs diff --git a/apps/desktop/src/ui/components/eve_time.rs b/src/ui/components/eve_time.rs similarity index 100% rename from apps/desktop/src/ui/components/eve_time.rs rename to src/ui/components/eve_time.rs diff --git a/apps/desktop/src/ui/components/eyebrow.rs b/src/ui/components/eyebrow.rs similarity index 100% rename from apps/desktop/src/ui/components/eyebrow.rs rename to src/ui/components/eyebrow.rs diff --git a/apps/desktop/src/ui/components/facility_combobox.rs b/src/ui/components/facility_combobox.rs similarity index 100% rename from apps/desktop/src/ui/components/facility_combobox.rs rename to src/ui/components/facility_combobox.rs diff --git a/apps/desktop/src/ui/components/forbidden.rs b/src/ui/components/forbidden.rs similarity index 100% rename from apps/desktop/src/ui/components/forbidden.rs rename to src/ui/components/forbidden.rs diff --git a/apps/desktop/src/ui/components/glyph_badge.rs b/src/ui/components/glyph_badge.rs similarity index 100% rename from apps/desktop/src/ui/components/glyph_badge.rs rename to src/ui/components/glyph_badge.rs diff --git a/apps/desktop/src/ui/components/header.rs b/src/ui/components/header.rs similarity index 100% rename from apps/desktop/src/ui/components/header.rs rename to src/ui/components/header.rs diff --git a/apps/desktop/src/ui/components/icon.rs b/src/ui/components/icon.rs similarity index 100% rename from apps/desktop/src/ui/components/icon.rs rename to src/ui/components/icon.rs diff --git a/apps/desktop/src/ui/components/icon_tile.rs b/src/ui/components/icon_tile.rs similarity index 100% rename from apps/desktop/src/ui/components/icon_tile.rs rename to src/ui/components/icon_tile.rs diff --git a/apps/desktop/src/ui/components/line_chart.rs b/src/ui/components/line_chart.rs similarity index 100% rename from apps/desktop/src/ui/components/line_chart.rs rename to src/ui/components/line_chart.rs diff --git a/apps/desktop/src/ui/components/location_combobox.rs b/src/ui/components/location_combobox.rs similarity index 100% rename from apps/desktop/src/ui/components/location_combobox.rs rename to src/ui/components/location_combobox.rs diff --git a/apps/desktop/src/ui/components/meter.rs b/src/ui/components/meter.rs similarity index 100% rename from apps/desktop/src/ui/components/meter.rs rename to src/ui/components/meter.rs diff --git a/apps/desktop/src/ui/components/modal_overlay.rs b/src/ui/components/modal_overlay.rs similarity index 100% rename from apps/desktop/src/ui/components/modal_overlay.rs rename to src/ui/components/modal_overlay.rs diff --git a/apps/desktop/src/ui/components/notification_row.rs b/src/ui/components/notification_row.rs similarity index 100% rename from apps/desktop/src/ui/components/notification_row.rs rename to src/ui/components/notification_row.rs diff --git a/apps/desktop/src/ui/components/notification_toaster.rs b/src/ui/components/notification_toaster.rs similarity index 100% rename from apps/desktop/src/ui/components/notification_toaster.rs rename to src/ui/components/notification_toaster.rs diff --git a/apps/desktop/src/ui/components/overlay_layer.rs b/src/ui/components/overlay_layer.rs similarity index 100% rename from apps/desktop/src/ui/components/overlay_layer.rs rename to src/ui/components/overlay_layer.rs diff --git a/apps/desktop/src/ui/components/panel_header.rs b/src/ui/components/panel_header.rs similarity index 100% rename from apps/desktop/src/ui/components/panel_header.rs rename to src/ui/components/panel_header.rs diff --git a/apps/desktop/src/ui/components/picker.rs b/src/ui/components/picker.rs similarity index 100% rename from apps/desktop/src/ui/components/picker.rs rename to src/ui/components/picker.rs diff --git a/apps/desktop/src/ui/components/positioned_dropdown.rs b/src/ui/components/positioned_dropdown.rs similarity index 100% rename from apps/desktop/src/ui/components/positioned_dropdown.rs rename to src/ui/components/positioned_dropdown.rs diff --git a/apps/desktop/src/ui/components/progress_bar.rs b/src/ui/components/progress_bar.rs similarity index 100% rename from apps/desktop/src/ui/components/progress_bar.rs rename to src/ui/components/progress_bar.rs diff --git a/apps/desktop/src/ui/components/rail.rs b/src/ui/components/rail.rs similarity index 100% rename from apps/desktop/src/ui/components/rail.rs rename to src/ui/components/rail.rs diff --git a/apps/desktop/src/ui/components/resizable_pane.rs b/src/ui/components/resizable_pane.rs similarity index 100% rename from apps/desktop/src/ui/components/resizable_pane.rs rename to src/ui/components/resizable_pane.rs diff --git a/apps/desktop/src/ui/components/rig_combobox.rs b/src/ui/components/rig_combobox.rs similarity index 100% rename from apps/desktop/src/ui/components/rig_combobox.rs rename to src/ui/components/rig_combobox.rs diff --git a/apps/desktop/src/ui/components/rule.rs b/src/ui/components/rule.rs similarity index 100% rename from apps/desktop/src/ui/components/rule.rs rename to src/ui/components/rule.rs diff --git a/apps/desktop/src/ui/components/section_header.rs b/src/ui/components/section_header.rs similarity index 100% rename from apps/desktop/src/ui/components/section_header.rs rename to src/ui/components/section_header.rs diff --git a/apps/desktop/src/ui/components/segmented.rs b/src/ui/components/segmented.rs similarity index 100% rename from apps/desktop/src/ui/components/segmented.rs rename to src/ui/components/segmented.rs diff --git a/apps/desktop/src/ui/components/skill_detail.rs b/src/ui/components/skill_detail.rs similarity index 100% rename from apps/desktop/src/ui/components/skill_detail.rs rename to src/ui/components/skill_detail.rs diff --git a/apps/desktop/src/ui/components/status.rs b/src/ui/components/status.rs similarity index 100% rename from apps/desktop/src/ui/components/status.rs rename to src/ui/components/status.rs diff --git a/apps/desktop/src/ui/components/status_bar.rs b/src/ui/components/status_bar.rs similarity index 100% rename from apps/desktop/src/ui/components/status_bar.rs rename to src/ui/components/status_bar.rs diff --git a/apps/desktop/src/ui/components/step_badge.rs b/src/ui/components/step_badge.rs similarity index 100% rename from apps/desktop/src/ui/components/step_badge.rs rename to src/ui/components/step_badge.rs diff --git a/apps/desktop/src/ui/components/sync_chip.rs b/src/ui/components/sync_chip.rs similarity index 100% rename from apps/desktop/src/ui/components/sync_chip.rs rename to src/ui/components/sync_chip.rs diff --git a/apps/desktop/src/ui/components/sync_popover.rs b/src/ui/components/sync_popover.rs similarity index 100% rename from apps/desktop/src/ui/components/sync_popover.rs rename to src/ui/components/sync_popover.rs diff --git a/apps/desktop/src/ui/components/tab_select.rs b/src/ui/components/tab_select.rs similarity index 100% rename from apps/desktop/src/ui/components/tab_select.rs rename to src/ui/components/tab_select.rs diff --git a/apps/desktop/src/ui/components/table_cell.rs b/src/ui/components/table_cell.rs similarity index 100% rename from apps/desktop/src/ui/components/table_cell.rs rename to src/ui/components/table_cell.rs diff --git a/apps/desktop/src/ui/components/text_input.rs b/src/ui/components/text_input.rs similarity index 100% rename from apps/desktop/src/ui/components/text_input.rs rename to src/ui/components/text_input.rs diff --git a/apps/desktop/src/ui/components/toggle.rs b/src/ui/components/toggle.rs similarity index 100% rename from apps/desktop/src/ui/components/toggle.rs rename to src/ui/components/toggle.rs diff --git a/apps/desktop/src/ui/components/updater_banner.rs b/src/ui/components/updater_banner.rs similarity index 100% rename from apps/desktop/src/ui/components/updater_banner.rs rename to src/ui/components/updater_banner.rs diff --git a/apps/desktop/src/ui/components/virtual_list.rs b/src/ui/components/virtual_list.rs similarity index 100% rename from apps/desktop/src/ui/components/virtual_list.rs rename to src/ui/components/virtual_list.rs diff --git a/apps/desktop/src/ui/format.rs b/src/ui/format.rs similarity index 100% rename from apps/desktop/src/ui/format.rs rename to src/ui/format.rs diff --git a/apps/desktop/src/ui/load_epoch.rs b/src/ui/load_epoch.rs similarity index 100% rename from apps/desktop/src/ui/load_epoch.rs rename to src/ui/load_epoch.rs diff --git a/apps/desktop/src/ui/style.rs b/src/ui/style.rs similarity index 100% rename from apps/desktop/src/ui/style.rs rename to src/ui/style.rs diff --git a/apps/desktop/src/ui/style/color.rs b/src/ui/style/color.rs similarity index 100% rename from apps/desktop/src/ui/style/color.rs rename to src/ui/style/color.rs diff --git a/apps/desktop/src/ui/style/control.rs b/src/ui/style/control.rs similarity index 100% rename from apps/desktop/src/ui/style/control.rs rename to src/ui/style/control.rs diff --git a/apps/desktop/src/ui/style/radius.rs b/src/ui/style/radius.rs similarity index 100% rename from apps/desktop/src/ui/style/radius.rs rename to src/ui/style/radius.rs diff --git a/apps/desktop/src/ui/style/shadow.rs b/src/ui/style/shadow.rs similarity index 100% rename from apps/desktop/src/ui/style/shadow.rs rename to src/ui/style/shadow.rs diff --git a/apps/desktop/src/ui/style/spacing.rs b/src/ui/style/spacing.rs similarity index 100% rename from apps/desktop/src/ui/style/spacing.rs rename to src/ui/style/spacing.rs diff --git a/apps/desktop/src/ui/style/typography.rs b/src/ui/style/typography.rs similarity index 100% rename from apps/desktop/src/ui/style/typography.rs rename to src/ui/style/typography.rs diff --git a/apps/desktop/tests/fixtures/esi/character_attributes.json b/tests/fixtures/esi/character_attributes.json similarity index 100% rename from apps/desktop/tests/fixtures/esi/character_attributes.json rename to tests/fixtures/esi/character_attributes.json diff --git a/apps/desktop/tests/fixtures/esi/dogma_dynamic_item.json b/tests/fixtures/esi/dogma_dynamic_item.json similarity index 100% rename from apps/desktop/tests/fixtures/esi/dogma_dynamic_item.json rename to tests/fixtures/esi/dogma_dynamic_item.json diff --git a/apps/desktop/tests/fixtures/esi/universe_types_3300.json b/tests/fixtures/esi/universe_types_3300.json similarity index 100% rename from apps/desktop/tests/fixtures/esi/universe_types_3300.json rename to tests/fixtures/esi/universe_types_3300.json diff --git a/apps/desktop/tests/fixtures/esi/universe_types_9899.json b/tests/fixtures/esi/universe_types_9899.json similarity index 100% rename from apps/desktop/tests/fixtures/esi/universe_types_9899.json rename to tests/fixtures/esi/universe_types_9899.json diff --git a/apps/desktop/tests/fixtures/telemetry/crash_batch.json b/tests/fixtures/telemetry/crash_batch.json similarity index 100% rename from apps/desktop/tests/fixtures/telemetry/crash_batch.json rename to tests/fixtures/telemetry/crash_batch.json diff --git a/apps/desktop/tests/fixtures/telemetry/session_all_streams.json b/tests/fixtures/telemetry/session_all_streams.json similarity index 100% rename from apps/desktop/tests/fixtures/telemetry/session_all_streams.json rename to tests/fixtures/telemetry/session_all_streams.json diff --git a/apps/desktop/tests/i18n_no_hardcoded.rs b/tests/i18n_no_hardcoded.rs similarity index 100% rename from apps/desktop/tests/i18n_no_hardcoded.rs rename to tests/i18n_no_hardcoded.rs diff --git a/apps/desktop/tests/i18n_parity.rs b/tests/i18n_parity.rs similarity index 100% rename from apps/desktop/tests/i18n_parity.rs rename to tests/i18n_parity.rs diff --git a/apps/marketing/.gitignore b/web/marketing/.gitignore similarity index 100% rename from apps/marketing/.gitignore rename to web/marketing/.gitignore diff --git a/apps/marketing/.npmrc b/web/marketing/.npmrc similarity index 100% rename from apps/marketing/.npmrc rename to web/marketing/.npmrc diff --git a/apps/marketing/aube-lock.yaml b/web/marketing/aube-lock.yaml similarity index 100% rename from apps/marketing/aube-lock.yaml rename to web/marketing/aube-lock.yaml diff --git a/apps/marketing/content/assets.md b/web/marketing/content/assets.md similarity index 100% rename from apps/marketing/content/assets.md rename to web/marketing/content/assets.md diff --git a/apps/marketing/content/calendar.md b/web/marketing/content/calendar.md similarity index 100% rename from apps/marketing/content/calendar.md rename to web/marketing/content/calendar.md diff --git a/apps/marketing/content/captains-log.md b/web/marketing/content/captains-log.md similarity index 100% rename from apps/marketing/content/captains-log.md rename to web/marketing/content/captains-log.md diff --git a/apps/marketing/content/getting-started.md b/web/marketing/content/getting-started.md similarity index 100% rename from apps/marketing/content/getting-started.md rename to web/marketing/content/getting-started.md diff --git a/apps/marketing/content/index.md b/web/marketing/content/index.md similarity index 100% rename from apps/marketing/content/index.md rename to web/marketing/content/index.md diff --git a/apps/marketing/content/industry.md b/web/marketing/content/industry.md similarity index 100% rename from apps/marketing/content/industry.md rename to web/marketing/content/industry.md diff --git a/apps/marketing/content/interface.md b/web/marketing/content/interface.md similarity index 100% rename from apps/marketing/content/interface.md rename to web/marketing/content/interface.md diff --git a/apps/marketing/content/mail.md b/web/marketing/content/mail.md similarity index 100% rename from apps/marketing/content/mail.md rename to web/marketing/content/mail.md diff --git a/apps/marketing/content/mcp.md b/web/marketing/content/mcp.md similarity index 100% rename from apps/marketing/content/mcp.md rename to web/marketing/content/mcp.md diff --git a/apps/marketing/content/notifications.md b/web/marketing/content/notifications.md similarity index 100% rename from apps/marketing/content/notifications.md rename to web/marketing/content/notifications.md diff --git a/apps/marketing/content/onboarding.md b/web/marketing/content/onboarding.md similarity index 100% rename from apps/marketing/content/onboarding.md rename to web/marketing/content/onboarding.md diff --git a/apps/marketing/content/roster.md b/web/marketing/content/roster.md similarity index 100% rename from apps/marketing/content/roster.md rename to web/marketing/content/roster.md diff --git a/apps/marketing/content/settings.md b/web/marketing/content/settings.md similarity index 100% rename from apps/marketing/content/settings.md rename to web/marketing/content/settings.md diff --git a/apps/marketing/content/skills.md b/web/marketing/content/skills.md similarity index 100% rename from apps/marketing/content/skills.md rename to web/marketing/content/skills.md diff --git a/apps/marketing/content/troubleshooting.md b/web/marketing/content/troubleshooting.md similarity index 100% rename from apps/marketing/content/troubleshooting.md rename to web/marketing/content/troubleshooting.md diff --git a/apps/marketing/content/wallet.md b/web/marketing/content/wallet.md similarity index 100% rename from apps/marketing/content/wallet.md rename to web/marketing/content/wallet.md diff --git a/apps/marketing/index.html b/web/marketing/index.html similarity index 100% rename from apps/marketing/index.html rename to web/marketing/index.html diff --git a/apps/marketing/package.json b/web/marketing/package.json similarity index 100% rename from apps/marketing/package.json rename to web/marketing/package.json diff --git a/apps/marketing/public/CNAME b/web/marketing/public/CNAME similarity index 100% rename from apps/marketing/public/CNAME rename to web/marketing/public/CNAME diff --git a/apps/marketing/public/auth/callback/index.html b/web/marketing/public/auth/callback/index.html similarity index 100% rename from apps/marketing/public/auth/callback/index.html rename to web/marketing/public/auth/callback/index.html diff --git a/apps/marketing/public/docs/img/assets/abyssals.png b/web/marketing/public/docs/img/assets/abyssals.png similarity index 100% rename from apps/marketing/public/docs/img/assets/abyssals.png rename to web/marketing/public/docs/img/assets/abyssals.png diff --git a/apps/marketing/public/docs/img/assets/inventory.png b/web/marketing/public/docs/img/assets/inventory.png similarity index 100% rename from apps/marketing/public/docs/img/assets/inventory.png rename to web/marketing/public/docs/img/assets/inventory.png diff --git a/apps/marketing/public/docs/img/assets/stockpile-editor.png b/web/marketing/public/docs/img/assets/stockpile-editor.png similarity index 100% rename from apps/marketing/public/docs/img/assets/stockpile-editor.png rename to web/marketing/public/docs/img/assets/stockpile-editor.png diff --git a/apps/marketing/public/docs/img/assets/stockpile-import.png b/web/marketing/public/docs/img/assets/stockpile-import.png similarity index 100% rename from apps/marketing/public/docs/img/assets/stockpile-import.png rename to web/marketing/public/docs/img/assets/stockpile-import.png diff --git a/apps/marketing/public/docs/img/assets/stockpiles.png b/web/marketing/public/docs/img/assets/stockpiles.png similarity index 100% rename from apps/marketing/public/docs/img/assets/stockpiles.png rename to web/marketing/public/docs/img/assets/stockpiles.png diff --git a/apps/marketing/public/docs/img/assets/tracker.png b/web/marketing/public/docs/img/assets/tracker.png similarity index 100% rename from apps/marketing/public/docs/img/assets/tracker.png rename to web/marketing/public/docs/img/assets/tracker.png diff --git a/apps/marketing/public/docs/img/assets/values.png b/web/marketing/public/docs/img/assets/values.png similarity index 100% rename from apps/marketing/public/docs/img/assets/values.png rename to web/marketing/public/docs/img/assets/values.png diff --git a/apps/marketing/public/docs/img/calendar/agenda.png b/web/marketing/public/docs/img/calendar/agenda.png similarity index 100% rename from apps/marketing/public/docs/img/calendar/agenda.png rename to web/marketing/public/docs/img/calendar/agenda.png diff --git a/apps/marketing/public/docs/img/calendar/day.png b/web/marketing/public/docs/img/calendar/day.png similarity index 100% rename from apps/marketing/public/docs/img/calendar/day.png rename to web/marketing/public/docs/img/calendar/day.png diff --git a/apps/marketing/public/docs/img/calendar/month.png b/web/marketing/public/docs/img/calendar/month.png similarity index 100% rename from apps/marketing/public/docs/img/calendar/month.png rename to web/marketing/public/docs/img/calendar/month.png diff --git a/apps/marketing/public/docs/img/calendar/week.png b/web/marketing/public/docs/img/calendar/week.png similarity index 100% rename from apps/marketing/public/docs/img/calendar/week.png rename to web/marketing/public/docs/img/calendar/week.png diff --git a/apps/marketing/public/docs/img/calendar/year.png b/web/marketing/public/docs/img/calendar/year.png similarity index 100% rename from apps/marketing/public/docs/img/calendar/year.png rename to web/marketing/public/docs/img/calendar/year.png diff --git a/apps/marketing/public/docs/img/captains-log/captains-log.png b/web/marketing/public/docs/img/captains-log/captains-log.png similarity index 100% rename from apps/marketing/public/docs/img/captains-log/captains-log.png rename to web/marketing/public/docs/img/captains-log/captains-log.png diff --git a/apps/marketing/public/docs/img/getting-started/auth-panel.png b/web/marketing/public/docs/img/getting-started/auth-panel.png similarity index 100% rename from apps/marketing/public/docs/img/getting-started/auth-panel.png rename to web/marketing/public/docs/img/getting-started/auth-panel.png diff --git a/apps/marketing/public/docs/img/getting-started/auth-waiting.png b/web/marketing/public/docs/img/getting-started/auth-waiting.png similarity index 100% rename from apps/marketing/public/docs/img/getting-started/auth-waiting.png rename to web/marketing/public/docs/img/getting-started/auth-waiting.png diff --git a/apps/marketing/public/docs/img/getting-started/first-time-run/asset-feature-select.png b/web/marketing/public/docs/img/getting-started/first-time-run/asset-feature-select.png similarity index 100% rename from apps/marketing/public/docs/img/getting-started/first-time-run/asset-feature-select.png rename to web/marketing/public/docs/img/getting-started/first-time-run/asset-feature-select.png diff --git a/apps/marketing/public/docs/img/getting-started/first-time-run/character-feature-select.png b/web/marketing/public/docs/img/getting-started/first-time-run/character-feature-select.png similarity index 100% rename from apps/marketing/public/docs/img/getting-started/first-time-run/character-feature-select.png rename to web/marketing/public/docs/img/getting-started/first-time-run/character-feature-select.png diff --git a/apps/marketing/public/docs/img/getting-started/first-time-run/finish.png b/web/marketing/public/docs/img/getting-started/first-time-run/finish.png similarity index 100% rename from apps/marketing/public/docs/img/getting-started/first-time-run/finish.png rename to web/marketing/public/docs/img/getting-started/first-time-run/finish.png diff --git a/apps/marketing/public/docs/img/getting-started/first-time-run/industry-feature-select.png b/web/marketing/public/docs/img/getting-started/first-time-run/industry-feature-select.png similarity index 100% rename from apps/marketing/public/docs/img/getting-started/first-time-run/industry-feature-select.png rename to web/marketing/public/docs/img/getting-started/first-time-run/industry-feature-select.png diff --git a/apps/marketing/public/docs/img/getting-started/first-time-run/language-select.png b/web/marketing/public/docs/img/getting-started/first-time-run/language-select.png similarity index 100% rename from apps/marketing/public/docs/img/getting-started/first-time-run/language-select.png rename to web/marketing/public/docs/img/getting-started/first-time-run/language-select.png diff --git a/apps/marketing/public/docs/img/getting-started/first-time-run/storage-settings.png b/web/marketing/public/docs/img/getting-started/first-time-run/storage-settings.png similarity index 100% rename from apps/marketing/public/docs/img/getting-started/first-time-run/storage-settings.png rename to web/marketing/public/docs/img/getting-started/first-time-run/storage-settings.png diff --git a/apps/marketing/public/docs/img/getting-started/first-time-run/wallet-feature-select.png b/web/marketing/public/docs/img/getting-started/first-time-run/wallet-feature-select.png similarity index 100% rename from apps/marketing/public/docs/img/getting-started/first-time-run/wallet-feature-select.png rename to web/marketing/public/docs/img/getting-started/first-time-run/wallet-feature-select.png diff --git a/apps/marketing/public/docs/img/getting-started/first-time-run/welcome.png b/web/marketing/public/docs/img/getting-started/first-time-run/welcome.png similarity index 100% rename from apps/marketing/public/docs/img/getting-started/first-time-run/welcome.png rename to web/marketing/public/docs/img/getting-started/first-time-run/welcome.png diff --git a/apps/marketing/public/docs/img/getting-started/onboarding-empty.png b/web/marketing/public/docs/img/getting-started/onboarding-empty.png similarity index 100% rename from apps/marketing/public/docs/img/getting-started/onboarding-empty.png rename to web/marketing/public/docs/img/getting-started/onboarding-empty.png diff --git a/apps/marketing/public/docs/img/getting-started/roster-first-character.png b/web/marketing/public/docs/img/getting-started/roster-first-character.png similarity index 100% rename from apps/marketing/public/docs/img/getting-started/roster-first-character.png rename to web/marketing/public/docs/img/getting-started/roster-first-character.png diff --git a/apps/marketing/public/docs/img/getting-started/splash.png b/web/marketing/public/docs/img/getting-started/splash.png similarity index 100% rename from apps/marketing/public/docs/img/getting-started/splash.png rename to web/marketing/public/docs/img/getting-started/splash.png diff --git a/apps/marketing/public/docs/img/industry/blueprints.png b/web/marketing/public/docs/img/industry/blueprints.png similarity index 100% rename from apps/marketing/public/docs/img/industry/blueprints.png rename to web/marketing/public/docs/img/industry/blueprints.png diff --git a/apps/marketing/public/docs/img/industry/extractions.png b/web/marketing/public/docs/img/industry/extractions.png similarity index 100% rename from apps/marketing/public/docs/img/industry/extractions.png rename to web/marketing/public/docs/img/industry/extractions.png diff --git a/apps/marketing/public/docs/img/industry/jobs.png b/web/marketing/public/docs/img/industry/jobs.png similarity index 100% rename from apps/marketing/public/docs/img/industry/jobs.png rename to web/marketing/public/docs/img/industry/jobs.png diff --git a/apps/marketing/public/docs/img/industry/planner-bill-of-materials.png b/web/marketing/public/docs/img/industry/planner-bill-of-materials.png similarity index 100% rename from apps/marketing/public/docs/img/industry/planner-bill-of-materials.png rename to web/marketing/public/docs/img/industry/planner-bill-of-materials.png diff --git a/apps/marketing/public/docs/img/industry/planner-build-order.png b/web/marketing/public/docs/img/industry/planner-build-order.png similarity index 100% rename from apps/marketing/public/docs/img/industry/planner-build-order.png rename to web/marketing/public/docs/img/industry/planner-build-order.png diff --git a/apps/marketing/public/docs/img/industry/planner-material-plan.png b/web/marketing/public/docs/img/industry/planner-material-plan.png similarity index 100% rename from apps/marketing/public/docs/img/industry/planner-material-plan.png rename to web/marketing/public/docs/img/industry/planner-material-plan.png diff --git a/apps/marketing/public/docs/img/industry/planner-needed-blueprints.png b/web/marketing/public/docs/img/industry/planner-needed-blueprints.png similarity index 100% rename from apps/marketing/public/docs/img/industry/planner-needed-blueprints.png rename to web/marketing/public/docs/img/industry/planner-needed-blueprints.png diff --git a/apps/marketing/public/docs/img/industry/planner-overview.png b/web/marketing/public/docs/img/industry/planner-overview.png similarity index 100% rename from apps/marketing/public/docs/img/industry/planner-overview.png rename to web/marketing/public/docs/img/industry/planner-overview.png diff --git a/apps/marketing/public/docs/img/industry/planner-split-jobs.png b/web/marketing/public/docs/img/industry/planner-split-jobs.png similarity index 100% rename from apps/marketing/public/docs/img/industry/planner-split-jobs.png rename to web/marketing/public/docs/img/industry/planner-split-jobs.png diff --git a/apps/marketing/public/docs/img/interface/command-palette.png b/web/marketing/public/docs/img/interface/command-palette.png similarity index 100% rename from apps/marketing/public/docs/img/interface/command-palette.png rename to web/marketing/public/docs/img/interface/command-palette.png diff --git a/apps/marketing/public/docs/img/interface/sync-popover.png b/web/marketing/public/docs/img/interface/sync-popover.png similarity index 100% rename from apps/marketing/public/docs/img/interface/sync-popover.png rename to web/marketing/public/docs/img/interface/sync-popover.png diff --git a/apps/marketing/public/docs/img/mail/compose.png b/web/marketing/public/docs/img/mail/compose.png similarity index 100% rename from apps/marketing/public/docs/img/mail/compose.png rename to web/marketing/public/docs/img/mail/compose.png diff --git a/apps/marketing/public/docs/img/mail/three-pane.png b/web/marketing/public/docs/img/mail/three-pane.png similarity index 100% rename from apps/marketing/public/docs/img/mail/three-pane.png rename to web/marketing/public/docs/img/mail/three-pane.png diff --git a/apps/marketing/public/docs/img/mcp/settings-mcp.png b/web/marketing/public/docs/img/mcp/settings-mcp.png similarity index 100% rename from apps/marketing/public/docs/img/mcp/settings-mcp.png rename to web/marketing/public/docs/img/mcp/settings-mcp.png diff --git a/apps/marketing/public/docs/img/notifications/notification-center.png b/web/marketing/public/docs/img/notifications/notification-center.png similarity index 100% rename from apps/marketing/public/docs/img/notifications/notification-center.png rename to web/marketing/public/docs/img/notifications/notification-center.png diff --git a/apps/marketing/public/docs/img/notifications/notifications.png b/web/marketing/public/docs/img/notifications/notifications.png similarity index 100% rename from apps/marketing/public/docs/img/notifications/notifications.png rename to web/marketing/public/docs/img/notifications/notifications.png diff --git a/apps/marketing/public/docs/img/roster/add-corporation.png b/web/marketing/public/docs/img/roster/add-corporation.png similarity index 100% rename from apps/marketing/public/docs/img/roster/add-corporation.png rename to web/marketing/public/docs/img/roster/add-corporation.png diff --git a/apps/marketing/public/docs/img/roster/add-tag.png b/web/marketing/public/docs/img/roster/add-tag.png similarity index 100% rename from apps/marketing/public/docs/img/roster/add-tag.png rename to web/marketing/public/docs/img/roster/add-tag.png diff --git a/apps/marketing/public/docs/img/roster/card-anatomy.png b/web/marketing/public/docs/img/roster/card-anatomy.png similarity index 100% rename from apps/marketing/public/docs/img/roster/card-anatomy.png rename to web/marketing/public/docs/img/roster/card-anatomy.png diff --git a/apps/marketing/public/docs/img/roster/card-context-menu.png b/web/marketing/public/docs/img/roster/card-context-menu.png similarity index 100% rename from apps/marketing/public/docs/img/roster/card-context-menu.png rename to web/marketing/public/docs/img/roster/card-context-menu.png diff --git a/apps/marketing/public/docs/img/roster/contact-edit-modal.png b/web/marketing/public/docs/img/roster/contact-edit-modal.png similarity index 100% rename from apps/marketing/public/docs/img/roster/contact-edit-modal.png rename to web/marketing/public/docs/img/roster/contact-edit-modal.png diff --git a/apps/marketing/public/docs/img/roster/contact-sync-empty.png b/web/marketing/public/docs/img/roster/contact-sync-empty.png similarity index 100% rename from apps/marketing/public/docs/img/roster/contact-sync-empty.png rename to web/marketing/public/docs/img/roster/contact-sync-empty.png diff --git a/apps/marketing/public/docs/img/roster/contact-sync-list.png b/web/marketing/public/docs/img/roster/contact-sync-list.png similarity index 100% rename from apps/marketing/public/docs/img/roster/contact-sync-list.png rename to web/marketing/public/docs/img/roster/contact-sync-list.png diff --git a/apps/marketing/public/docs/img/roster/contact-sync.png b/web/marketing/public/docs/img/roster/contact-sync.png similarity index 100% rename from apps/marketing/public/docs/img/roster/contact-sync.png rename to web/marketing/public/docs/img/roster/contact-sync.png diff --git a/apps/marketing/public/docs/img/roster/detail-clones.png b/web/marketing/public/docs/img/roster/detail-clones.png similarity index 100% rename from apps/marketing/public/docs/img/roster/detail-clones.png rename to web/marketing/public/docs/img/roster/detail-clones.png diff --git a/apps/marketing/public/docs/img/roster/detail-contacts.png b/web/marketing/public/docs/img/roster/detail-contacts.png similarity index 100% rename from apps/marketing/public/docs/img/roster/detail-contacts.png rename to web/marketing/public/docs/img/roster/detail-contacts.png diff --git a/apps/marketing/public/docs/img/roster/detail-killlog.png b/web/marketing/public/docs/img/roster/detail-killlog.png similarity index 100% rename from apps/marketing/public/docs/img/roster/detail-killlog.png rename to web/marketing/public/docs/img/roster/detail-killlog.png diff --git a/apps/marketing/public/docs/img/roster/detail-standings.png b/web/marketing/public/docs/img/roster/detail-standings.png similarity index 100% rename from apps/marketing/public/docs/img/roster/detail-standings.png rename to web/marketing/public/docs/img/roster/detail-standings.png diff --git a/apps/marketing/public/docs/img/roster/grid-compact.png b/web/marketing/public/docs/img/roster/grid-compact.png similarity index 100% rename from apps/marketing/public/docs/img/roster/grid-compact.png rename to web/marketing/public/docs/img/roster/grid-compact.png diff --git a/apps/marketing/public/docs/img/roster/grid-expanded.png b/web/marketing/public/docs/img/roster/grid-expanded.png similarity index 100% rename from apps/marketing/public/docs/img/roster/grid-expanded.png rename to web/marketing/public/docs/img/roster/grid-expanded.png diff --git a/apps/marketing/public/docs/img/roster/grid-list.png b/web/marketing/public/docs/img/roster/grid-list.png similarity index 100% rename from apps/marketing/public/docs/img/roster/grid-list.png rename to web/marketing/public/docs/img/roster/grid-list.png diff --git a/apps/marketing/public/docs/img/roster/killmail-modal.png b/web/marketing/public/docs/img/roster/killmail-modal.png similarity index 100% rename from apps/marketing/public/docs/img/roster/killmail-modal.png rename to web/marketing/public/docs/img/roster/killmail-modal.png diff --git a/apps/marketing/public/docs/img/roster/squads.png b/web/marketing/public/docs/img/roster/squads.png similarity index 100% rename from apps/marketing/public/docs/img/roster/squads.png rename to web/marketing/public/docs/img/roster/squads.png diff --git a/apps/marketing/public/docs/img/roster/utilities-dropdown.png b/web/marketing/public/docs/img/roster/utilities-dropdown.png similarity index 100% rename from apps/marketing/public/docs/img/roster/utilities-dropdown.png rename to web/marketing/public/docs/img/roster/utilities-dropdown.png diff --git a/apps/marketing/public/docs/img/settings/accessibility.png b/web/marketing/public/docs/img/settings/accessibility.png similarity index 100% rename from apps/marketing/public/docs/img/settings/accessibility.png rename to web/marketing/public/docs/img/settings/accessibility.png diff --git a/apps/marketing/public/docs/img/settings/facilities.png b/web/marketing/public/docs/img/settings/facilities.png similarity index 100% rename from apps/marketing/public/docs/img/settings/facilities.png rename to web/marketing/public/docs/img/settings/facilities.png diff --git a/apps/marketing/public/docs/img/settings/features.png b/web/marketing/public/docs/img/settings/features.png similarity index 100% rename from apps/marketing/public/docs/img/settings/features.png rename to web/marketing/public/docs/img/settings/features.png diff --git a/apps/marketing/public/docs/img/settings/storage.png b/web/marketing/public/docs/img/settings/storage.png similarity index 100% rename from apps/marketing/public/docs/img/settings/storage.png rename to web/marketing/public/docs/img/settings/storage.png diff --git a/apps/marketing/public/docs/img/settings/tags.png b/web/marketing/public/docs/img/settings/tags.png similarity index 100% rename from apps/marketing/public/docs/img/settings/tags.png rename to web/marketing/public/docs/img/settings/tags.png diff --git a/apps/marketing/public/docs/img/settings/telemetry.png b/web/marketing/public/docs/img/settings/telemetry.png similarity index 100% rename from apps/marketing/public/docs/img/settings/telemetry.png rename to web/marketing/public/docs/img/settings/telemetry.png diff --git a/apps/marketing/public/docs/img/settings/ui.png b/web/marketing/public/docs/img/settings/ui.png similarity index 100% rename from apps/marketing/public/docs/img/settings/ui.png rename to web/marketing/public/docs/img/settings/ui.png diff --git a/apps/marketing/public/docs/img/skills/attributes.png b/web/marketing/public/docs/img/skills/attributes.png similarity index 100% rename from apps/marketing/public/docs/img/skills/attributes.png rename to web/marketing/public/docs/img/skills/attributes.png diff --git a/apps/marketing/public/docs/img/skills/compare.png b/web/marketing/public/docs/img/skills/compare.png similarity index 100% rename from apps/marketing/public/docs/img/skills/compare.png rename to web/marketing/public/docs/img/skills/compare.png diff --git a/apps/marketing/public/docs/img/skills/overview.png b/web/marketing/public/docs/img/skills/overview.png similarity index 100% rename from apps/marketing/public/docs/img/skills/overview.png rename to web/marketing/public/docs/img/skills/overview.png diff --git a/apps/marketing/public/docs/img/skills/plan-editor.png b/web/marketing/public/docs/img/skills/plan-editor.png similarity index 100% rename from apps/marketing/public/docs/img/skills/plan-editor.png rename to web/marketing/public/docs/img/skills/plan-editor.png diff --git a/apps/marketing/public/docs/img/skills/plan-manager.png b/web/marketing/public/docs/img/skills/plan-manager.png similarity index 100% rename from apps/marketing/public/docs/img/skills/plan-manager.png rename to web/marketing/public/docs/img/skills/plan-manager.png diff --git a/apps/marketing/public/docs/img/skills/queue-empty.png b/web/marketing/public/docs/img/skills/queue-empty.png similarity index 100% rename from apps/marketing/public/docs/img/skills/queue-empty.png rename to web/marketing/public/docs/img/skills/queue-empty.png diff --git a/apps/marketing/public/docs/img/wallet/budget-create-rule.png b/web/marketing/public/docs/img/wallet/budget-create-rule.png similarity index 100% rename from apps/marketing/public/docs/img/wallet/budget-create-rule.png rename to web/marketing/public/docs/img/wallet/budget-create-rule.png diff --git a/apps/marketing/public/docs/img/wallet/budget-reconcile.png b/web/marketing/public/docs/img/wallet/budget-reconcile.png similarity index 100% rename from apps/marketing/public/docs/img/wallet/budget-reconcile.png rename to web/marketing/public/docs/img/wallet/budget-reconcile.png diff --git a/apps/marketing/public/docs/img/wallet/budget-rule-manager.png b/web/marketing/public/docs/img/wallet/budget-rule-manager.png similarity index 100% rename from apps/marketing/public/docs/img/wallet/budget-rule-manager.png rename to web/marketing/public/docs/img/wallet/budget-rule-manager.png diff --git a/apps/marketing/public/docs/img/wallet/budget.png b/web/marketing/public/docs/img/wallet/budget.png similarity index 100% rename from apps/marketing/public/docs/img/wallet/budget.png rename to web/marketing/public/docs/img/wallet/budget.png diff --git a/apps/marketing/public/docs/img/wallet/contract-detail.png b/web/marketing/public/docs/img/wallet/contract-detail.png similarity index 100% rename from apps/marketing/public/docs/img/wallet/contract-detail.png rename to web/marketing/public/docs/img/wallet/contract-detail.png diff --git a/apps/marketing/public/docs/img/wallet/contracts.png b/web/marketing/public/docs/img/wallet/contracts.png similarity index 100% rename from apps/marketing/public/docs/img/wallet/contracts.png rename to web/marketing/public/docs/img/wallet/contracts.png diff --git a/apps/marketing/public/docs/img/wallet/journal.png b/web/marketing/public/docs/img/wallet/journal.png similarity index 100% rename from apps/marketing/public/docs/img/wallet/journal.png rename to web/marketing/public/docs/img/wallet/journal.png diff --git a/apps/marketing/public/docs/img/wallet/transactions.png b/web/marketing/public/docs/img/wallet/transactions.png similarity index 100% rename from apps/marketing/public/docs/img/wallet/transactions.png rename to web/marketing/public/docs/img/wallet/transactions.png diff --git a/apps/marketing/public/docs/img/wallet/wallets.png b/web/marketing/public/docs/img/wallet/wallets.png similarity index 100% rename from apps/marketing/public/docs/img/wallet/wallets.png rename to web/marketing/public/docs/img/wallet/wallets.png diff --git a/apps/marketing/public/favicon.svg b/web/marketing/public/favicon.svg similarity index 100% rename from apps/marketing/public/favicon.svg rename to web/marketing/public/favicon.svg diff --git a/apps/marketing/public/robots.txt b/web/marketing/public/robots.txt similarity index 100% rename from apps/marketing/public/robots.txt rename to web/marketing/public/robots.txt diff --git a/apps/marketing/scripts/fetch-release.ts b/web/marketing/scripts/fetch-release.ts similarity index 100% rename from apps/marketing/scripts/fetch-release.ts rename to web/marketing/scripts/fetch-release.ts diff --git a/apps/marketing/scripts/parse-changelog.ts b/web/marketing/scripts/parse-changelog.ts similarity index 100% rename from apps/marketing/scripts/parse-changelog.ts rename to web/marketing/scripts/parse-changelog.ts diff --git a/apps/marketing/src/App.tsx b/web/marketing/src/App.tsx similarity index 100% rename from apps/marketing/src/App.tsx rename to web/marketing/src/App.tsx diff --git a/apps/marketing/src/components/Faq.tsx b/web/marketing/src/components/Faq.tsx similarity index 100% rename from apps/marketing/src/components/Faq.tsx rename to web/marketing/src/components/Faq.tsx diff --git a/apps/marketing/src/components/Features.tsx b/web/marketing/src/components/Features.tsx similarity index 100% rename from apps/marketing/src/components/Features.tsx rename to web/marketing/src/components/Features.tsx diff --git a/apps/marketing/src/components/Footer.tsx b/web/marketing/src/components/Footer.tsx similarity index 100% rename from apps/marketing/src/components/Footer.tsx rename to web/marketing/src/components/Footer.tsx diff --git a/apps/marketing/src/components/Freeport.tsx b/web/marketing/src/components/Freeport.tsx similarity index 100% rename from apps/marketing/src/components/Freeport.tsx rename to web/marketing/src/components/Freeport.tsx diff --git a/apps/marketing/src/components/Hero.tsx b/web/marketing/src/components/Hero.tsx similarity index 100% rename from apps/marketing/src/components/Hero.tsx rename to web/marketing/src/components/Hero.tsx diff --git a/apps/marketing/src/components/HeroPreview.tsx b/web/marketing/src/components/HeroPreview.tsx similarity index 100% rename from apps/marketing/src/components/HeroPreview.tsx rename to web/marketing/src/components/HeroPreview.tsx diff --git a/apps/marketing/src/components/Icon.tsx b/web/marketing/src/components/Icon.tsx similarity index 100% rename from apps/marketing/src/components/Icon.tsx rename to web/marketing/src/components/Icon.tsx diff --git a/apps/marketing/src/components/Notes.tsx b/web/marketing/src/components/Notes.tsx similarity index 100% rename from apps/marketing/src/components/Notes.tsx rename to web/marketing/src/components/Notes.tsx diff --git a/apps/marketing/src/components/PlatformCard.tsx b/web/marketing/src/components/PlatformCard.tsx similarity index 100% rename from apps/marketing/src/components/PlatformCard.tsx rename to web/marketing/src/components/PlatformCard.tsx diff --git a/apps/marketing/src/components/PlatformGlyph.tsx b/web/marketing/src/components/PlatformGlyph.tsx similarity index 100% rename from apps/marketing/src/components/PlatformGlyph.tsx rename to web/marketing/src/components/PlatformGlyph.tsx diff --git a/apps/marketing/src/components/Platforms.tsx b/web/marketing/src/components/Platforms.tsx similarity index 100% rename from apps/marketing/src/components/Platforms.tsx rename to web/marketing/src/components/Platforms.tsx diff --git a/apps/marketing/src/components/PodMark.tsx b/web/marketing/src/components/PodMark.tsx similarity index 100% rename from apps/marketing/src/components/PodMark.tsx rename to web/marketing/src/components/PodMark.tsx diff --git a/apps/marketing/src/components/PrimaryDownload.tsx b/web/marketing/src/components/PrimaryDownload.tsx similarity index 100% rename from apps/marketing/src/components/PrimaryDownload.tsx rename to web/marketing/src/components/PrimaryDownload.tsx diff --git a/apps/marketing/src/components/Requirements.tsx b/web/marketing/src/components/Requirements.tsx similarity index 100% rename from apps/marketing/src/components/Requirements.tsx rename to web/marketing/src/components/Requirements.tsx diff --git a/apps/marketing/src/components/SectionHead.tsx b/web/marketing/src/components/SectionHead.tsx similarity index 100% rename from apps/marketing/src/components/SectionHead.tsx rename to web/marketing/src/components/SectionHead.tsx diff --git a/apps/marketing/src/components/SparkChart.tsx b/web/marketing/src/components/SparkChart.tsx similarity index 100% rename from apps/marketing/src/components/SparkChart.tsx rename to web/marketing/src/components/SparkChart.tsx diff --git a/apps/marketing/src/components/Support.tsx b/web/marketing/src/components/Support.tsx similarity index 100% rename from apps/marketing/src/components/Support.tsx rename to web/marketing/src/components/Support.tsx diff --git a/apps/marketing/src/components/TopNav.tsx b/web/marketing/src/components/TopNav.tsx similarity index 100% rename from apps/marketing/src/components/TopNav.tsx rename to web/marketing/src/components/TopNav.tsx diff --git a/apps/marketing/src/data.ts b/web/marketing/src/data.ts similarity index 100% rename from apps/marketing/src/data.ts rename to web/marketing/src/data.ts diff --git a/apps/marketing/src/docs/DocLayout.tsx b/web/marketing/src/docs/DocLayout.tsx similarity index 100% rename from apps/marketing/src/docs/DocLayout.tsx rename to web/marketing/src/docs/DocLayout.tsx diff --git a/apps/marketing/src/docs/content.test.ts b/web/marketing/src/docs/content.test.ts similarity index 100% rename from apps/marketing/src/docs/content.test.ts rename to web/marketing/src/docs/content.test.ts diff --git a/apps/marketing/src/docs/content.ts b/web/marketing/src/docs/content.ts similarity index 100% rename from apps/marketing/src/docs/content.ts rename to web/marketing/src/docs/content.ts diff --git a/apps/marketing/src/docs/frontmatter.ts b/web/marketing/src/docs/frontmatter.ts similarity index 100% rename from apps/marketing/src/docs/frontmatter.ts rename to web/marketing/src/docs/frontmatter.ts diff --git a/apps/marketing/src/docs/plugin.ts b/web/marketing/src/docs/plugin.ts similarity index 100% rename from apps/marketing/src/docs/plugin.ts rename to web/marketing/src/docs/plugin.ts diff --git a/apps/marketing/src/docs/render.test.ts b/web/marketing/src/docs/render.test.ts similarity index 100% rename from apps/marketing/src/docs/render.test.ts rename to web/marketing/src/docs/render.test.ts diff --git a/apps/marketing/src/docs/render.tsx b/web/marketing/src/docs/render.tsx similarity index 100% rename from apps/marketing/src/docs/render.tsx rename to web/marketing/src/docs/render.tsx diff --git a/apps/marketing/src/generated/.gitkeep b/web/marketing/src/generated/.gitkeep similarity index 100% rename from apps/marketing/src/generated/.gitkeep rename to web/marketing/src/generated/.gitkeep diff --git a/apps/marketing/src/generated/notes.example.ts b/web/marketing/src/generated/notes.example.ts similarity index 100% rename from apps/marketing/src/generated/notes.example.ts rename to web/marketing/src/generated/notes.example.ts diff --git a/apps/marketing/src/generated/release.example.ts b/web/marketing/src/generated/release.example.ts similarity index 100% rename from apps/marketing/src/generated/release.example.ts rename to web/marketing/src/generated/release.example.ts diff --git a/apps/marketing/src/generated/release.ts.example b/web/marketing/src/generated/release.ts.example similarity index 100% rename from apps/marketing/src/generated/release.ts.example rename to web/marketing/src/generated/release.ts.example diff --git a/apps/marketing/src/main.tsx b/web/marketing/src/main.tsx similarity index 100% rename from apps/marketing/src/main.tsx rename to web/marketing/src/main.tsx diff --git a/apps/marketing/src/tokens.ts b/web/marketing/src/tokens.ts similarity index 100% rename from apps/marketing/src/tokens.ts rename to web/marketing/src/tokens.ts diff --git a/apps/marketing/src/types.ts b/web/marketing/src/types.ts similarity index 100% rename from apps/marketing/src/types.ts rename to web/marketing/src/types.ts diff --git a/apps/marketing/src/utils/detectOs.ts b/web/marketing/src/utils/detectOs.ts similarity index 100% rename from apps/marketing/src/utils/detectOs.ts rename to web/marketing/src/utils/detectOs.ts diff --git a/apps/marketing/src/utils/renderInline.tsx b/web/marketing/src/utils/renderInline.tsx similarity index 100% rename from apps/marketing/src/utils/renderInline.tsx rename to web/marketing/src/utils/renderInline.tsx diff --git a/apps/marketing/tsconfig.json b/web/marketing/tsconfig.json similarity index 100% rename from apps/marketing/tsconfig.json rename to web/marketing/tsconfig.json diff --git a/apps/marketing/vite.config.ts b/web/marketing/vite.config.ts similarity index 100% rename from apps/marketing/vite.config.ts rename to web/marketing/vite.config.ts diff --git a/apps/telemetry/.gitignore b/web/telemetry/.gitignore similarity index 100% rename from apps/telemetry/.gitignore rename to web/telemetry/.gitignore diff --git a/apps/telemetry/.npmrc b/web/telemetry/.npmrc similarity index 100% rename from apps/telemetry/.npmrc rename to web/telemetry/.npmrc diff --git a/apps/telemetry/README.md b/web/telemetry/README.md similarity index 96% rename from apps/telemetry/README.md rename to web/telemetry/README.md index dc48b05d..e9cd69bb 100644 --- a/apps/telemetry/README.md +++ b/web/telemetry/README.md @@ -1,7 +1,7 @@ # pod-telemetry The Cloudflare Worker + D1 ingest backend for pod's anonymous, opt-out telemetry -(spec `mmmzstpq` §6 / §9). It lives in-repo under `apps/telemetry/` and is deployed +(spec `mmmzstpq` §6 / §9). It lives in-repo under `web/telemetry/` and is deployed manually with `wrangler`; CI only bakes the URL + write-key into the released binary. @@ -36,7 +36,7 @@ grep -rIn -e CF-Connecting-IP -e 'request\.cf' src/ # → no matches The closed-world validator (`src/contract.ts`) accepts **exactly** the frozen golden contract pinned by the shared fixtures -`../desktop/tests/fixtures/telemetry/session_all_streams.json` and `crash_batch.json` +`../../tests/fixtures/telemetry/session_all_streams.json` and `crash_batch.json` (the same files the Rust contract crate `src/telemetry_contract.rs` asserts). Any unknown key anywhere is a rejection. @@ -129,7 +129,7 @@ curl -s -o /dev/null -w '%{http_code}\n' -X POST \ ## Layout ```text -apps/telemetry/ +web/telemetry/ wrangler.toml route + D1 binding + daily cron package.json tsconfig.json src/index.ts fetch + scheduled handlers; admin route wiring @@ -147,7 +147,7 @@ apps/telemetry/ README.md this file ``` -`apps/telemetry/` is committed; `.wrangler/` is gitignored. +`web/telemetry/` is committed; `.wrangler/` is gitignored. ## Toolchain (mise + aube) @@ -181,10 +181,10 @@ aube test # vitest run curl -i -X POST https://pod.aaronmallen.dev/telemetry/v1/ingest \ -H 'Content-Type: application/json' \ -H "X-Pod-Telemetry-Key: $KEY" \ - --data @../desktop/tests/fixtures/telemetry/session_all_streams.json # → 204 + --data @../../tests/fixtures/telemetry/session_all_streams.json # → 204 curl -i -X POST https://pod.aaronmallen.dev/telemetry/v1/ingest \ -H 'Content-Type: application/json' \ - --data @../desktop/tests/fixtures/telemetry/session_all_streams.json # → 401 (no key) + --data @../../tests/fixtures/telemetry/session_all_streams.json # → 401 (no key) curl -i https://pod.aaronmallen.dev/telemetry/v1/ingest # → 405 (GET) ``` diff --git a/apps/telemetry/aube-lock.yaml b/web/telemetry/aube-lock.yaml similarity index 100% rename from apps/telemetry/aube-lock.yaml rename to web/telemetry/aube-lock.yaml diff --git a/apps/telemetry/migrations/0001_init.sql b/web/telemetry/migrations/0001_init.sql similarity index 100% rename from apps/telemetry/migrations/0001_init.sql rename to web/telemetry/migrations/0001_init.sql diff --git a/apps/telemetry/migrations/0002_rename_display_add_screen_size.sql b/web/telemetry/migrations/0002_rename_display_add_screen_size.sql similarity index 100% rename from apps/telemetry/migrations/0002_rename_display_add_screen_size.sql rename to web/telemetry/migrations/0002_rename_display_add_screen_size.sql diff --git a/apps/telemetry/migrations/0003_add_app_language.sql b/web/telemetry/migrations/0003_add_app_language.sql similarity index 100% rename from apps/telemetry/migrations/0003_add_app_language.sql rename to web/telemetry/migrations/0003_add_app_language.sql diff --git a/apps/telemetry/package.json b/web/telemetry/package.json similarity index 100% rename from apps/telemetry/package.json rename to web/telemetry/package.json diff --git a/apps/telemetry/src/contract.test.ts b/web/telemetry/src/contract.test.ts similarity index 97% rename from apps/telemetry/src/contract.test.ts rename to web/telemetry/src/contract.test.ts index c3bf32f7..0d045804 100644 --- a/apps/telemetry/src/contract.test.ts +++ b/web/telemetry/src/contract.test.ts @@ -1,5 +1,5 @@ // Worker contract tests. These load the SAME golden fixtures the Rust contract -// crate pins (../../desktop/tests/fixtures/telemetry/*.json), so any drift in the wire shape +// crate pins (../tests/fixtures/telemetry/*.json), so any drift in the wire shape // fails both suites. import { readFileSync } from "node:fs"; @@ -16,7 +16,7 @@ import { const MAX_SCHEMA = 1; function fixture(name: string): unknown { - const path = fileURLToPath(new URL(`../../desktop/tests/fixtures/telemetry/${name}`, import.meta.url)); + const path = fileURLToPath(new URL(`../../../tests/fixtures/telemetry/${name}`, import.meta.url)); return JSON.parse(readFileSync(path, "utf8")); } diff --git a/apps/telemetry/src/contract.ts b/web/telemetry/src/contract.ts similarity index 99% rename from apps/telemetry/src/contract.ts rename to web/telemetry/src/contract.ts index 77146c83..e2485a6a 100644 --- a/apps/telemetry/src/contract.ts +++ b/web/telemetry/src/contract.ts @@ -4,8 +4,8 @@ // EXACTLY the shape the Rust contract types (src/telemetry_contract.rs) emit and // the two golden fixtures pin: // -// * apps/desktop/tests/fixtures/telemetry/session_all_streams.json -// * apps/desktop/tests/fixtures/telemetry/crash_batch.json +// * tests/fixtures/telemetry/session_all_streams.json +// * tests/fixtures/telemetry/crash_batch.json // // "Closed world" = every object's key set is checked; an unknown key anywhere is // a rejection, not a silently-ignored extra. Disabled streams are OMITTED keys, diff --git a/apps/telemetry/src/db.test.ts b/web/telemetry/src/db.test.ts similarity index 97% rename from apps/telemetry/src/db.test.ts rename to web/telemetry/src/db.test.ts index 68acdee0..78b6efe8 100644 --- a/apps/telemetry/src/db.test.ts +++ b/web/telemetry/src/db.test.ts @@ -29,7 +29,7 @@ function stubDb(sink: Recorded[]) { } function fixtureEnvelope(name: string): Envelope { - const path = fileURLToPath(new URL(`../../desktop/tests/fixtures/telemetry/${name}`, import.meta.url)); + const path = fileURLToPath(new URL(`../../../tests/fixtures/telemetry/${name}`, import.meta.url)); const r = validateEnvelope(JSON.parse(readFileSync(path, "utf8")), 1); if (!r.ok) throw new Error(`fixture ${name} did not validate: ${r.reason}`); return r.envelope; diff --git a/apps/telemetry/src/db.ts b/web/telemetry/src/db.ts similarity index 100% rename from apps/telemetry/src/db.ts rename to web/telemetry/src/db.ts diff --git a/apps/telemetry/src/index.ts b/web/telemetry/src/index.ts similarity index 100% rename from apps/telemetry/src/index.ts rename to web/telemetry/src/index.ts diff --git a/apps/telemetry/src/render.test.ts b/web/telemetry/src/render.test.ts similarity index 100% rename from apps/telemetry/src/render.test.ts rename to web/telemetry/src/render.test.ts diff --git a/apps/telemetry/src/render.ts b/web/telemetry/src/render.ts similarity index 100% rename from apps/telemetry/src/render.ts rename to web/telemetry/src/render.ts diff --git a/apps/telemetry/src/stats.test.ts b/web/telemetry/src/stats.test.ts similarity index 100% rename from apps/telemetry/src/stats.test.ts rename to web/telemetry/src/stats.test.ts diff --git a/apps/telemetry/src/stats.ts b/web/telemetry/src/stats.ts similarity index 100% rename from apps/telemetry/src/stats.ts rename to web/telemetry/src/stats.ts diff --git a/apps/telemetry/tsconfig.json b/web/telemetry/tsconfig.json similarity index 100% rename from apps/telemetry/tsconfig.json rename to web/telemetry/tsconfig.json diff --git a/apps/telemetry/wrangler.toml b/web/telemetry/wrangler.toml similarity index 100% rename from apps/telemetry/wrangler.toml rename to web/telemetry/wrangler.toml -- knotmirror 0.0.1