Fix code quality violations and enhance ROUTE-EXISTS-01 rule
Implement JQHTML function cache ID system and fix bundle compilation Implement underscore prefix for system tables Fix JS syntax linter to support decorators and grant exception to Task system SPA: Update planning docs and wishlists with remaining features SPA: Document Navigation API abandonment and future enhancements Implement SPA browser integration with History API (Phase 1) Convert contacts view page to SPA action Convert clients pages to SPA actions and document conversion procedure SPA: Merge GET parameters and update documentation Implement SPA route URL generation in JavaScript and PHP Implement SPA bootstrap controller architecture Add SPA routing manual page (rsx:man spa) Add SPA routing documentation to CLAUDE.md Phase 4 Complete: Client-side SPA routing implementation Update get_routes() consumers for unified route structure Complete SPA Phase 3: PHP-side route type detection and is_spa flag Restore unified routes structure and Manifest_Query class Refactor route indexing and add SPA infrastructure Phase 3 Complete: SPA route registration in manifest Implement SPA Phase 2: Extract router code and test decorators Rename Jqhtml_Component to Component and complete SPA foundation setup 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -106,7 +106,7 @@ return [
|
||||
|
|
||||
*/
|
||||
|
||||
'migrations' => 'migrations',
|
||||
'migrations' => '_migrations',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
||||
125
config/rsx.php
125
config/rsx.php
@@ -123,8 +123,10 @@ return [
|
||||
*/
|
||||
|
||||
'manifest_support' => [
|
||||
\App\RSpade\Core\Dispatch\Route_ManifestSupport::class,
|
||||
\App\RSpade\Modules\Model_ManifestSupport::class,
|
||||
\App\RSpade\Integrations\Jqhtml\Jqhtml_ManifestSupport::class,
|
||||
\App\RSpade\Core\SPA\Spa_ManifestSupport::class,
|
||||
],
|
||||
|
||||
/*
|
||||
@@ -283,6 +285,7 @@ return [
|
||||
'app/RSpade/Bundles', // Third-party bundles
|
||||
'app/RSpade/CodeQuality', // Code quality rules and checks
|
||||
'app/RSpade/Testing', // Testing framework classes
|
||||
'app/RSpade/Lib', // UI features and other extras
|
||||
'app/RSpade/temp', // Framework developer testing directory
|
||||
],
|
||||
|
||||
@@ -356,7 +359,7 @@ return [
|
||||
// Classes exempt from suffix inheritance rules
|
||||
// Children of these classes can use any naming pattern
|
||||
'suffix_exempt_classes' => [
|
||||
'Jqhtml_Component', // JQHTML components can have flexible naming
|
||||
'Component', // JQHTML components can have flexible naming
|
||||
'Component', // JQHTML v2 components can have flexible naming
|
||||
'Rsx_System_Model_Abstract', // System models (e.g., Session) have special naming
|
||||
],
|
||||
@@ -480,4 +483,124 @@ return [
|
||||
// Playwright generation timeout in milliseconds
|
||||
'generation_timeout' => env('SSR_FPC_TIMEOUT', 30000),
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Thumbnail Configuration
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Configure the two-tier thumbnail caching system with named presets
|
||||
| (developer-defined) and dynamic thumbnails (ad-hoc sizes).
|
||||
|
|
||||
| Storage Structure:
|
||||
| - storage/rsx-thumbnails/preset/ - Named preset thumbnails
|
||||
| - storage/rsx-thumbnails/dynamic/ - Dynamic ad-hoc thumbnails
|
||||
|
|
||||
| Quota Management:
|
||||
| - Preset thumbnails: Enforced via scheduled rsx:thumbnails:clean task
|
||||
| - Dynamic thumbnails: Enforced synchronously after each new thumbnail
|
||||
| - Both use LRU eviction (oldest mtime deleted first)
|
||||
|
|
||||
| LRU Tracking:
|
||||
| - Both preset and dynamic thumbnails have mtime touched on cache hit
|
||||
| - Touch only occurs if mtime is older than touch_interval (default 10 min)
|
||||
| - Prevents excessive filesystem writes while maintaining LRU accuracy
|
||||
|
|
||||
| Commands:
|
||||
| - php artisan rsx:thumbnails:clean [--preset] [--dynamic]
|
||||
| - php artisan rsx:thumbnails:generate [--preset=name]
|
||||
| - php artisan rsx:thumbnails:stats
|
||||
|
|
||||
*/
|
||||
'thumbnails' => [
|
||||
// Named preset definitions
|
||||
// Format: 'name' => ['type' => 'cover'|'fit', 'width' => int, 'height' => int]
|
||||
'presets' => [
|
||||
'profile' => ['type' => 'cover', 'width' => 200, 'height' => 200],
|
||||
'gallery' => ['type' => 'fit', 'width' => 400, 'height' => 300],
|
||||
'icon_small' => ['type' => 'cover', 'width' => 32, 'height' => 32],
|
||||
'icon_large' => ['type' => 'cover', 'width' => 64, 'height' => 64],
|
||||
],
|
||||
|
||||
// Storage quotas in bytes (both enforced via LRU eviction)
|
||||
'quotas' => [
|
||||
'preset_max_bytes' => 100 * 1024 * 1024, // 100MB (enforced via scheduled task)
|
||||
'dynamic_max_bytes' => 50 * 1024 * 1024, // 50MB (enforced synchronously)
|
||||
],
|
||||
|
||||
// Maximum dimension limit for dynamic thumbnails (base resolution before 2x scaling)
|
||||
// This value is doubled during generation (800 becomes 1600x1600 after 2x scaling)
|
||||
// Preset thumbnails have no enforced maximum (developer-controlled)
|
||||
// NOTE: Application configuration - not overridable via environment variable
|
||||
'max_dynamic_size' => 800,
|
||||
|
||||
// Touch mtime on cache hit to update LRU tracking (both preset and dynamic)
|
||||
'touch_on_read' => env('THUMBNAILS_TOUCH_ON_READ', true),
|
||||
|
||||
// Only touch if mtime is older than this many seconds (prevents excessive filesystem writes)
|
||||
'touch_interval' => env('THUMBNAILS_TOUCH_INTERVAL', 600), // 10 minutes
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Task System
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Configuration for the unified task execution system supporting:
|
||||
| - Immediate CLI execution
|
||||
| - Scheduled tasks (cron-based)
|
||||
| - Queued async tasks with worker management
|
||||
|
|
||||
| Worker Concurrency:
|
||||
| - global_max_workers: Maximum total workers across all queues
|
||||
| - Per-queue max_workers: Maximum concurrent workers for specific queue
|
||||
| - Workers are spawned up to configured limits
|
||||
|
|
||||
| Task Lifecycle:
|
||||
| - Tasks start as "pending" in database
|
||||
| - Worker process marks as "running" and updates heartbeat
|
||||
| - Completes as "completed" or "failed"
|
||||
| - Stuck tasks detected via timeout + heartbeat + PID checking
|
||||
|
|
||||
| Queues:
|
||||
| - default: General purpose task queue
|
||||
| - scheduled: Auto-created tasks from #[Schedule] attributes
|
||||
| - Custom queues: Define as needed (video, export, email, etc.)
|
||||
|
|
||||
| Commands:
|
||||
| - php artisan rsx:task:process (run via cron every minute)
|
||||
| - php artisan rsx:task:run Service method [params]
|
||||
| - php artisan rsx:task:list
|
||||
|
|
||||
*/
|
||||
'tasks' => [
|
||||
// Maximum workers across all queues (prevents server overload)
|
||||
'global_max_workers' => 1,
|
||||
|
||||
// Default timeout for tasks (seconds) - used if task doesn't specify
|
||||
'default_timeout' => 1800, // 30 minutes
|
||||
|
||||
// How long before a task is considered stuck (seconds)
|
||||
'cleanup_stuck_after' => 1800, // 30 minutes
|
||||
|
||||
// Default TTL for task temp directories (seconds)
|
||||
'temp_directory_default_ttl' => 3600, // 1 hour
|
||||
|
||||
// How long to keep completed/failed task records (days)
|
||||
'task_retention_days' => 30,
|
||||
|
||||
// Queue-specific configuration
|
||||
'queues' => [
|
||||
'default' => [
|
||||
'max_workers' => 1,
|
||||
],
|
||||
'scheduled' => [
|
||||
'max_workers' => 1,
|
||||
],
|
||||
// Future queues can be added here:
|
||||
// 'video' => ['max_workers' => 2],
|
||||
// 'export' => ['max_workers' => 1],
|
||||
// 'email' => ['max_workers' => 5],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user