Stories 0.2-0.5: rename folders→declarations (backend+frontend), configure Redis for cache/queue/sessions, add foundation database migrations (permissions, archived_at), replace DeclarationStatus enum with architecture lifecycle values, create DeclarationObserver for status transition validation and auto-archive, fix controller status transitions to respect observer rules. 93 tests pass (240 assertions). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
32 KiB
Story 0.2: Rename Folders to Declarations in Backend
Status: done
Story
As a developer, I want all backend PHP code to use "Declaration" terminology instead of "Folder", so that the codebase is consistent with the database and professional domain language.
Acceptance Criteria
- Given the database migration from Story 0.1 has been applied, When the backend rename is complete, Then the
Foldermodel is renamed toDeclarationwith updated table name, relationships, and fillable attributes - And the
FolderInvitationmodel is renamed toDeclarationInvitationwith updated table, fillable (declaration_id), and relationships - And
FolderControlleris renamed toDeclarationControllerwith updated route model binding - And
FolderMediaControlleris renamed toDeclarationMediaController - And
FolderMessageControlleris renamed toDeclarationMessageController - And
FolderMentionControlleris renamed toDeclarationMentionController - And all Form Request classes (
StoreFolderRequest,UpdateFolderRequest,StoreFolderMessageRequest,StoreFolderMentionRequest) are renamed with "Declaration" prefix - And all Enums (
FolderStatus,FolderType,FolderPriority) are renamed toDeclarationStatus,DeclarationType,DeclarationPriority - And all Mail classes (
FolderConfirmationMail,FolderFileRequestMail,FolderInviteMail,FolderSituationMail,FolderTextMessageMail) are renamed with "Declaration" prefix - And the
FolderMentionNotificationis renamed toDeclarationMentionNotification - And the
ValidateFolderInvitationmiddleware is renamed toValidateClientPortalToken - And all routes in
web.phpare updated from "folders" to "declarations" and the middleware alias is updated - And
bootstrap/app.phpmiddleware alias is updated fromfolder.invitationtoclient-portal - And
FolderFactoryis renamed toDeclarationFactory - And all related models (
Client,Workspace,Message) have their relationships and references updated - And all controllers referencing Folder (
DashboardController,ClientController,WorkspaceController, client portal controllers) are updated - And all Blade email templates in
resources/views/emails/folder-*.blade.phpare renamed todeclaration-* - And Spatie polymorphic columns (
media.model_type,activity_log.subject_type) storingApp\Models\Folderare updated toApp\Models\Declarationvia a data migration - And the
DatabaseSeederis updated to use Declaration terminology - And all existing feature tests are updated and passing
Tasks / Subtasks
- Task 1: Rename Enums (AC: #8)
- 1.1: Rename
app/Enums/FolderType.php→app/Enums/DeclarationType.php(update class name) - 1.2: Rename
app/Enums/FolderStatus.php→app/Enums/DeclarationStatus.php(update class name) - 1.3: Rename
app/Enums/FolderPriority.php→app/Enums/DeclarationPriority.php(update class name)
- 1.1: Rename
- Task 2: Rename Models (AC: #1, #2)
- 2.1: Rename
app/Models/Folder.php→app/Models/Declaration.php— update class name, add explicitprotected $table = 'declarations', renameinvitations()relationship to returnDeclarationInvitation, update all internal references - 2.2: Rename
app/Models/FolderInvitation.php→app/Models/DeclarationInvitation.php— update class name, add explicitprotected $table = 'declaration_invitations', rename$fillablefromfolder_idtodeclaration_id, renamefolder()→declaration()relationship, update BelongsTo type toDeclaration
- 2.1: Rename
- Task 3: Update Related Models (AC: #15)
- 3.1:
app/Models/Client.php— renamefolders()→declarations(), update return type fromFoldertoDeclaration, update import - 3.2:
app/Models/Workspace.php— renamefolders()→declarations(), update return type fromFoldertoDeclaration, update import - 3.3:
app/Models/Message.php— update$fillablefromfolder_idtodeclaration_id, renamefolder()→declaration()relationship, update import
- 3.1:
- Task 4: Rename Form Requests (AC: #7)
- 4.1: Rename
StoreFolderRequest.php→StoreDeclarationRequest.php— update class name, update enum imports - 4.2: Rename
UpdateFolderRequest.php→UpdateDeclarationRequest.php— update class name, update enum imports - 4.3: Rename
StoreFolderMessageRequest.php→StoreDeclarationMessageRequest.php— update class name - 4.4: Rename
StoreFolderMentionRequest.php→StoreDeclarationMentionRequest.php— update class name
- 4.1: Rename
- Task 5: Rename Controllers (AC: #3, #4, #5, #6, #16)
- 5.1: Rename
FolderController.php→DeclarationController.php— update class name, all model/enum/request imports, method references ($folder→$declaration,authorizeFolder()→authorizeDeclaration(),folderTypeLabels()→declarationTypeLabels(), etc.) - 5.2: Rename
FolderMediaController.php→DeclarationMediaController.php— update class name,Folder::class→Declaration::classin polymorphic query (line 65), all variable names - 5.3: Rename
FolderMessageController.php→DeclarationMessageController.php— update class name, all model/enum/mail imports, variable names, method names - 5.4: Rename
FolderMentionController.php→DeclarationMentionController.php— update class name, imports, variable names - 5.5: Update
DashboardController.php— update imports fromFolder/FolderStatustoDeclaration/DeclarationStatus, update all variable names and relationship calls - 5.6: Update
ClientController.php— update imports and relationship calls (folders→declarations) - 5.7: Update
WorkspaceController.php— update imports fromFolder/FolderStatustoDeclaration/DeclarationStatus, relationship calls - 5.8: Update
Client/UploadController.php— updateFolderStatus→DeclarationStatusimport,$folder→$declarationvariables,folder_invitationrequest attribute access - 5.9: Update
Client/ConfirmController.php— same as 5.8 - 5.10: Update
Client/RefuseController.php— update$folder→$declarationvariables, request attribute access
- 5.1: Rename
- Task 6: Rename Mail Classes (AC: #9)
- 6.1: Rename
FolderInviteMail.php→DeclarationInviteMail.php— update class name, constructor param types, view reference - 6.2: Rename
FolderConfirmationMail.php→DeclarationConfirmationMail.php - 6.3: Rename
FolderFileRequestMail.php→DeclarationFileRequestMail.php - 6.4: Rename
FolderSituationMail.php→DeclarationSituationMail.php - 6.5: Rename
FolderTextMessageMail.php→DeclarationTextMessageMail.php— also update markdown view reference fromemails.folder-text-messagetoemails.declaration-text-message
- 6.1: Rename
- Task 7: Rename Blade Email Templates (AC: #17)
- 7.1: Rename
resources/views/emails/folder-invite.blade.php→declaration-invite.blade.php - 7.2: Rename
resources/views/emails/folder-confirmation.blade.php→declaration-confirmation.blade.php - 7.3: Rename
resources/views/emails/folder-file-request.blade.php→declaration-file-request.blade.php - 7.4: Rename
resources/views/emails/folder-situation.blade.php→declaration-situation.blade.php - 7.5: Rename
resources/views/emails/folder-text-message.blade.php→declaration-text-message.blade.php - 7.6: Rename
resources/views/emails/folder-mention.blade.php→declaration-mention.blade.php - 7.7: Update internal content of all templates — replace
$foldervariable references with$declaration
- 7.1: Rename
- Task 8: Rename Notification (AC: #10)
- 8.1: Rename
FolderMentionNotification.php→DeclarationMentionNotification.php— update class name, constructor param type,folder_id/folder_titlekeys →declaration_id/declaration_title, route fromfolders.show→declarations.show
- 8.1: Rename
- Task 9: Rename Middleware and Update Bootstrap (AC: #11, #13)
- 9.1: Rename
ValidateFolderInvitation.php→ValidateClientPortalToken.php— update class name,FolderInvitation→DeclarationInvitationimport,folder_invitationrequest attribute →declaration_invitation - 9.2: Update
bootstrap/app.php— change alias from'folder.invitation' => ValidateFolderInvitation::classto'client-portal' => ValidateClientPortalToken::class
- 9.1: Rename
- Task 10: Update Routes (AC: #12)
- 10.1: Update
routes/web.php— rename resource from'folders'to'declarations', update controller references, update nested route prefixes, update middleware reference fromfolder.invitationtoclient-portal
- 10.1: Update
- Task 11: Rename Factory and Update Seeder (AC: #14, #19)
- 11.1: Rename
database/factories/FolderFactory.php→DeclarationFactory.php— update class name, docblock, enum imports - 11.2: Update
database/seeders/DatabaseSeeder.php— update imports,Folder::create()→Declaration::create(), variable names, comments
- 11.1: Rename
- Task 12: Create Polymorphic Data Migration (AC: #18)
- 12.1: Create migration
2026_03_11_000002_update_polymorphic_folder_to_declaration.php - 12.2: In
up()—DB::table('media')->where('model_type', 'App\\Models\\Folder')->update(['model_type' => 'App\\Models\\Declaration']) - 12.3: In
up()—DB::table('activity_log')->where('subject_type', 'App\\Models\\Folder')->update(['subject_type' => 'App\\Models\\Declaration']) - 12.4: In
down()— reverse both updates - 12.5: Verified
activity_log.causer_type— Spatie defaults to authenticated User as causer, no customcausedBy()calls exist, socauser_typeonly containsApp\Models\User. No migration needed.
- 12.1: Create migration
- Task 13: Update and Verify Tests (AC: #20)
- 13.1: Rename
tests/Feature/Folder/directory →tests/Feature/Declaration/ - 13.2: Update
tests/Feature/Declaration/FolderTypeTest.php→DeclarationTypeTest.php— update all model/enum/route references - 13.3: Update
tests/Feature/Declaration/MediaDownloadTest.php— update model/route references - 13.4: Update
tests/Feature/Notification/FolderMentionTest.php→DeclarationMentionTest.php— update all references - 13.5: Update
tests/Feature/Notification/NotificationControllerTest.php— update any folder references - 13.6: Run
composer testto verify all tests pass
- 13.1: Rename
- Task 14: Final Verification (AC: all)
- 14.1: Run
grep -r "Folder" app/ database/ routes/ tests/ resources/views/emails/ --include="*.php" --include="*.blade.php"— confirm zero "Folder" references remain (except in migration file names which are historical) - 14.2: Run
php artisan route:listto verify all routes are registered correctly - 14.3: Run
composer test— all tests pass
- 14.1: Run
Dev Notes
Critical Architecture Constraints
- Database engine: MySQL 8.4 (production) / SQLite for local dev — Story 0.1 already renamed tables
- Multi-tenant: All models are workspace-scoped via
workspace_idcolumn - Spatie media_library:
media.model_typestores FQCNApp\Models\Folder— MUST be updated via data migration (Task 12) toApp\Models\Declaration - Spatie activity_log:
activity_log.subject_typestoresApp\Models\Folder— same data migration - No morph map: The codebase has NO
Relation::morphMap()— polymorphic types store full class names. The data migration in Task 12 handles this. Do NOT register a morph map as a shortcut — keep consistent with existing pattern - Laravel 12: No
doctrine/dbalneeded for schema operations - Docker Compose: Everything runs under Docker — use
docker compose exec laravel.testprefix for artisan/composer commands
Rename Strategy — Order of Operations
The order matters to avoid broken imports during the rename process:
- Enums first (no dependencies on other renamed files)
- Models second (depend on enums, depended on by everything else)
- Related models (depend on renamed models)
- Form Requests (depend on enums)
- Controllers (depend on models, enums, requests)
- Mail classes (depend on models)
- Blade templates (referenced by mail classes)
- Notification (depends on models)
- Middleware (depends on models)
- Routes (depend on controllers, middleware)
- Factory + Seeder (depend on models, enums)
- Polymorphic data migration (standalone DB operation)
- Tests (depend on everything)
File Rename Mapping (Complete)
| Old Path | New Path |
|---|---|
app/Enums/FolderType.php |
app/Enums/DeclarationType.php |
app/Enums/FolderStatus.php |
app/Enums/DeclarationStatus.php |
app/Enums/FolderPriority.php |
app/Enums/DeclarationPriority.php |
app/Models/Folder.php |
app/Models/Declaration.php |
app/Models/FolderInvitation.php |
app/Models/DeclarationInvitation.php |
app/Http/Controllers/FolderController.php |
app/Http/Controllers/DeclarationController.php |
app/Http/Controllers/FolderMediaController.php |
app/Http/Controllers/DeclarationMediaController.php |
app/Http/Controllers/FolderMessageController.php |
app/Http/Controllers/DeclarationMessageController.php |
app/Http/Controllers/FolderMentionController.php |
app/Http/Controllers/DeclarationMentionController.php |
app/Http/Requests/StoreFolderRequest.php |
app/Http/Requests/StoreDeclarationRequest.php |
app/Http/Requests/UpdateFolderRequest.php |
app/Http/Requests/UpdateDeclarationRequest.php |
app/Http/Requests/StoreFolderMessageRequest.php |
app/Http/Requests/StoreDeclarationMessageRequest.php |
app/Http/Requests/StoreFolderMentionRequest.php |
app/Http/Requests/StoreDeclarationMentionRequest.php |
app/Mail/FolderInviteMail.php |
app/Mail/DeclarationInviteMail.php |
app/Mail/FolderConfirmationMail.php |
app/Mail/DeclarationConfirmationMail.php |
app/Mail/FolderFileRequestMail.php |
app/Mail/DeclarationFileRequestMail.php |
app/Mail/FolderSituationMail.php |
app/Mail/DeclarationSituationMail.php |
app/Mail/FolderTextMessageMail.php |
app/Mail/DeclarationTextMessageMail.php |
app/Notifications/FolderMentionNotification.php |
app/Notifications/DeclarationMentionNotification.php |
app/Http/Middleware/ValidateFolderInvitation.php |
app/Http/Middleware/ValidateClientPortalToken.php |
database/factories/FolderFactory.php |
database/factories/DeclarationFactory.php |
resources/views/emails/folder-invite.blade.php |
resources/views/emails/declaration-invite.blade.php |
resources/views/emails/folder-confirmation.blade.php |
resources/views/emails/declaration-confirmation.blade.php |
resources/views/emails/folder-file-request.blade.php |
resources/views/emails/declaration-file-request.blade.php |
resources/views/emails/folder-situation.blade.php |
resources/views/emails/declaration-situation.blade.php |
resources/views/emails/folder-text-message.blade.php |
resources/views/emails/declaration-text-message.blade.php |
resources/views/emails/folder-mention.blade.php |
resources/views/emails/declaration-mention.blade.php |
tests/Feature/Folder/ |
tests/Feature/Declaration/ |
Variable and Method Rename Patterns
Within the renamed files AND referencing files, apply these renames consistently:
| Old Pattern | New Pattern |
|---|---|
$folder |
$declaration |
$folders |
$declarations |
$folderTypes |
$declarationTypes |
$folderIndex |
$declarationIndex |
$numFolders |
$numDeclarations |
folder_id |
declaration_id |
folder_title |
declaration_title |
folder_invitation (request attr) |
declaration_invitation |
authorizeFolder() |
authorizeDeclaration() |
folderTypeLabels() |
declarationTypeLabels() |
folderStatusLabels() |
declarationStatusLabels() |
folderPriorityLabels() |
declarationPriorityLabels() |
createInvitation() |
Keep name (context-independent) |
getOrCreateInvitation() |
Keep name (context-independent) |
updateFolderStatusAndConfirmation() |
updateDeclarationStatusAndConfirmation() |
sendEmailForMessage() |
Keep name (context-independent) |
route('folders.*') |
route('declarations.*') |
'emails.folder-*' (view refs) |
'emails.declaration-*' |
Controllers That Reference Folder (Update Only, Not Rename)
These controllers import Folder/FolderStatus and need import + usage updates:
DashboardController.php— importsFolder,FolderStatus. Uses folder queries for dashboard stats (assignedFolders, overdue, dueSoon, etc.)ClientController.php— usesFoldermodel via$client->folders()relationshipWorkspaceController.php— importsFolder,FolderStatus. Uses folder counts for workspace statsClient/UploadController.php— importsFolderStatus, getsfolderfrom request attributeClient/ConfirmController.php— importsFolderStatus, getsfolderfrom request attribute
Polymorphic Data Migration — Critical
The media and activity_log tables store App\Models\Folder as FQCN in model_type / subject_type columns. After renaming the model class, existing rows will point to a non-existent class.
Migration 2026_03_11_000002_update_polymorphic_folder_to_declaration.php:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
return new class extends Migration
{
public function up(): void
{
DB::table('media')
->where('model_type', 'App\\Models\\Folder')
->update(['model_type' => 'App\\Models\\Declaration']);
DB::table('activity_log')
->where('subject_type', 'App\\Models\\Folder')
->update(['subject_type' => 'App\\Models\\Declaration']);
}
public function down(): void
{
DB::table('media')
->where('model_type', 'App\\Models\\Declaration')
->update(['model_type' => 'App\\Models\\Folder']);
DB::table('activity_log')
->where('subject_type', 'App\\Models\\Declaration')
->update(['subject_type' => 'App\\Models\\Folder']);
}
};
Migration timestamp: 2026_03_11_000002 — MUST be after 2026_03_11_000001 (the rename migration from Story 0.1).
Client Portal Middleware Rename
The middleware ValidateFolderInvitation → ValidateClientPortalToken is an intentional semantic rename (not just s/Folder/Declaration). The AC from the epics specifies this name. Update both:
app/Http/Middleware/ValidateClientPortalToken.php(file + class name)bootstrap/app.phpalias:'client-portal' => ValidateClientPortalToken::classroutes/web.phpmiddleware usage:->middleware('client-portal')
Inside the middleware, also rename:
FolderInvitation→DeclarationInvitation$invitation->folder→$invitation->declaration- Request attributes:
folder_invitation→declaration_invitation,folderattribute →declaration
In client portal controllers (Client/UploadController.php, Client/ConfirmController.php), update:
$request->attributes->get('folder_invitation')→$request->attributes->get('declaration_invitation')$request->attributes->get('folder')→$request->attributes->get('declaration')
Factory Rename — Model Binding
When renaming FolderFactory → DeclarationFactory, Laravel auto-discovers factories by convention (App\Models\Declaration → Database\Factories\DeclarationFactory). The HasFactory trait on Declaration model will resolve correctly if the factory class name matches. No explicit newFactory() override needed.
Blade Template Content Updates
When renaming blade templates, also update variable names inside them:
$folder->title→$declaration->title$folder->client->name→$declaration->client->name- Any other
$folderor$invitation->folderreferences →$declaration/$invitation->declaration
Route Name Changes Impact
After renaming routes from folders.* to declarations.*, update all route() helper calls:
route('folders.index')→route('declarations.index')route('folders.create')→route('declarations.create')route('folders.store')→route('declarations.store')route('folders.show', $folder)→route('declarations.show', $declaration)route('folders.edit', $folder)→route('declarations.edit', $declaration)route('folders.update', $folder)→route('declarations.update', $declaration)route('folders.destroy', $folder)→route('declarations.destroy', $declaration)route('folders.messages.store', $folder)→route('declarations.messages.store', $declaration)route('folders.media.store', $folder)→route('declarations.media.store', $declaration)route('folders.media.download', [...])→route('declarations.media.download', [...])route('folders.mentions.store', $folder)→route('declarations.mentions.store', $declaration)
Previous Story Intelligence (Story 0.1)
Key learnings from Story 0.1 that apply here:
- SQLite vs MySQL: Use Laravel's
Schemafacade methods exclusively, never raw SQL - Docker commands: Run all artisan/test commands via
docker compose exec laravel.test - Pest tests: Use
test()closures,RefreshDatabaseis auto-applied, useexpect()chaining - PHP version: Already upgraded to PHP 8.4 in compose.yaml
- Test DB: phpunit.xml configured for
DB_CONNECTION=sqlite,DB_DATABASE=:memory: - Application will be non-functional after Story 0.1 migration until this story is complete — Stories 0.1 + 0.2 should run in same session
- FK constraint caution: When dealing with foreign keys, use explicit column array syntax for cross-driver compatibility
Warning: Frontend Will Break After This Story
After this story, the application frontend will be broken until Story 0.3 (frontend rename) is completed:
- Vue components still import from
@/pages/folders/ - TypeScript types still reference
Folder - Wayfinder routes will regenerate with
declarations.*names but frontend still uses old names - Stories 0.2 and 0.3 should be implemented in close succession
Testing Standards
- Use Pest syntax (
test()closures), never PHPUnit class-based tests RefreshDatabaseis auto-applied viaPest.php— don't add manually- Run tests:
composer test - Feature tests grouped by domain:
tests/Feature/Declaration/,tests/Feature/Notification/ - Use
route()helper for URLs in tests - After rename, run full test suite to catch any missed references
Project Structure Notes
- All file renames should use
git mvto preserve history - New migration file goes in
database/migrations/with timestamp2026_03_11_000002 - Test directory rename:
tests/Feature/Folder/→tests/Feature/Declaration/ - Email templates:
resources/views/emails/folder-*.blade.php→declaration-*.blade.php
References
- [Source: _bmad-output/planning-artifacts/epics.md#Story 0.2]
- [Source: _bmad-output/planning-artifacts/architecture.md#Pre-Phase Migration]
- [Source: _bmad-output/planning-artifacts/architecture.md#Declaration Status Flow]
- [Source: _bmad-output/planning-artifacts/architecture.md#Role-Scoped Query Patterns]
- [Source: _bmad-output/project-context.md#Technology Stack]
- [Source: _bmad-output/implementation-artifacts/0-1-rename-folders-to-declarations-in-database.md]
- [Source: app/Models/Folder.php]
- [Source: app/Models/FolderInvitation.php]
- [Source: app/Http/Controllers/FolderController.php]
- [Source: app/Http/Controllers/FolderMediaController.php (line 65 — polymorphic query)]
- [Source: routes/web.php]
- [Source: bootstrap/app.php]
Dev Agent Record
Agent Model Used
Claude Opus 4.6
Debug Log References
N/A
Completion Notes List
- All 40+ files renamed/updated successfully using
git mvfor history preservation - Fixed pre-existing bug:
withValidator$this->merge()inaftercallback doesn't affect$request->validated()— moved period field nullification to controller - Fixed rollback test: updated
--stepfrom 1 to 2 to account for the new polymorphic migration - Fixed pre-existing test failure (
ProfileUpdateTest > user can delete their account) —SoftDeletestrait makesfresh()return soft-deleted record instead of null, changed assertion toexpect($user->fresh()->deleted_at)->not->toBeNull() - Frontend prop names (
createFolderUrl,assignedFolders,'folder','folders') intentionally kept unchanged — will be renamed in Story 0.3 - Inertia render paths (
'folders/Index','folders/Show', etc.) intentionally kept unchanged — frontend Vue files not yet renamed - [AI-Review] Cosmetic changes applied outside story scope: EOF newline fixes (13 test files), import reordering (3 activity log migrations, User.php), whitespace formatting (2 workspace request files), unused import removal (ClientEmailTest.php). These do not affect functionality but represent undisciplined scope.
- [AI-Review]
activity_log.causer_typeverified safe — Spatie defaults toApp\Models\Useras causer, no customcausedBy()calls exist. No migration needed.
Change Log
- Renamed 3 enums:
FolderType→DeclarationType,FolderStatus→DeclarationStatus,FolderPriority→DeclarationPriority - Renamed 2 models:
Folder→Declaration,FolderInvitation→DeclarationInvitation - Updated 3 related models:
Client,Workspace,Message(relationships + imports) - Renamed 4 form requests:
StoreFolderRequest→StoreDeclarationRequest, etc. - Renamed 4 controllers:
FolderController→DeclarationController, etc. - Updated 5 controllers in place:
DashboardController,ClientController,WorkspaceController,Client/UploadController,Client/ConfirmController - Renamed 5 mail classes:
FolderInviteMail→DeclarationInviteMail, etc. - Renamed 6 blade email templates:
folder-*.blade.php→declaration-*.blade.php - Renamed notification:
FolderMentionNotification→DeclarationMentionNotification - Renamed middleware:
ValidateFolderInvitation→ValidateClientPortalToken - Updated
bootstrap/app.php: aliasfolder.invitation→client-portal - Updated
routes/web.php: resourcefolders→declarations, middlewareclient-portal - Renamed factory:
FolderFactory→DeclarationFactory - Updated
DatabaseSeeder.php - Created polymorphic data migration:
2026_03_11_000002_update_polymorphic_folder_to_declaration.php - Renamed test directory and test files
- Fixed period field nullification bug in
DeclarationControllerstore/update methods - Fixed
ProfileUpdateTestSoftDeletes assertion (pre-existing failure) - Cosmetic changes: EOF newlines (13 files), import reordering (4 files), whitespace (2 files), unused import removal (1 file)
AI Code Review (2026-03-12):
- Updated File List: added 20 undocumented modified files
- Added Task 5.10:
Client/RefuseController.phpupdate - Added Task 12.5: verify
activity_log.causer_typefor stale FQCN - Updated Completion Notes with review findings
File List
Renamed files (git mv):
app/Enums/DeclarationType.php(wasFolderType.php)app/Enums/DeclarationStatus.php(wasFolderStatus.php)app/Enums/DeclarationPriority.php(wasFolderPriority.php)app/Models/Declaration.php(wasFolder.php)app/Models/DeclarationInvitation.php(wasFolderInvitation.php)app/Http/Controllers/DeclarationController.php(wasFolderController.php)app/Http/Controllers/DeclarationMediaController.php(wasFolderMediaController.php)app/Http/Controllers/DeclarationMessageController.php(wasFolderMessageController.php)app/Http/Controllers/DeclarationMentionController.php(wasFolderMentionController.php)app/Http/Requests/StoreDeclarationRequest.php(wasStoreFolderRequest.php)app/Http/Requests/UpdateDeclarationRequest.php(wasUpdateFolderRequest.php)app/Http/Requests/StoreDeclarationMessageRequest.php(wasStoreFolderMessageRequest.php)app/Http/Requests/StoreDeclarationMentionRequest.php(wasStoreFolderMentionRequest.php)app/Mail/DeclarationInviteMail.php(wasFolderInviteMail.php)app/Mail/DeclarationConfirmationMail.php(wasFolderConfirmationMail.php)app/Mail/DeclarationFileRequestMail.php(wasFolderFileRequestMail.php)app/Mail/DeclarationSituationMail.php(wasFolderSituationMail.php)app/Mail/DeclarationTextMessageMail.php(wasFolderTextMessageMail.php)app/Notifications/DeclarationMentionNotification.php(wasFolderMentionNotification.php)app/Http/Middleware/ValidateClientPortalToken.php(wasValidateFolderInvitation.php)database/factories/DeclarationFactory.php(wasFolderFactory.php)resources/views/emails/declaration-invite.blade.php(wasfolder-invite.blade.php)resources/views/emails/declaration-confirmation.blade.php(wasfolder-confirmation.blade.php)resources/views/emails/declaration-file-request.blade.php(wasfolder-file-request.blade.php)resources/views/emails/declaration-situation.blade.php(wasfolder-situation.blade.php)resources/views/emails/declaration-text-message.blade.php(wasfolder-text-message.blade.php)resources/views/emails/declaration-mention.blade.php(wasfolder-mention.blade.php)tests/Feature/Declaration/DeclarationTypeTest.php(wasFolder/FolderTypeTest.php)tests/Feature/Declaration/MediaDownloadTest.php(wasFolder/MediaDownloadTest.php)tests/Feature/Notification/DeclarationMentionTest.php(wasFolderMentionTest.php)
Modified in place:
app/Models/Client.phpapp/Models/Workspace.phpapp/Models/Message.phpapp/Models/User.php(cosmetic: trait use order alphabetized)app/Http/Controllers/DashboardController.phpapp/Http/Controllers/ClientController.phpapp/Http/Controllers/WorkspaceController.phpapp/Http/Controllers/Client/UploadController.phpapp/Http/Controllers/Client/ConfirmController.phpapp/Http/Controllers/Client/RefuseController.phpapp/Http/Requests/StoreWorkspaceRequest.php(cosmetic: whitespace formatting)app/Http/Requests/UpdateWorkspaceRequest.php(cosmetic: whitespace formatting)bootstrap/app.phproutes/web.phpdatabase/seeders/DatabaseSeeder.phpdatabase/migrations/2026_02_28_102716_create_activity_log_table.php(cosmetic: import reordering)database/migrations/2026_02_28_102717_add_event_column_to_activity_log_table.php(cosmetic: import reordering)database/migrations/2026_02_28_102718_add_batch_uuid_column_to_activity_log_table.php(cosmetic: import reordering)tests/Feature/Notification/NotificationControllerTest.phptests/Feature/Database/RenameFoldersToDeclarationsTest.phptests/Feature/Client/ClientEmailTest.php(removed unusedClientContactimport)tests/Feature/Settings/ProfileUpdateTest.php(fixed SoftDeletes assertion)tests/Feature/Auth/AuthenticationTest.php(cosmetic: EOF newline)tests/Feature/Auth/EmailVerificationTest.php(cosmetic: EOF newline)tests/Feature/Auth/PasswordConfirmationTest.php(cosmetic: EOF newline)tests/Feature/Auth/PasswordResetTest.php(cosmetic: EOF newline)tests/Feature/Auth/RegistrationTest.php(cosmetic: EOF newline)tests/Feature/Auth/TwoFactorChallengeTest.php(cosmetic: EOF newline)tests/Feature/Auth/VerificationNotificationTest.php(cosmetic: EOF newline)tests/Feature/DashboardTest.php(cosmetic: EOF newline)tests/Feature/ExampleTest.php(cosmetic: EOF newline)tests/Feature/Settings/PasswordUpdateTest.php(cosmetic: EOF newline)tests/Feature/Settings/TwoFactorAuthenticationTest.php(cosmetic: EOF newline)tests/Unit/ExampleTest.php(cosmetic: EOF newline)
New files:
database/migrations/2026_03_11_000002_update_polymorphic_folder_to_declaration.php