# Inventário — arquivos por área (base da revisão F3→F6)

> Gerado a partir da árvore do repositório. Use junto com o arquivo da task em `_to_revision/`.

> `vendor/`, `node_modules/`, `public/build/` e `.pi/` ficam fora.


## Raiz e configuração

_( 33 arquivos )_

- `AGENTS.md`
- `CONTRIBUTING.md`
- `Makefile`
- `bootstrap/app.php`
- `eslint.config.js`
- `package.json`
- `phpstan-baseline.count`
- `phpstan-baseline.neon`
- `routes/console.php`
- `vite.config.js`
- `config/_OTHER_CONFIGS.md`
- `config/app.php`
- `config/audit.php`
- `config/auth.php`
- `config/cache.php`
- `config/cms.php`
- `config/cors.php`
- `config/database.php`
- `config/design.php`
- `config/environments.php`
- `config/filesystems.php`
- `config/hashing.php`
- `config/layout.php`
- `config/lgpd.php`
- `config/logging.php`
- `config/mail.php`
- `config/observability.php`
- `config/queue.php`
- `config/richtext.php`
- `config/seo.php`
- `config/services.php`
- `config/session.php`
- `config/view.php`


## Core (contratos, audit, retention, seo, routing, localização, módulos, stubs)

_( 116 arquivos )_

- `src/core/Access/AccessGate.php`
- `src/core/Access/Database/Migrations/2026_10_16_000000_create_core_roles_table.php`
- `src/core/Access/Database/Migrations/2026_10_16_000001_add_role_id_to_cms_users_table.php`
- `src/core/Access/Database/Migrations/2026_10_16_000002_seed_support_role.php`
- `src/core/Access/Database/Migrations/2026_10_16_000003_harden_core_roles_permissoes.php`
- `src/core/Access/Models/Role.php`
- `src/core/Access/Permission.php`
- `src/core/Access/README.md`
- `src/core/Access/SupportAccess.php`
- `src/core/Access/Test/AccessGateTest.php`
- `src/core/Access/Test/PermissionTest.php`
- `src/core/Access/Test/RolePermissionTest.php`
- `src/core/Access/Test/RoleProtectionTest.php`
- `src/core/Area/Cms/Database/Migrations/2026_06_11_000000_create_cms_users_table.php`
- `src/core/Area/Cms/Database/Seeders/CmsUserSeeder.php`
- `src/core/Area/Cms/Logic/Controllers/AuthenticateController.php`
- `src/core/Area/Cms/Logic/Controllers/CmsDashboardController.php`
- `src/core/Area/Cms/Logic/Controllers/LogoutController.php`
- `src/core/Area/Cms/Logic/Controllers/ShowLoginController.php`
- `src/core/Area/Cms/Logic/Requests/LoginRequest.php`
- `src/core/Area/Cms/Models/User.php`
- `src/core/Area/Cms/README.md`
- `src/core/Area/Cms/Routes/web.php`
- `src/core/Contracts/AuditEntry.php`
- `src/core/Contracts/AuditWriter.php`
- `src/core/Contracts/Clock.php`
- `src/core/Contracts/IdGen.php`
- `src/core/Contracts/ModuleProvider.php`
- `src/core/Contracts/Ports/README.md`
- `src/core/Contracts/Ports/RetentionTarget.php`
- `src/core/Contracts/Ports/SitemapSource.php`
- `src/core/Contracts/Ports/WidgetSource.php`
- `src/core/Contracts/README.md`
- `src/core/Contracts/RetentionRegistry.php`
- `src/core/Contracts/Service.php`
- `src/core/Contracts/SitemapRegistry.php`
- `src/core/Contracts/Telemetry.php`
- `src/core/Contracts/Test/ContractsBindingTest.php`
- `src/core/Contracts/WidgetRegistry.php`
- `src/core/CoreServiceProvider.php`
- `src/core/Internal/Audit/Actions/ExpungeAuditLogs.php`
- `src/core/Internal/Audit/AuditPolicy.php`
- `src/core/Internal/Audit/Console/ExpungeAuditLogsCommand.php`
- `src/core/Internal/Audit/Database/Migrations/2026_06_05_130000_create_core_audit_logs_table.php`
- `src/core/Internal/Audit/Database/Migrations/2026_10_17_000000_add_evidence_columns_to_core_audit_logs.php`
- `src/core/Internal/Audit/Database/Migrations/2026_10_17_000001_create_core_audit_legal_holds_table.php`
- `src/core/Internal/Audit/Http/Middleware/AuditAccess.php`
- `src/core/Internal/Audit/Listeners/AuditAuthSubscriber.php`
- `src/core/Internal/Audit/Listeners/GlobalAuditSubscriber.php`
- `src/core/Internal/Audit/Listeners/README.md`
- `src/core/Internal/Audit/Models/AuditLog.php`
- `src/core/Internal/Audit/README.md`
- `src/core/Internal/Audit/Services/AuditService.php`
- `src/core/Internal/Audit/Support/ModuleToken.php`
- `src/core/Internal/Audit/Test/AuditAccessTest.php`
- `src/core/Internal/Audit/Test/AuditAuthTest.php`
- `src/core/Internal/Audit/Test/AuditEntryTest.php`
- `src/core/Internal/Audit/Test/AuditPolicyTest.php`
- `src/core/Internal/Audit/Test/AuditRetentionTest.php`
- `src/core/Internal/Audit/Test/AuditTrailTest.php`
- `src/core/Internal/Audit/Test/FakeAuditWriter.php`
- `src/core/Internal/Audit/Test/ModuleTokenTest.php`
- `src/core/Internal/Exceptions/ProblemDetailsException.php`
- `src/core/Internal/Exceptions/ProblemDetailsHtmlRenderer.php`
- `src/core/Internal/Exceptions/ProblemDetailsRenderer.php`
- `src/core/Internal/Exceptions/README.md`
- `src/core/Internal/Exceptions/Test/ProblemDetailsTest.php`
- `src/core/Internal/Generators/Console/MakeModuleCommand.php`
- `src/core/Internal/Generators/Console/MakeServiceCommand.php`
- `src/core/Internal/Generators/Console/README.md`
- `src/core/Internal/ModuleDiscovery/Console/ActivateModuleCommand.php`
- `src/core/Internal/ModuleDiscovery/Console/CacheModulesCommand.php`
- `src/core/Internal/ModuleDiscovery/Database/Migrations/2026_06_05_140000_create_core_module_discovery_settings_table.php`
- `src/core/Internal/ModuleDiscovery/Models/ModuleDiscoverySetting.php`
- `src/core/Internal/ModuleDiscovery/ModuleActivation.php`
- `src/core/Internal/ModuleDiscovery/ModuleDiscoveryService.php`
- `src/core/Internal/ModuleDiscovery/ModuleDiscoveryServiceProvider.php`
- `src/core/Internal/ModuleDiscovery/README.md`
- `src/core/Internal/ModuleDiscovery/Test/ModuleDiscoveryTest.php`
- `src/core/Internal/Navigation/PanelMenu.php`
- `src/core/Internal/Navigation/Test/PanelMenuTest.php`
- `src/core/Internal/Retention/Console/ExpungeRetentionCommand.php`
- `src/core/Internal/Retention/InMemoryRetentionRegistry.php`
- `src/core/Internal/Routing/AreaRegistrar.php`
- `src/core/Internal/Routing/RoutingServiceProvider.php`
- `src/core/Internal/Seo/InMemorySitemapRegistry.php`
- `src/core/Internal/Widgets/InMemoryWidgetRegistry.php`
- `src/core/Internal/Widgets/Test/FakeWidgetSource.php`
- `src/core/Localization/LocaleCast.php`
- `src/core/Localization/Locales.php`
- `src/core/Localization/LocalizedDate.php`
- `src/core/Localization/localized_url.php`
- `src/core/Stub/Module/Database/Migrations/migration.stub`
- `src/core/Stub/Module/Database/Models/Model.stub`
- `src/core/Stub/Module/Lang/cms.stub`
- `src/core/Stub/Module/Lang/index.stub`
- `src/core/Stub/Module/Lang/menu.stub`
- `src/core/Stub/Module/Layout/Views/view.blade.stub`
- `src/core/Stub/Module/Logic/Actions/Action.stub`
- `src/core/Stub/Module/Logic/Controllers/ApiController.stub`
- `src/core/Stub/Module/Logic/Controllers/Controller.stub`
- `src/core/Stub/Module/Logic/Controllers/WebController.stub`
- `src/core/Stub/Module/Logic/DTOs/DTO.stub`
- `src/core/Stub/Module/Logic/Requests/Request.stub`
- `src/core/Stub/Module/MODULE.md.stub`
- `src/core/Stub/Module/ModuleProvider.stub`
- `src/core/Stub/Module/Routes/api.stub`
- `src/core/Stub/Module/Routes/cms.stub`
- `src/core/Stub/Module/Routes/portal.stub`
- `src/core/Stub/Module/Test/ActionTest.stub`
- `src/core/Stub/Module/Test/ContractTest.stub`
- `src/core/Stub/README.md`
- `src/core/Stub/Service/Contracts/{{ service }}Contract.stub`
- `src/core/Stub/Service/ServiceProvider.stub`
- `src/core/Stub/Service/Test/{{ service }}ContractTest.stub`
- `src/core/Stub/Service/{{ service }}Service.stub`


## Layout (design system, engine, shells, portal/cms)

_( 165 arquivos )_

- `src/layout/Assets/css/a11y.css`
- `src/layout/Assets/css/base.css`
- `src/layout/Assets/css/fonts.css`
- `src/layout/Assets/css/icons.css`
- `src/layout/Assets/css/layout.css`
- `src/layout/Assets/css/tokens.css`
- `src/layout/Assets/fonts/LICENSE-OFL.txt`
- `src/layout/Assets/fonts/atkinson-hyperlegible-next-latin-ext-wght-italic.woff2`
- `src/layout/Assets/fonts/atkinson-hyperlegible-next-latin-ext-wght-normal.woff2`
- `src/layout/Assets/fonts/atkinson-hyperlegible-next-latin-wght-italic.woff2`
- `src/layout/Assets/fonts/atkinson-hyperlegible-next-latin-wght-normal.woff2`
- `src/layout/Assets/icons/README.md`
- `src/layout/Assets/icons/brand/facebook.svg`
- `src/layout/Assets/icons/brand/instagram.svg`
- `src/layout/Assets/icons/brand/twitter.svg`
- `src/layout/Assets/icons/brand/youtube.svg`
- `src/layout/Assets/icons/lucide/align-center.svg`
- `src/layout/Assets/icons/lucide/align-left.svg`
- `src/layout/Assets/icons/lucide/align-right.svg`
- `src/layout/Assets/icons/lucide/arrow-left.svg`
- `src/layout/Assets/icons/lucide/arrow-right.svg`
- `src/layout/Assets/icons/lucide/bar-chart.svg`
- `src/layout/Assets/icons/lucide/beaker.svg`
- `src/layout/Assets/icons/lucide/bold.svg`
- `src/layout/Assets/icons/lucide/calendar.svg`
- `src/layout/Assets/icons/lucide/chart-line.svg`
- `src/layout/Assets/icons/lucide/check-circle.svg`
- `src/layout/Assets/icons/lucide/chevron-right.svg`
- `src/layout/Assets/icons/lucide/columns-2.svg`
- `src/layout/Assets/icons/lucide/component.svg`
- `src/layout/Assets/icons/lucide/construction.svg`
- `src/layout/Assets/icons/lucide/contrast.svg`
- `src/layout/Assets/icons/lucide/database.svg`
- `src/layout/Assets/icons/lucide/download.svg`
- `src/layout/Assets/icons/lucide/drafting-compass.svg`
- `src/layout/Assets/icons/lucide/ear.svg`
- `src/layout/Assets/icons/lucide/external-link.svg`
- `src/layout/Assets/icons/lucide/eye.svg`
- `src/layout/Assets/icons/lucide/file-edit.svg`
- `src/layout/Assets/icons/lucide/file-text.svg`
- `src/layout/Assets/icons/lucide/flag.svg`
- `src/layout/Assets/icons/lucide/heading-2.svg`
- `src/layout/Assets/icons/lucide/heading-3.svg`
- `src/layout/Assets/icons/lucide/heading-4.svg`
- `src/layout/Assets/icons/lucide/help-circle.svg`
- `src/layout/Assets/icons/lucide/highlighter.svg`
- `src/layout/Assets/icons/lucide/home.svg`
- `src/layout/Assets/icons/lucide/image.svg`
- `src/layout/Assets/icons/lucide/indent-decrease.svg`
- `src/layout/Assets/icons/lucide/indent-increase.svg`
- `src/layout/Assets/icons/lucide/info.svg`
- `src/layout/Assets/icons/lucide/italic.svg`
- `src/layout/Assets/icons/lucide/landmark.svg`
- `src/layout/Assets/icons/lucide/layers.svg`
- `src/layout/Assets/icons/lucide/link.svg`
- `src/layout/Assets/icons/lucide/list-ordered.svg`
- `src/layout/Assets/icons/lucide/list.svg`
- `src/layout/Assets/icons/lucide/log-out.svg`
- `src/layout/Assets/icons/lucide/mail.svg`
- `src/layout/Assets/icons/lucide/map-pin.svg`
- `src/layout/Assets/icons/lucide/maximize.svg`
- `src/layout/Assets/icons/lucide/menu.svg`
- `src/layout/Assets/icons/lucide/minimize.svg`
- `src/layout/Assets/icons/lucide/newspaper.svg`
- `src/layout/Assets/icons/lucide/phone.svg`
- `src/layout/Assets/icons/lucide/pilcrow.svg`
- `src/layout/Assets/icons/lucide/plus.svg`
- `src/layout/Assets/icons/lucide/printer.svg`
- `src/layout/Assets/icons/lucide/quote.svg`
- `src/layout/Assets/icons/lucide/redo.svg`
- `src/layout/Assets/icons/lucide/search.svg`
- `src/layout/Assets/icons/lucide/settings-2.svg`
- `src/layout/Assets/icons/lucide/share-2.svg`
- `src/layout/Assets/icons/lucide/shield-check.svg`
- `src/layout/Assets/icons/lucide/shield-keyhole.svg`
- `src/layout/Assets/icons/lucide/strikethrough.svg`
- `src/layout/Assets/icons/lucide/table.svg`
- `src/layout/Assets/icons/lucide/touchpad.svg`
- `src/layout/Assets/icons/lucide/trash-2.svg`
- `src/layout/Assets/icons/lucide/trending-up.svg`
- `src/layout/Assets/icons/lucide/underline.svg`
- `src/layout/Assets/icons/lucide/undo.svg`
- `src/layout/Assets/icons/lucide/unlink.svg`
- `src/layout/Assets/icons/lucide/upload-cloud.svg`
- `src/layout/Assets/icons/lucide/user.svg`
- `src/layout/Assets/icons/lucide/volume-2.svg`
- `src/layout/Assets/icons/lucide/x.svg`
- `src/layout/Assets/js/a11y.js`
- `src/layout/Assets/js/analytics.js`
- `src/layout/Cms/Assets/css/app.css`
- `src/layout/Cms/Assets/css/shell.css`
- `src/layout/Cms/Assets/js/app.js`
- `src/layout/Cms/CmsServiceProvider.php`
- `src/layout/Cms/Http/CmsThemeStylesheetController.php`
- `src/layout/Cms/README.md`
- `src/layout/Cms/Shell/CmsShell.php`
- `src/layout/Cms/Shell/CmsShellResolver.php`
- `src/layout/Cms/Shell/CmsSidebarPosition.php`
- `src/layout/Cms/auth/login.blade.php`
- `src/layout/Cms/components/alert.blade.php`
- `src/layout/Cms/components/badge.blade.php`
- `src/layout/Cms/components/breadcrumb.blade.php`
- `src/layout/Cms/components/button.blade.php`
- `src/layout/Cms/components/card.blade.php`
- `src/layout/Cms/components/empty-state.blade.php`
- `src/layout/Cms/components/filter-card.blade.php`
- `src/layout/Cms/components/form-group.blade.php`
- `src/layout/Cms/components/modal.blade.php`
- `src/layout/Cms/components/pagination.blade.php`
- `src/layout/Cms/components/seo-button.blade.php`
- `src/layout/Cms/components/status-badge.blade.php`
- `src/layout/Cms/components/table-actions.blade.php`
- `src/layout/Cms/components/table.blade.php`
- `src/layout/Cms/dashboard.blade.php`
- `src/layout/Cms/partials/footer.blade.php`
- `src/layout/Cms/partials/header.blade.php`
- `src/layout/Cms/partials/nav-items.blade.php`
- `src/layout/Cms/partials/orbital.blade.php`
- `src/layout/Cms/partials/palette.blade.php`
- `src/layout/Cms/partials/sidebar.blade.php`
- `src/layout/Components/cms.blade.php`
- `src/layout/Components/portal.blade.php`
- `src/layout/Components/slot.blade.php`
- `src/layout/Components/ui/icon.blade.php`
- `src/layout/Components/ui/richtext-button.blade.php`
- `src/layout/Components/widget.blade.php`
- `src/layout/Design/IconSet.php`
- `src/layout/Engine/A11yFontScale.php`
- `src/layout/Engine/A11yPreferences.php`
- `src/layout/Engine/LayoutPreset.php`
- `src/layout/Engine/PresetConfig.php`
- `src/layout/Engine/SlotConfig.php`
- `src/layout/Engine/SlotProvider.php`
- `src/layout/Engine/SlotRegistry.php`
- `src/layout/Engine/ThemeResolver.php`
- `src/layout/Engine/ThemeSchema.php`
- `src/layout/Engine/ThemeTokens.php`
- `src/layout/Http/ThemeStylesheetController.php`
- `src/layout/Lang/en/a11y.php`
- `src/layout/Lang/en/shell.php`
- `src/layout/Lang/es/a11y.php`
- `src/layout/Lang/es/shell.php`
- `src/layout/Lang/fr/a11y.php`
- `src/layout/Lang/fr/shell.php`
- `src/layout/Lang/pt_BR/a11y.php`
- `src/layout/Lang/pt_BR/shell.php`
- `src/layout/LayoutServiceProvider.php`
- `src/layout/Portal/Assets/css/animations.css`
- `src/layout/Portal/Assets/css/app.css`
- `src/layout/Portal/Assets/css/print.css`
- `src/layout/Portal/Assets/css/typography.css`
- `src/layout/Portal/Assets/js/app.js`
- `src/layout/Portal/pagination/tailwind.blade.php`
- `src/layout/Portal/partials/a11y-bar.blade.php`
- `src/layout/Portal/partials/analytics.blade.php`
- `src/layout/Portal/partials/footer.blade.php`
- `src/layout/Portal/partials/header.blade.php`
- `src/layout/Portal/partials/metadata.blade.php`
- `src/layout/Portal/partials/search.blade.php`
- `src/layout/Portal/partials/skip-links.blade.php`
- `src/layout/Portal/regions/main-footer.blade.php`
- `src/layout/Portal/regions/main-header.blade.php`
- `src/layout/Portal/regions/main-left.blade.php`
- `src/layout/Portal/regions/main-right.blade.php`
- `src/layout/Routes/theme.php`


## Services

_( 117 arquivos )_

- `src/services/Layout/Actions/ResolveLayoutPlacements.php`
- `src/services/Layout/Actions/SaveLayoutProfile.php`
- `src/services/Layout/Contracts/LayoutProfileReader.php`
- `src/services/Layout/DTOs/LayoutPlacement.php`
- `src/services/Layout/Enums/LayoutSlot.php`
- `src/services/Layout/Http/Controllers/Cms/LayoutProfileFormController.php`
- `src/services/Layout/Http/Controllers/Cms/LayoutProfileIndexController.php`
- `src/services/Layout/Http/Controllers/Cms/LayoutProfileSaveController.php`
- `src/services/Layout/Http/Requests/SaveLayoutProfileRequest.php`
- `src/services/Layout/Lang/en/cms.php`
- `src/services/Layout/Lang/es/cms.php`
- `src/services/Layout/Lang/fr/cms.php`
- `src/services/Layout/Lang/pt_BR/cms.php`
- `src/services/Layout/Migrations/2026_10_19_000000_create_layout_profiles_table.php`
- `src/services/Layout/Models/LayoutProfile.php`
- `src/services/Layout/Routes/cms.php`
- `src/services/Layout/Seeders/LayoutProfileSeeder.php`
- `src/services/Layout/ServiceProvider.php`
- `src/services/Layout/Test/LayoutAdminTest.php`
- `src/services/Layout/Test/LayoutProfileTest.php`
- `src/services/Layout/View/cms/form.blade.php`
- `src/services/Layout/View/cms/index.blade.php`
- `src/services/Media/Actions/StoreEditorMedia.php`
- `src/services/Media/Assets/css/media.css`
- `src/services/Media/Contracts/EditorMediaStore.php`
- `src/services/Media/Contracts/ImageOptimizerInterface.php`
- `src/services/Media/Contracts/MediaIngestor.php`
- `src/services/Media/Contracts/MediaStorageInterface.php`
- `src/services/Media/Contracts/PDFOptimizerInterface.php`
- `src/services/Media/Enums/MediaType.php`
- `src/services/Media/Http/MediaStreamController.php`
- `src/services/Media/Http/MediaUploadController.php`
- `src/services/Media/Http/Requests/MediaUploadRequest.php`
- `src/services/Media/Lang/en/viewer.php`
- `src/services/Media/Lang/es/viewer.php`
- `src/services/Media/Lang/fr/viewer.php`
- `src/services/Media/Lang/pt_BR/viewer.php`
- `src/services/Media/MediaInputer.php`
- `src/services/Media/Optimizers/ImageOptimizer.php`
- `src/services/Media/Optimizers/PDFOptimizer.php`
- `src/services/Media/README.md`
- `src/services/Media/Routes/cms.php`
- `src/services/Media/Routes/portal.php`
- `src/services/Media/ServiceProvider.php`
- `src/services/Media/Storage/SecureMediaStorage.php`
- `src/services/Media/Test/MediaStreamTest.php`
- `src/services/Media/Test/MediaUploadTest.php`
- `src/services/Media/Test/SecureMediaStorageTest.php`
- `src/services/Media/View/picture.blade.php`
- `src/services/RichText/Assets/css/content.css`
- `src/services/RichText/Assets/css/editor.css`
- `src/services/RichText/Assets/js/dialogs.js`
- `src/services/RichText/Assets/js/editor.js`
- `src/services/RichText/Assets/js/preview.js`
- `src/services/RichText/Assets/js/schema.js`
- `src/services/RichText/Assets/js/toolbar.js`
- `src/services/RichText/ContentASTParser.php`
- `src/services/RichText/Contracts/MediaUrlResolver.php`
- `src/services/RichText/Contracts/RichTextRenderer.php`
- `src/services/RichText/Http/RichTextPreviewController.php`
- `src/services/RichText/Lang/en/editor.php`
- `src/services/RichText/Lang/en/parser.php`
- `src/services/RichText/Lang/es/editor.php`
- `src/services/RichText/Lang/es/parser.php`
- `src/services/RichText/Lang/fr/editor.php`
- `src/services/RichText/Lang/fr/parser.php`
- `src/services/RichText/Lang/pt_BR/editor.php`
- `src/services/RichText/Lang/pt_BR/parser.php`
- `src/services/RichText/Media/MediaStreamUrls.php`
- `src/services/RichText/README.md`
- `src/services/RichText/Routes/cms.php`
- `src/services/RichText/ServiceProvider.php`
- `src/services/RichText/Test/FakeRichTextMediaUrlResolver.php`
- `src/services/RichText/Test/FakeRichTextRenderer.php`
- `src/services/RichText/Test/RichTextAST.php`
- `src/services/RichText/Test/RichTextEditorTest.php`
- `src/services/RichText/Test/RichTextLinkTest.php`
- `src/services/RichText/Test/RichTextMediaTest.php`
- `src/services/RichText/Test/RichTextRendererTest.php`
- `src/services/RichText/Test/RichTextStructureTest.php`
- `src/services/RichText/View/components/editor.blade.php`
- `src/services/Security/Assets/css/security.css`
- `src/services/Security/Contracts/Hasher.php`
- `src/services/Security/EncryptionService.php`
- `src/services/Security/HashingService.php`
- `src/services/Security/Lang/en/card.php`
- `src/services/Security/Lang/es/card.php`
- `src/services/Security/Lang/fr/card.php`
- `src/services/Security/Lang/pt_BR/card.php`
- `src/services/Security/README.md`
- `src/services/Security/ServiceProvider.php`
- `src/services/Security/View/security-data-card.blade.php`
- `src/services/Seo/Actions/BuildSeoGraph.php`
- `src/services/Seo/Actions/BuildSeoSitemap.php`
- `src/services/Seo/Actions/GenerateSeoMetadata.php`
- `src/services/Seo/Actions/ResolveSeoRedirect.php`
- `src/services/Seo/Contracts/RedirectLookup.php`
- `src/services/Seo/Contracts/SeoBinder.php`
- `src/services/Seo/Contracts/SeoGraphBuilder.php`
- `src/services/Seo/Contracts/SeoMetadataGenerator.php`
- `src/services/Seo/DTOs/SeoData.php`
- `src/services/Seo/Http/Controllers/SeoRootFilesController.php`
- `src/services/Seo/Http/Middleware/RedirectLegacy.php`
- `src/services/Seo/Migrations/2026_10_20_000000_create_seo_redirects_table.php`
- `src/services/Seo/Models/SeoRedirect.php`
- `src/services/Seo/README.md`
- `src/services/Seo/Routes/api.php`
- `src/services/Seo/Routes/cms.php`
- `src/services/Seo/Routes/portal.php`
- `src/services/Seo/SeoService.php`
- `src/services/Seo/SeoSettings.php`
- `src/services/Seo/ServiceProvider.php`
- `src/services/Seo/Test/SeoGraphTest.php`
- `src/services/Seo/Test/SeoRedirectTest.php`
- `src/services/Seo/Test/SeoServiceTest.php`
- `src/services/Seo/Test/SeoTagsTest.php`
- `src/services/Seo/View/components/tags.blade.php`


## Módulos

_( 196 arquivos )_

- `src/modules/Desenvolvimento/Demo/Database/Migrations/2026_06_11_000001_create_demo_milestones_table.php`
- `src/modules/Desenvolvimento/Demo/Database/Models/Milestone.php`
- `src/modules/Desenvolvimento/Demo/Database/Seeders/MilestoneSeeder.php`
- `src/modules/Desenvolvimento/Demo/Lang/en/cms.php`
- `src/modules/Desenvolvimento/Demo/Lang/en/menu.php`
- `src/modules/Desenvolvimento/Demo/Lang/en/show.php`
- `src/modules/Desenvolvimento/Demo/Lang/en/widget.php`
- `src/modules/Desenvolvimento/Demo/Lang/es/cms.php`
- `src/modules/Desenvolvimento/Demo/Lang/es/menu.php`
- `src/modules/Desenvolvimento/Demo/Lang/es/show.php`
- `src/modules/Desenvolvimento/Demo/Lang/es/widget.php`
- `src/modules/Desenvolvimento/Demo/Lang/fr/cms.php`
- `src/modules/Desenvolvimento/Demo/Lang/fr/menu.php`
- `src/modules/Desenvolvimento/Demo/Lang/fr/show.php`
- `src/modules/Desenvolvimento/Demo/Lang/fr/widget.php`
- `src/modules/Desenvolvimento/Demo/Lang/pt_BR/cms.php`
- `src/modules/Desenvolvimento/Demo/Lang/pt_BR/menu.php`
- `src/modules/Desenvolvimento/Demo/Lang/pt_BR/show.php`
- `src/modules/Desenvolvimento/Demo/Lang/pt_BR/widget.php`
- `src/modules/Desenvolvimento/Demo/Layout/Views/cms/index.blade.php`
- `src/modules/Desenvolvimento/Demo/Layout/Views/public/show.blade.php`
- `src/modules/Desenvolvimento/Demo/Layout/Views/widgets/demo-status.blade.php`
- `src/modules/Desenvolvimento/Demo/Logic/Controllers/CmsMilestoneIndexController.php`
- `src/modules/Desenvolvimento/Demo/Logic/Controllers/PublicMilestoneController.php`
- `src/modules/Desenvolvimento/Demo/ModuleProvider.php`
- `src/modules/Desenvolvimento/Demo/Routes/cms.php`
- `src/modules/Desenvolvimento/Demo/Routes/portal.php`
- `src/modules/Desenvolvimento/Demo/Widgets/DemoStatusWidget.php`
- `src/modules/Exemplos/Blueprint/Database/Migrations/2026_10_15_000000_create_exemplos_blueprint_items_table.php`
- `src/modules/Exemplos/Blueprint/Database/Models/BlueprintItem.php`
- `src/modules/Exemplos/Blueprint/Lang/en/index.php`
- `src/modules/Exemplos/Blueprint/Lang/en/menu.php`
- `src/modules/Exemplos/Blueprint/Lang/es/index.php`
- `src/modules/Exemplos/Blueprint/Lang/es/menu.php`
- `src/modules/Exemplos/Blueprint/Lang/fr/index.php`
- `src/modules/Exemplos/Blueprint/Lang/fr/menu.php`
- `src/modules/Exemplos/Blueprint/Lang/pt_BR/index.php`
- `src/modules/Exemplos/Blueprint/Lang/pt_BR/menu.php`
- `src/modules/Exemplos/Blueprint/Layout/Views/blueprint-portal-index.blade.php`
- `src/modules/Exemplos/Blueprint/Logic/Actions/BlueprintSaudacaoAction.php`
- `src/modules/Exemplos/Blueprint/Logic/Controllers/BlueprintPortalController.php`
- `src/modules/Exemplos/Blueprint/ModuleProvider.php`
- `src/modules/Exemplos/Blueprint/Routes/portal.php`
- `src/modules/Exemplos/Blueprint/Test/BlueprintTest.php`
- `src/modules/Portal/DadosAbertos/Database/Migrations/2026_10_21_000000_create_dados_abertos_datasets_table.php`
- `src/modules/Portal/DadosAbertos/Database/Models/DadosAbertosDataset.php`
- `src/modules/Portal/DadosAbertos/Database/Seeders/DadosAbertosSeeder.php`
- `src/modules/Portal/DadosAbertos/Lang/en/cms.php`
- `src/modules/Portal/DadosAbertos/Lang/en/index.php`
- `src/modules/Portal/DadosAbertos/Lang/en/menu.php`
- `src/modules/Portal/DadosAbertos/Lang/en/show.php`
- `src/modules/Portal/DadosAbertos/Lang/es/cms.php`
- `src/modules/Portal/DadosAbertos/Lang/es/index.php`
- `src/modules/Portal/DadosAbertos/Lang/es/menu.php`
- `src/modules/Portal/DadosAbertos/Lang/es/show.php`
- `src/modules/Portal/DadosAbertos/Lang/fr/cms.php`
- `src/modules/Portal/DadosAbertos/Lang/fr/index.php`
- `src/modules/Portal/DadosAbertos/Lang/fr/menu.php`
- `src/modules/Portal/DadosAbertos/Lang/fr/show.php`
- `src/modules/Portal/DadosAbertos/Lang/pt_BR/cms.php`
- `src/modules/Portal/DadosAbertos/Lang/pt_BR/index.php`
- `src/modules/Portal/DadosAbertos/Lang/pt_BR/menu.php`
- `src/modules/Portal/DadosAbertos/Lang/pt_BR/show.php`
- `src/modules/Portal/DadosAbertos/Layout/Views/cms/form.blade.php`
- `src/modules/Portal/DadosAbertos/Layout/Views/cms/index.blade.php`
- `src/modules/Portal/DadosAbertos/Layout/Views/index.blade.php`
- `src/modules/Portal/DadosAbertos/Layout/Views/show.blade.php`
- `src/modules/Portal/DadosAbertos/Logic/Actions/DadosAbertosExport.php`
- `src/modules/Portal/DadosAbertos/Logic/Actions/DadosAbertosSave.php`
- `src/modules/Portal/DadosAbertos/Logic/Actions/DadosAbertosStatus.php`
- `src/modules/Portal/DadosAbertos/Logic/Controllers/Cms/DadosAbertosCreateController.php`
- `src/modules/Portal/DadosAbertos/Logic/Controllers/Cms/DadosAbertosDestroyController.php`
- `src/modules/Portal/DadosAbertos/Logic/Controllers/Cms/DadosAbertosEditController.php`
- `src/modules/Portal/DadosAbertos/Logic/Controllers/Cms/DadosAbertosIndexController.php`
- `src/modules/Portal/DadosAbertos/Logic/Controllers/Cms/DadosAbertosStatusController.php`
- `src/modules/Portal/DadosAbertos/Logic/Controllers/Cms/DadosAbertosStoreController.php`
- `src/modules/Portal/DadosAbertos/Logic/Controllers/Cms/DadosAbertosUpdateController.php`
- `src/modules/Portal/DadosAbertos/Logic/Controllers/DadosAbertosApiIndexController.php`
- `src/modules/Portal/DadosAbertos/Logic/Controllers/DadosAbertosExportController.php`
- `src/modules/Portal/DadosAbertos/Logic/Controllers/DadosAbertosIndexController.php`
- `src/modules/Portal/DadosAbertos/Logic/Controllers/DadosAbertosShowController.php`
- `src/modules/Portal/DadosAbertos/Logic/DTOs/DadosAbertosData.php`
- `src/modules/Portal/DadosAbertos/Logic/DTOs/DadosAbertosExportData.php`
- `src/modules/Portal/DadosAbertos/Logic/Requests/DadosAbertosSaveRequest.php`
- `src/modules/Portal/DadosAbertos/MODULE.md`
- `src/modules/Portal/DadosAbertos/ModuleProvider.php`
- `src/modules/Portal/DadosAbertos/Routes/api.php`
- `src/modules/Portal/DadosAbertos/Routes/cms.php`
- `src/modules/Portal/DadosAbertos/Routes/portal.php`
- `src/modules/Portal/DadosAbertos/Seo/DadosAbertosSchema.php`
- `src/modules/Portal/DadosAbertos/Seo/DadosAbertosSitemapSource.php`
- `src/modules/Portal/DadosAbertos/Test/DadosAbertosTest.php`
- `src/modules/Portal/Home/Lang/en/index.php`
- `src/modules/Portal/Home/Lang/es/index.php`
- `src/modules/Portal/Home/Lang/fr/index.php`
- `src/modules/Portal/Home/Lang/pt_BR/index.php`
- `src/modules/Portal/Home/Layout/Views/index.blade.php`
- `src/modules/Portal/Home/ModuleProvider.php`
- `src/modules/Portal/Home/Routes/portal.php`
- `src/modules/Portal/Home/Seo/HomeSitemapSource.php`
- `src/modules/Portal/Lgpd/Database/Migrations/2026_10_22_000000_create_lgpd_dsar_requests_table.php`
- `src/modules/Portal/Lgpd/Database/Models/LgpdDsarRequest.php`
- `src/modules/Portal/Lgpd/Lang/en/cms.php`
- `src/modules/Portal/Lgpd/Lang/en/index.php`
- `src/modules/Portal/Lgpd/Lang/en/menu.php`
- `src/modules/Portal/Lgpd/Lang/en/privacy.php`
- `src/modules/Portal/Lgpd/Lang/es/cms.php`
- `src/modules/Portal/Lgpd/Lang/es/index.php`
- `src/modules/Portal/Lgpd/Lang/es/menu.php`
- `src/modules/Portal/Lgpd/Lang/es/privacy.php`
- `src/modules/Portal/Lgpd/Lang/fr/cms.php`
- `src/modules/Portal/Lgpd/Lang/fr/index.php`
- `src/modules/Portal/Lgpd/Lang/fr/menu.php`
- `src/modules/Portal/Lgpd/Lang/fr/privacy.php`
- `src/modules/Portal/Lgpd/Lang/pt_BR/cms.php`
- `src/modules/Portal/Lgpd/Lang/pt_BR/index.php`
- `src/modules/Portal/Lgpd/Lang/pt_BR/menu.php`
- `src/modules/Portal/Lgpd/Lang/pt_BR/privacy.php`
- `src/modules/Portal/Lgpd/Layout/Views/cms/index.blade.php`
- `src/modules/Portal/Lgpd/Layout/Views/cms/show.blade.php`
- `src/modules/Portal/Lgpd/Layout/Views/index.blade.php`
- `src/modules/Portal/Lgpd/Layout/Views/privacy.blade.php`
- `src/modules/Portal/Lgpd/Layout/Views/received.blade.php`
- `src/modules/Portal/Lgpd/Logic/Actions/LgpdSubmitDsar.php`
- `src/modules/Portal/Lgpd/Logic/Actions/LgpdUpdateDsar.php`
- `src/modules/Portal/Lgpd/Logic/Controllers/Cms/LgpdIndexController.php`
- `src/modules/Portal/Lgpd/Logic/Controllers/Cms/LgpdShowController.php`
- `src/modules/Portal/Lgpd/Logic/Controllers/Cms/LgpdUpdateController.php`
- `src/modules/Portal/Lgpd/Logic/Controllers/LgpdDsarFormController.php`
- `src/modules/Portal/Lgpd/Logic/Controllers/LgpdDsarReceivedController.php`
- `src/modules/Portal/Lgpd/Logic/Controllers/LgpdDsarStoreController.php`
- `src/modules/Portal/Lgpd/Logic/Controllers/LgpdPrivacyController.php`
- `src/modules/Portal/Lgpd/Logic/DTOs/LgpdDsarData.php`
- `src/modules/Portal/Lgpd/Logic/Requests/LgpdDsarSubmitRequest.php`
- `src/modules/Portal/Lgpd/Logic/Requests/LgpdDsarUpdateRequest.php`
- `src/modules/Portal/Lgpd/MODULE.md`
- `src/modules/Portal/Lgpd/ModuleProvider.php`
- `src/modules/Portal/Lgpd/Retention/LgpdDsarRetention.php`
- `src/modules/Portal/Lgpd/Routes/cms.php`
- `src/modules/Portal/Lgpd/Routes/portal.php`
- `src/modules/Portal/Lgpd/Test/LgpdTest.php`
- `src/modules/Publicacoes/Noticias/Database/Migrations/2026_10_07_120000_create_noticias_table.php`
- `src/modules/Publicacoes/Noticias/Database/Migrations/2026_10_08_090000_add_media_data_to_noticias_table.php`
- `src/modules/Publicacoes/Noticias/Database/Migrations/2026_10_18_000000_convert_noticias_content_to_jsonb.php`
- `src/modules/Publicacoes/Noticias/Database/Models/Noticia.php`
- `src/modules/Publicacoes/Noticias/Database/Seeders/NoticiaSeeder.php`
- `src/modules/Publicacoes/Noticias/Lang/en/cms.php`
- `src/modules/Publicacoes/Noticias/Lang/en/embed.php`
- `src/modules/Publicacoes/Noticias/Lang/en/index.php`
- `src/modules/Publicacoes/Noticias/Lang/en/menu.php`
- `src/modules/Publicacoes/Noticias/Lang/en/show.php`
- `src/modules/Publicacoes/Noticias/Lang/es/cms.php`
- `src/modules/Publicacoes/Noticias/Lang/es/embed.php`
- `src/modules/Publicacoes/Noticias/Lang/es/index.php`
- `src/modules/Publicacoes/Noticias/Lang/es/menu.php`
- `src/modules/Publicacoes/Noticias/Lang/es/show.php`
- `src/modules/Publicacoes/Noticias/Lang/fr/cms.php`
- `src/modules/Publicacoes/Noticias/Lang/fr/embed.php`
- `src/modules/Publicacoes/Noticias/Lang/fr/index.php`
- `src/modules/Publicacoes/Noticias/Lang/fr/menu.php`
- `src/modules/Publicacoes/Noticias/Lang/fr/show.php`
- `src/modules/Publicacoes/Noticias/Lang/pt_BR/cms.php`
- `src/modules/Publicacoes/Noticias/Lang/pt_BR/embed.php`
- `src/modules/Publicacoes/Noticias/Lang/pt_BR/index.php`
- `src/modules/Publicacoes/Noticias/Lang/pt_BR/menu.php`
- `src/modules/Publicacoes/Noticias/Lang/pt_BR/show.php`
- `src/modules/Publicacoes/Noticias/Layout/Views/cms/form.blade.php`
- `src/modules/Publicacoes/Noticias/Layout/Views/cms/index.blade.php`
- `src/modules/Publicacoes/Noticias/Layout/Views/embed.blade.php`
- `src/modules/Publicacoes/Noticias/Layout/Views/index.blade.php`
- `src/modules/Publicacoes/Noticias/Layout/Views/partials/cover.blade.php`
- `src/modules/Publicacoes/Noticias/Layout/Views/show.blade.php`
- `src/modules/Publicacoes/Noticias/Logic/Actions/ChangeNoticiaStatus.php`
- `src/modules/Publicacoes/Noticias/Logic/Actions/SaveNoticia.php`
- `src/modules/Publicacoes/Noticias/Logic/Controllers/Cms/NoticiaCreateController.php`
- `src/modules/Publicacoes/Noticias/Logic/Controllers/Cms/NoticiaDestroyController.php`
- `src/modules/Publicacoes/Noticias/Logic/Controllers/Cms/NoticiaEditController.php`
- `src/modules/Publicacoes/Noticias/Logic/Controllers/Cms/NoticiaIndexController.php`
- `src/modules/Publicacoes/Noticias/Logic/Controllers/Cms/NoticiaStatusController.php`
- `src/modules/Publicacoes/Noticias/Logic/Controllers/Cms/NoticiaStoreController.php`
- `src/modules/Publicacoes/Noticias/Logic/Controllers/Cms/NoticiaUpdateController.php`
- `src/modules/Publicacoes/Noticias/Logic/Controllers/NoticiasEmbedController.php`
- `src/modules/Publicacoes/Noticias/Logic/Controllers/NoticiasExportController.php`
- `src/modules/Publicacoes/Noticias/Logic/Controllers/NoticiasShowController.php`
- `src/modules/Publicacoes/Noticias/Logic/Controllers/NoticiasWebController.php`
- `src/modules/Publicacoes/Noticias/Logic/DTOs/NoticiaData.php`
- `src/modules/Publicacoes/Noticias/Logic/Requests/SaveNoticiaRequest.php`
- `src/modules/Publicacoes/Noticias/MODULE.md`
- `src/modules/Publicacoes/Noticias/ModuleProvider.php`
- `src/modules/Publicacoes/Noticias/Routes/api.php`
- `src/modules/Publicacoes/Noticias/Routes/cms.php`
- `src/modules/Publicacoes/Noticias/Routes/portal.php`
- `src/modules/Publicacoes/Noticias/Seo/NoticiaSitemapSource.php`
- `src/modules/Publicacoes/Noticias/Test/NoticiaCmsTest.php`
- `src/modules/Publicacoes/Noticias/Test/NoticiaContentTest.php`


## E2E (Playwright + axe + sniff)

_( 57 arquivos )_

- `src/tests-e2e/.gitignore`
- `src/tests-e2e/README.md`
- `src/tests-e2e/histories/01-explorar-portal.md`
- `src/tests-e2e/histories/02-teclado-e-foco.md`
- `src/tests-e2e/histories/03-sem-javascript.md`
- `src/tests-e2e/histories/04-axe-wcag.md`
- `src/tests-e2e/histories/05-preferencias-a11y.md`
- `src/tests-e2e/histories/06-alvos-minimos.md`
- `src/tests-e2e/histories/07-cms-shell.md`
- `src/tests-e2e/histories/08-cms-noticias.md`
- `src/tests-e2e/histories/09-widgets-banners.md`
- `src/tests-e2e/histories/10-cms-layout.md`
- `src/tests-e2e/histories/11-performance.md`
- `src/tests-e2e/histories/12-dados-abertos.md`
- `src/tests-e2e/histories/13-lgpd.md`
- `src/tests-e2e/package-lock.json`
- `src/tests-e2e/package.json`
- `src/tests-e2e/playwright.config.ts`
- `src/tests-e2e/report/index.html`
- `src/tests-e2e/sniff/baseline/home.jsonl`
- `src/tests-e2e/sniff/current/20261017T022659Z-gate.jsonl`
- `src/tests-e2e/sniff/current/20261017T022704Z-gate.jsonl`
- `src/tests-e2e/sniff/current/20261017T064126Z-gate.jsonl`
- `src/tests-e2e/sniff/current/20261017T064128Z-gate.jsonl`
- `src/tests-e2e/sniff/current/20261017T065206Z-gate.jsonl`
- `src/tests-e2e/sniff/current/20261017T065208Z-gate.jsonl`
- `src/tests-e2e/sniff/current/20261017T095211Z-gate.jsonl`
- `src/tests-e2e/sniff/current/20261017T095214Z-gate.jsonl`
- `src/tests-e2e/sniff/current/20261017T100744Z-gate.jsonl`
- `src/tests-e2e/sniff/current/20261017T100745Z-gate.jsonl`
- `src/tests-e2e/sniff/current/20261017T102803Z-gate.jsonl`
- `src/tests-e2e/sniff/current/20261017T102806Z-gate.jsonl`
- `src/tests-e2e/sniff/current/20261017T113900Z-gate.jsonl`
- `src/tests-e2e/sniff/current/20261017T113903Z-gate.jsonl`
- `src/tests-e2e/sniff/current/20261017T115800Z-gate.jsonl`
- `src/tests-e2e/sniff/current/20261017T115802Z-gate.jsonl`
- `src/tests-e2e/sniff/current/20261017T123512Z-gate.jsonl`
- `src/tests-e2e/sniff/current/20261017T123514Z-gate.jsonl`
- `src/tests-e2e/sniff/current/20261017T130455Z-gate.jsonl`
- `src/tests-e2e/sniff/current/20261017T130505Z-gate.jsonl`
- `src/tests-e2e/test-results/.last-run.json`
- `src/tests-e2e/tests/01-explorar-portal.spec.ts`
- `src/tests-e2e/tests/02-teclado-e-foco.spec.ts`
- `src/tests-e2e/tests/03-no-js.spec.ts`
- `src/tests-e2e/tests/04-axe-wcag.spec.ts`
- `src/tests-e2e/tests/05-preferencias-a11y.spec.ts`
- `src/tests-e2e/tests/06-alvos-minimos.spec.ts`
- `src/tests-e2e/tests/07-cms-shell.spec.ts`
- `src/tests-e2e/tests/08-cms-noticias.spec.ts`
- `src/tests-e2e/tests/09-widgets-banners.spec.ts`
- `src/tests-e2e/tests/10-cms-layout.spec.ts`
- `src/tests-e2e/tests/11-performance.spec.ts`
- `src/tests-e2e/tests/12-dados-abertos.spec.ts`
- `src/tests-e2e/tests/13-lgpd.spec.ts`
- `src/tests-e2e/tests/support/axe.ts`
- `src/tests-e2e/tests/support/portal.ts`
- `src/tests-e2e/tsconfig.json`


## Testes de feature (gates estruturais)

_( 33 arquivos )_

- `tests/Feature/.gitkeep`
- `tests/Feature/Adr004GrepFriendlyTest.php`
- `tests/Feature/CmsAuthTest.php`
- `tests/Feature/CmsNavigationTest.php`
- `tests/Feature/CmsPartialsTest.php`
- `tests/Feature/CmsShellTest.php`
- `tests/Feature/ContentFontTest.php`
- `tests/Feature/CoreTelemetryTest.php`
- `tests/Feature/DesignTokensTest.php`
- `tests/Feature/EnvironmentConfigTest.php`
- `tests/Feature/I18nTest.php`
- `tests/Feature/IconTest.php`
- `tests/Feature/LayoutContractTest.php`
- `tests/Feature/LayoutEngineTest.php`
- `tests/Feature/LayoutShellTest.php`
- `tests/Feature/LocaleCastTest.php`
- `tests/Feature/LocaleUrlInvariantTest.php`
- `tests/Feature/LocalizedDateTest.php`
- `tests/Feature/MigrationIdempotencyTest.php`
- `tests/Feature/ModuleActivationTest.php`
- `tests/Feature/ModuleI18nTest.php`
- `tests/Feature/ModulesTelemetryTest.php`
- `tests/Feature/PerformanceBudgetTest.php`
- `tests/Feature/SeoSitemapTest.php`
- `tests/Feature/ServiceDiscoveryTest.php`
- `tests/Feature/ServicesTelemetryTest.php`
- `tests/Feature/StorageBucketTest.php`
- `tests/Feature/SupportGroupAccessTest.php`
- `tests/Feature/ThemeOverrideTest.php`
- `tests/Feature/ThemeResolverTest.php`
- `tests/Feature/WidgetRegistryTest.php`
- `tests/TestCase.php`
- `tests/Unit/SmokeTest.php`


## Ferramentas (gates)

_( 55 arquivos )_

- `tools/arch-check`
- `tools/assets-licenses-check.php`
- `tools/docs-check.sh`
- `tools/e2e.sh`
- `tools/gates-selftest.sh`
- `tools/licenses-check.php`
- `tools/migration-check`
- `tools/name-check.sh`
- `tools/optimize-check`
- `tools/phpstan-ratchet.sh`
- `tools/project-name.sh`
- `tools/sbom.php`
- `tools/sniff-gate.sh`
- `tools/sniff.sh`
- `tools/test-db.sh`
- `tools/tests/fixtures/arch/invalid/src/core/Bad.php`
- `tools/tests/fixtures/arch/modules-invalid/src/modules/Alpha/Logic/Alpha.php`
- `tools/tests/fixtures/arch/modules-invalid/src/modules/Alpha/ModuleProvider.php`
- `tools/tests/fixtures/arch/modules-invalid/src/modules/Beta/Logic/Beta.php`
- `tools/tests/fixtures/arch/modules-invalid/src/modules/Beta/ModuleProvider.php`
- `tools/tests/fixtures/arch/modules-valid/src/modules/Alpha/Logic/Alpha.php`
- `tools/tests/fixtures/arch/modules-valid/src/modules/Alpha/Logic/Helper.php`
- `tools/tests/fixtures/arch/modules-valid/src/modules/Alpha/ModuleProvider.php`
- `tools/tests/fixtures/arch/service-contract-valid/src/modules/Alpha/Logic/Alpha.php`
- `tools/tests/fixtures/arch/service-contract-valid/src/modules/Alpha/ModuleProvider.php`
- `tools/tests/fixtures/arch/service-impl-invalid/src/modules/Alpha/Logic/Alpha.php`
- `tools/tests/fixtures/arch/service-impl-invalid/src/modules/Alpha/ModuleProvider.php`
- `tools/tests/fixtures/arch/valid/src/core/Ok.php`
- `tools/tests/fixtures/arch/valid/src/services/Svc.php`
- `tools/tests/fixtures/assets-licenses/invalid/package-lock.json`
- `tools/tests/fixtures/assets-licenses/invalid/src/layout/Assets/fonts/LICENSE-OFL.txt`
- `tools/tests/fixtures/assets-licenses/invalid/src/layout/Assets/icons/README.md`
- `tools/tests/fixtures/assets-licenses/invalid/src/layout/Assets/icons/brand/youtube.svg`
- `tools/tests/fixtures/assets-licenses/invalid/src/layout/Assets/icons/lucide/home.svg`
- `tools/tests/fixtures/assets-licenses/invalid/src/services/Demo/Runner.php`
- `tools/tests/fixtures/assets-licenses/valid/package-lock.json`
- `tools/tests/fixtures/assets-licenses/valid/src/layout/Assets/fonts/LICENSE-OFL.txt`
- `tools/tests/fixtures/assets-licenses/valid/src/layout/Assets/icons/README.md`
- `tools/tests/fixtures/assets-licenses/valid/src/layout/Assets/icons/brand/youtube.svg`
- `tools/tests/fixtures/assets-licenses/valid/src/layout/Assets/icons/lucide/home.svg`
- `tools/tests/fixtures/migration/invalid/src/modules/X/Database/Migrations/2026_01_01_000000_create_bad_table.php`
- `tools/tests/fixtures/migration/valid/src/modules/X/Database/Migrations/2026_01_01_000000_create_x_table.php`
- `tools/tests/fixtures/name/invalid/src/modules/Exemplos/RelatorioFiscal/Database/Migrations/2026_01_01_000000_create_items_table.php`
- `tools/tests/fixtures/name/invalid/src/modules/Exemplos/RelatorioFiscal/Database/Models/Item.php`
- `tools/tests/fixtures/name/invalid/src/modules/Exemplos/RelatorioFiscal/Layouts/Views/index.blade.php`
- `tools/tests/fixtures/name/invalid/src/modules/Exemplos/RelatorioFiscal/Logic/Actions/Create.php`
- `tools/tests/fixtures/name/invalid/src/modules/Exemplos/RelatorioFiscal/ModuleProvider.php`
- `tools/tests/fixtures/name/invalid/src/modules/Exemplos/RelatorioFiscal/Test/ItemTest.php`
- `tools/tests/fixtures/name/valid/src/modules/Exemplos/RelatorioFiscal/Database/Migrations/2026_01_01_000000_create_relatorio_fiscal_items_table.php`
- `tools/tests/fixtures/name/valid/src/modules/Exemplos/RelatorioFiscal/Database/Models/RelatorioFiscalItem.php`
- `tools/tests/fixtures/name/valid/src/modules/Exemplos/RelatorioFiscal/Layouts/Views/relatorio-fiscal-index.blade.php`
- `tools/tests/fixtures/name/valid/src/modules/Exemplos/RelatorioFiscal/Logic/Actions/RelatorioFiscalPublicarAction.php`
- `tools/tests/fixtures/name/valid/src/modules/Exemplos/RelatorioFiscal/ModuleProvider.php`
- `tools/tests/fixtures/name/valid/src/modules/Exemplos/RelatorioFiscal/Test/RelatorioFiscalTest.php`
- `tools/vendor-check.sh`


## F6 — Deploy e operação (`up_prod.sh`, Postgres/PITR, comandos de operação)

_( 14 arquivos )_

- `up_prod.sh`
- `.gitlab-ci.yml`
- `.env.example` (`BACKUP_KEEP`/`BACKUP_OFFSITE`)
- `docker/postgres/postgresql.conf` (WAL/`archive_mode` — PITR)
- `docker/web/Caddyfile` · `docker/web/app.conf`
- `tools/pitr-drill.sh` · `tools/db-restore-drill.sh` · `tools/go-live-check.sh`
- `src/core/Internal/System/Storage/Console/PushDatabaseBackupCommand.php`
- `src/core/Internal/System/Storage/Console/PruneDatabaseBackupsCommand.php`
- `src/core/Area/Cms/Console/CreateUserCommand.php`
- `src/services/Seo/Console/RedirectCommand.php`
- `tests/Feature/{DeployPipelineTest,DatabaseBackupPushTest,DatabaseBackupRetentionTest,CmsUserCommandTest}.php`
- `wiki/runbooks/deploy-e-recuperacao.md` · `wiki/specs/17-up-prod.md`

## Wiki (ADRs, planos, specs, implementação, runbooks)

_( 81 arquivos )_

- `wiki/adr/ADR-001-nativo-funcional-di-simplicidade.md`
- `wiki/adr/ADR-002-minimas-dependencias-vendorizacao.md`
- `wiki/adr/ADR-003-raiz-laravel-src-dominio.md`
- `wiki/adr/ADR-004-grep-friendly-token-canonico.md`
- `wiki/adr/ADR-005-runtime-containers-edge-apache-whm.md`
- `wiki/adr/ADR-006-arquivos-bind-mount-local.md`
- `wiki/adr/ADR-007-postgresql-18-container.md`
- `wiki/adr/ADR-008-otimizacao-nativa-obrigatoria.md`
- `wiki/adr/ADR-009-ui-cms-proprio-tailwind-daisyui.md`
- `wiki/adr/ADR-010-web-moderna-semantica-minimo-js.md`
- `wiki/adr/ADR-011-tipografia-atkinson-hyperlegible-next.md`
- `wiki/adr/ADR-012-i18n-multilingue.md`
- `wiki/adr/ADR-013-ddd-lite-fronteira-fisica.md`
- `wiki/adr/ADR-014-autodescoberta-modulos-agrupamento.md`
- `wiki/adr/ADR-015-services-agnosticos-headless.md`
- `wiki/adr/ADR-016-tema-layout-como-dado.md`
- `wiki/adr/ADR-017-migrations-seguras-dados-desacoplados.md`
- `wiki/adr/ADR-018-dados-abertos.md`
- `wiki/adr/ADR-019-lgpd-programa.md`
- `wiki/adr/ADR-020-seguranca-web-moderna.md`
- `wiki/adr/ADR-021-rate-limiting-hardening.md`
- `wiki/adr/ADR-022-cache-resposta-etag-csrf.md`
- `wiki/adr/ADR-023-qualidade-phpstan-max-ratchet.md`
- `wiki/adr/ADR-024-observabilidade-nativa-json-rfc7807.md`
- `wiki/adr/ADR-025-acessibilidade-gate-ci.md`
- `wiki/adr/ADR-026-media-gallery-picture.md`
- `wiki/adr/ADR-027-seo-service-dados-estruturados.md`
- `wiki/adr/ADR-028-editor-rico-tiptap.md`
- `wiki/adr/ADR-029-blake3-integridade-auditoria.md`
- `wiki/adr/ADR-030-object-storage-s3-rustfs.md`
- `wiki/adr/ADR-031-imagens-bases-pinadas.md`
- `wiki/adr/ADR-032-perfis-de-ambiente.md`
- `wiki/adr/ADR-033-controle-acesso-permissoes-perfis-suporte.md`
- `wiki/adr/ADR-034-ativacao-modulos-tempo-real.md`
- `wiki/adr/ADR-035-trilha-de-auditoria-e-evidencias.md`
- `wiki/adr/ADR-036-shell-cms-como-dado.md`
- `wiki/adr/ADR-037-autenticacao-do-cms.md`
- `wiki/adr/README.md`
- `wiki/implementation/00-importacao-concordia.md`
- `wiki/implementation/01-fundacao.md`
- `wiki/implementation/02-nucleo-ddd-lite.md`
- `wiki/implementation/02b-auditoria-e-evidencias.md`
- `wiki/implementation/03-layout-ux.md`
- `wiki/implementation/04-produto-cms.md`
- `wiki/implementation/05-borda.md`
- `wiki/implementation/06-deploy-migracao.md`
- `wiki/implementation/README.md`
- `wiki/plan/00-index.md`
- `wiki/plan/01-analise-e-decisoes.md`
- `wiki/plan/02-governanca-ia-first.md`
- `wiki/plan/03-esqueleto-ddd-lite.md`
- `wiki/plan/04-runtime-containers.md`
- `wiki/plan/05-qualidade-phpstan-max.md`
- `wiki/plan/06-observabilidade-day-zero.md`
- `wiki/plan/07-core-contratos-discovery.md`
- `wiki/plan/08-servicos-headless-persistencia.md`
- `wiki/plan/09-design-system-daisyui.md`
- `wiki/plan/10-layout-engine-slots.md`
- `wiki/plan/11-acessibilidade-ux-gate.md`
- `wiki/plan/12-admin-cms-editor.md`
- `wiki/plan/13-modulo-piloto-blueprint.md`
- `wiki/plan/14-seo-performance.md`
- `wiki/plan/15-cicd-deploy-legado.md`
- `wiki/plan/16-front-builder-widgets-banners.md`
- `wiki/plan/17-dados-abertos-lgpd-governanca.md`
- `wiki/plan/18-otimizacao-resposta-hardening.md`
- `wiki/plan/19-media-gallery.md`
- `wiki/runbooks/anpd-incidentes.md`
- `wiki/specs/04-acessibilidade-ux.md`
- `wiki/specs/06-observabilidade.md`
- `wiki/specs/08-ia-e-qualidade.md`
- `wiki/specs/09-grep-friendly.md`
- `wiki/specs/10-migracoes-e-dados.md`
- `wiki/specs/11-acesso-e-ativacao.md`
- `wiki/specs/12-postgres-18.md`
- `wiki/specs/13-i18n.md`
- `wiki/specs/14-auditoria.md`
- `wiki/specs/16-edge-apache-whm.md`
- `wiki/specs/17-up-prod.md`
- `wiki/specs/18-repo-higiene-e-nome.md`
- `wiki/specs/README.md`

## Core — Settings (P0.S1)

_( 5 arquivos )_

- `src/core/Contracts/Settings.php`
- `src/core/Settings/SettingsSchema.php`
- `src/core/Settings/Test/SettingsSchemaTest.php`
- `src/core/Internal/Settings/Database/Migrations/2026_10_23_000004_create_core_settings_table.php`
- `src/core/Internal/Settings/Test/SettingsTableTest.php`

## Core — Settings (P0.S2)

_( 9 arquivos )_

- `src/core/Contracts/Settings.php`
- `src/core/Settings/UnknownSettingsSection.php`
- `src/core/Settings/SettingsValueInvalid.php`
- `src/core/Internal/Settings/DatabaseSettings.php`
- `src/core/Internal/Settings/SecretPayload.php`
- `src/core/Internal/Settings/Console/ShowSettingsCommand.php`
- `src/core/Internal/Settings/Test/DatabaseSettingsTest.php`
- `src/core/Internal/Settings/Test/SecretPayloadTest.php`
- `src/core/Internal/Settings/Test/ShowSettingsCommandTest.php`

## Infraestrutura — Configurações (P0.S3)

_( 15 arquivos )_

- `src/modules/Infraestrutura/Configuracoes/ModuleProvider.php`
- `src/modules/Infraestrutura/Configuracoes/Routes/cms.php`
- `src/modules/Infraestrutura/Configuracoes/Logic/ConfiguracoesSections.php`
- `src/modules/Infraestrutura/Configuracoes/Logic/Controllers/Cms/ConfiguracoesIndexController.php`
- `src/modules/Infraestrutura/Configuracoes/Logic/Controllers/Cms/ConfiguracoesEditController.php`
- `src/modules/Infraestrutura/Configuracoes/Logic/Controllers/Cms/ConfiguracoesUpdateController.php`
- `src/modules/Infraestrutura/Configuracoes/Logic/Requests/UpdateConfiguracoesRequest.php`
- `src/modules/Infraestrutura/Configuracoes/Layout/Views/cms/index.blade.php`
- `src/modules/Infraestrutura/Configuracoes/Layout/Views/cms/form.blade.php`
- `src/modules/Infraestrutura/Configuracoes/Test/ConfiguracoesCmsTest.php`
- `src/core/Lang/{pt_BR,en,es,fr}/settings.php`
- `src/layout/Cms/components/form-group.blade.php`
- `src/layout/Lang/{pt_BR,en,es,fr}/shell.php`
- `src/tests-e2e/tests/17-cms-configuracoes.spec.ts`
- `src/tests-e2e/playwright.config.ts`

## Layout — primitivas do CMS (P0.S4)

_( 4 componentes + JS + testes )_

- `src/layout/Cms/components/fieldset.blade.php`
- `src/layout/Cms/components/form-errors.blade.php`
- `src/layout/Cms/components/confirm.blade.php`
- `src/layout/Cms/components/data-table.blade.php`
- `src/layout/Cms/Assets/js/app.js`
- `tests/Feature/CmsPartialsTest.php`

## P0 — fundação do painel (fase)

_( 5 fichas de fatia + fechamento )_

- `wiki/implementation-phases/P0-fundacao-painel.md`
- `src/core/Internal/Settings/**`
- `src/modules/Infraestrutura/Configuracoes/**`
- `src/layout/Cms/components/{fieldset,form-errors,confirm,data-table}.blade.php`
- `tests/Feature/CmsPartialsTest.php`

## P2 — gestão de perfis e usuários (fase)

_( S1–S6 + ficha de revisão )_

- `wiki/implementation-phases/P2-usuarios-perfis.md`
- `src/core/Access/{PermissionCatalog,AccessPolicy}.php`
- `src/core/Area/Cms/Database/Migrations/2026_10_24_000000_add_deactivated_at_and_email_uniqueness_to_cms_users_table.php`
- `src/core/Internal/Http/Middleware/EnsureActiveUser.php`
- `src/modules/Infraestrutura/Acesso/**`
- `src/tests-e2e/tests/{19-cms-usuarios,20-cms-papeis,21-cms-perfil,22-cms-acesso-mobile}.spec.ts`
- `_to_revision/P2-usuarios-perfis.md`

## P3 — área de suporte (fatias S1–S7)

_( S1–S7 + ficha de revisão; status 🟡 em revisão — revisão paralela pendente )_

- `wiki/implementation-phases/P3-suporte-ativacao.md`
- `src/modules/Suporte/Painel/**`
- `src/core/Internal/Navigation/{PanelMenu.php,Test/PanelMenuTest.php}`
- `src/core/Internal/Diagnostics/**`
- `src/core/Internal/Audit/{DTOs/AuditFilters.php,DTOs/AuditCursor.php,DTOs/AuditPage.php,Services/AuditLogReader.php}`
- `src/core/Internal/Audit/Database/Migrations/2026_10_25_000000_add_reader_indexes_to_core_audit_logs.php`
- `config/audit.php`
- `src/core/Internal/Audit/Test/AuditLogReaderTest.php`
- `src/core/Internal/System/{SystemVersion.php,Storage/S3BucketProbe.php,Storage/S3ClientFactory.php}`
- `src/core/Lang/{pt_BR,en,es,fr}/diagnostics.php`
- `config/diagnostics.php`
- `src/core/Internal/Maintenance/**`
- `src/core/Internal/Http/Middleware/EnforceMaintenanceMode.php`
- `src/core/Internal/Routing/AreaRegistrar.php`
- `src/core/Settings/SettingsSchema.php`
- `src/core/Lang/{pt_BR,en,es,fr}/{maintenance.php,settings.php}`
- `resources/views/errors/maintenance.blade.php`
- `tests/Feature/MaintenanceModeTest.php`
- `src/modules/Infraestrutura/Configuracoes/{Logic/ConfiguracoesSections.php,Layout/Views/cms/form.blade.php,MODULE.md}`
- `src/modules/Infraestrutura/Configuracoes/Lang/{pt_BR,en,es,fr}/cms.php`
- `src/modules/Suporte/Painel/Logic/{Actions/PainelContactAction.php,Controllers/Cms/PainelContactController.php,DTOs/PainelContact.php}`
- `src/modules/Suporte/Painel/Layout/Views/cms/painel-contato.blade.php`
- `src/modules/Suporte/Painel/Lang/{pt_BR,en,es,fr}/contact.php`
- `src/modules/Suporte/Painel/Test/PainelContactCmsTest.php`
- `src/tests-e2e/{playwright.config.ts,tests/23-suporte-painel.spec.ts,support/cms.ts}`
- `src/tests-e2e/histories/23-suporte-painel.md`
- `_to_revision/P3-suporte-ativacao.md`

## P4 — estatísticas (fatia S1)

- `wiki/adr/ADR-047-metricas-privacy-first.md` (conferida: aceita e indexada)
- `src/core/Contracts/{Metrics.php,MetricRegistry.php,UniqueCounter.php,README.md}`
- `src/core/Contracts/Ports/{MetricCard.php,README.md}`
- `src/core/Metrics/{MetricBucket.php,MetricsPeriod.php,MetricsFilter.php,DailyMetric.php,RouteMetric.php,ModuleMetric.php,StatusMetrics.php}`
- `src/core/Metrics/Exceptions/{InvalidMetricBucket.php,InvalidMetricsPeriod.php,InvalidMetricsFilter.php,InvalidUniqueInput.php,DuplicateMetricCard.php}`
- `src/core/Metrics/Test/{MetricBucketTest.php,MetricsPeriodTest.php}`
- `src/core/Internal/Metrics/{DatabaseMetrics.php,InMemoryMetricRegistry.php,InMemoryUniqueCounter.php,ValkeyUniqueCounter.php,UniqueInput.php,MetricsRetention.php,README.md}`
- `src/core/Internal/Metrics/Console/ExpungeMetricsCommand.php`
- `src/core/Internal/Metrics/Database/Migrations/2026_10_25_000001_create_core_metrics_daily_table.php`
- `src/core/Internal/Metrics/Test/{MetricsSchemaTest.php,DatabaseMetricsTest.php,MetricRegistryTest.php,UniqueCounterTest.php,MetricsRetentionTest.php,MetricsBindingsTest.php}`
- `src/core/Internal/Metrics/Test/Support/{FakeUsersCard.php,FakeNewsCard.php,FakeAuditCard.php,FakeDuplicateUsersCard.php,RecordingRedisConnection.php,RecordingRedisFactory.php}`
- `src/core/CoreServiceProvider.php` (binds, migração, comando, alvo de retenção)
- `config/metrics.php`, `config/_OTHER_CONFIGS.md`, `phpunit.xml`

## P4 — estatísticas (fatia S2)

- `src/core/Internal/Metrics/Http/Middleware/CollectRequestMetric.php`
- `src/core/Internal/Metrics/BotClassifier.php`
- `src/core/Internal/Http/Controllers/NotFoundController.php`
- `src/core/Internal/Routing/AreaRegistrar.php` (alias `metrics.collect` por área + fallback portal/API)
- `src/core/CoreServiceProvider.php` (alias do middleware)
- `src/core/Localization/LocaleRoutes.php` (fallback não é rota viva)
- `src/services/Seo/Http/Middleware/RedirectLegacy.php` (fallback não sombreia o redirect legado)
- `src/core/Internal/Metrics/Test/{MetricsIngestionTest.php,Support/ThrowingMetrics.php,Support/ThrowingUniqueCounter.php}`
- `config/metrics.php` (pepper/versão), `config/_OTHER_CONFIGS.md`, `.env.example`, `phpunit.xml`
- `src/core/Internal/Metrics/README.md`

## P4 — estatísticas (fatia S3)

- `src/core/Area/Cms/Logic/Actions/ResolveDashboardCards.php`
- `src/core/Area/Cms/Logic/DTOs/ResolvedMetricCard.php`
- `src/core/Area/Cms/Logic/Cards/{ActiveUsersCard.php,ActiveModulesCard.php,AuditEventsCard.php,PortalRequestsCard.php}`
- `src/core/Area/Cms/Logic/Controllers/CmsDashboardController.php`
- `src/core/Area/Cms/Test/Support/{ThrowingMetricCard.php,CountingMetricCard.php}`
- `src/core/Lang/{pt_BR,en,es,fr}/cards.php`
- `src/core/CoreServiceProvider.php` (registro dos cards Core + namespace `core`)
- `src/layout/Cms/dashboard.blade.php`
- `src/modules/Publicacoes/Noticias/{ModuleProvider.php,Logic/Cards/NoticiasPublishedCard.php,Logic/Cards/NoticiasDraftsCard.php,Lang/{pt_BR,en,es,fr}/cards.php}`
- `src/modules/Portal/DadosAbertos/{ModuleProvider.php,Logic/Cards/DadosAbertosDatasetsCard.php,Lang/{pt_BR,en,es,fr}/cards.php}`
- `src/modules/Portal/Lgpd/{ModuleProvider.php,Logic/Cards/LgpdOpenDsarsCard.php,Lang/{pt_BR,en,es,fr}/cards.php}`
- `src/core/Internal/Metrics/{README.md,Test/MetricRegistryTest.php,Test/MetricsBindingsTest.php}`
- `src/core/Contracts/Ports/README.md`
- `tests/Feature/DashboardCardsTest.php`
- `src/modules/Publicacoes/Noticias/Test/NoticiasMetricCardsTest.php`
- `src/modules/Portal/DadosAbertos/Test/DadosAbertosMetricCardTest.php`
- `src/modules/Portal/Lgpd/Test/LgpdMetricCardTest.php`

## P4 — estatísticas (fatia S4)

- `src/modules/Infraestrutura/Estatisticas/{ModuleProvider.php,MODULE.md,Routes/cms.php}`
- `src/modules/Infraestrutura/Estatisticas/Logic/Actions/{EstatisticasOverviewReport.php,EstatisticasRouteRanking.php,EstatisticasModuleTrends.php,EstatisticasContentCards.php}`
- `src/modules/Infraestrutura/Estatisticas/Logic/Controllers/{EstatisticasIndexController.php,EstatisticasPagesController.php,EstatisticasModulesController.php,EstatisticasContentController.php}`
- `src/modules/Infraestrutura/Estatisticas/Logic/DTOs/EstatisticasFilter.php`
- `src/modules/Infraestrutura/Estatisticas/Logic/Support/{EstatisticasFilterParser.php,EstatisticasCache.php,EstatisticasSortLinks.php,EstatisticasModuleLabels.php}`
- `src/modules/Infraestrutura/Estatisticas/Layout/Views/cms/{estatisticas-index,estatisticas-paginas,estatisticas-modulos,estatisticas-conteudo}.blade.php`
- `src/modules/Infraestrutura/Estatisticas/Layout/Views/cms/partials/estatisticas-filter.blade.php`
- `src/modules/Infraestrutura/Estatisticas/Lang/{pt_BR,en,es,fr}/{menu,cms,validation,modules}.php`
- `src/modules/Infraestrutura/Estatisticas/Test/{EstatisticasCmsTest.php,EstatisticasI18nTest.php}`
- `tests/Feature/EstatisticasContentTest.php`

## P4 — estatísticas (fatia S5)

- `src/modules/Infraestrutura/Estatisticas/Logic/Actions/{EstatisticasCsvExport.php,EstatisticasRouteRanking.php}` (`rows()`)
- `src/modules/Infraestrutura/Estatisticas/Logic/Controllers/EstatisticasExportController.php`
- `src/modules/Infraestrutura/Estatisticas/Logic/Support/EstatisticasCsv.php`
- `src/modules/Infraestrutura/Estatisticas/{Routes/cms.php,MODULE.md}`
- `src/modules/Infraestrutura/Estatisticas/Layout/Views/cms/partials/estatisticas-filter.blade.php`
- `src/modules/Infraestrutura/Estatisticas/Lang/{pt_BR,en,es,fr}/cms.php`
- `src/modules/Infraestrutura/Estatisticas/Test/EstatisticasExportTest.php`
- `routes/console.php`, `src/core/Internal/Metrics/{README.md,Test/MetricsRetentionTest.php}`
- `tests/Feature/RetentionScheduleTest.php`
- `src/modules/Portal/Lgpd/Lang/{pt_BR,en,es,fr}/privacy.php`, `src/modules/Portal/Lgpd/Layout/Views/privacy.blade.php`, `src/modules/Portal/Lgpd/Test/LgpdTest.php`
- `src/tests-e2e/{playwright.config.ts,README.md,histories/24-estatisticas.md,tests/24-estatisticas.spec.ts}`
- `AGENTS.md`, `wiki/specs/04-acessibilidade-ux.md`

## P4 — estatísticas (P4.FIX — correções da revisão paralela)

- `src/core/Internal/Metrics/{ValkeyUniqueCounter.php,BotClassifier.php,README.md}`
- `src/core/Internal/Metrics/Test/{UniqueCounterTest.php,MetricsIngestionTest.php,MetricsRetentionTest.php,BotClassifierTest.php}`
- `src/core/Internal/Metrics/Test/Support/RecordingRedisConnection.php`
- `src/core/Internal/Metrics/Http/Middleware/CollectRequestMetric.php`
- `src/core/Area/Cms/Logic/{Actions/ResolveDashboardCards.php,DTOs/ResolvedMetricCard.php,Cards/PortalRequestsCard.php}`
- `src/core/Area/Cms/Test/Support/{ThrowingUrlCard.php,ThrowingLabelCard.php}`
- `src/layout/Cms/dashboard.blade.php`, `config/metrics.php`, `config/_OTHER_CONFIGS.md`
- `src/modules/Publicacoes/Noticias/Logic/Cards/NoticiasPublishedCard.php`,
  `src/modules/Publicacoes/Noticias/Test/NoticiasMetricCardsTest.php`
- `src/modules/Portal/DadosAbertos/Logic/Cards/DadosAbertosDatasetsCard.php`,
  `src/modules/Portal/DadosAbertos/Test/DadosAbertosMetricCardTest.php`
- `src/modules/Infraestrutura/Estatisticas/Logic/{Actions/EstatisticasOverviewReport.php,Actions/EstatisticasCsvExport.php,Controllers/EstatisticasPagesController.php,Controllers/EstatisticasExportController.php,Support/EstatisticasSortLinks.php,Support/EstatisticasCsv.php}`
- `src/modules/Infraestrutura/Estatisticas/Layout/Views/cms/{estatisticas-index,estatisticas-conteudo}.blade.php`,
  `src/modules/Infraestrutura/Estatisticas/Lang/{pt_BR,en,es,fr}/cms.php`,
  `src/modules/Infraestrutura/Estatisticas/{MODULE.md,Test/EstatisticasCmsTest.php,Test/EstatisticasExportTest.php}`
- `src/modules/Portal/Lgpd/Logic/Controllers/LgpdPrivacyController.php`,
  `src/modules/Portal/Lgpd/Layout/Views/privacy.blade.php`,
  `src/modules/Portal/Lgpd/Lang/{pt_BR,en,es,fr}/privacy.php`, `src/modules/Portal/Lgpd/Test/LgpdTest.php`
- `tests/Feature/{DashboardCardsTest.php,RetentionScheduleTest.php}`
- `src/tests-e2e/tests/24-estatisticas.spec.ts`
- `wiki/implementation-phases/{P4-estatisticas.md,README.md,INVENTARIO.md}`, `_to_revision/README.md`, esta ficha

## P5 — composição do site (fase S1.1→S6.2)

_( fase revisada — 12 sub-fatias + `P5.FIX`/`P5.FIX2`; ficha `_to_revision/P5-composicao-site.md`; status ✅ revisado em 2026-10-26 )_

### S1.1/S1.2 — catálogo de blocos, schema, parser e renderizador

- `wiki/adr/ADR-016-tema-layout-como-dado.md` (emendas 2026-10-25: catálogo de 12 blocos; locales/publicação/preview)
- `src/layout/Blocks/{BlockType,BlockField,BlockDefinition,BlockCatalog,BlockSection,BlocksDocument,BlocksSchema,ParseHomepage,HomepageDefault,BlockLocalizer,BlockRoute,BlockMediaResolver}.php`
- `src/layout/Components/blocks.blade.php` + `src/layout/Components/blocks/*.blade.php` (12 blocos)
- `src/layout/Lang/{pt_BR,en,es,fr}/blocks.php`
- `src/layout/Test/{BlocksCatalogTest,BlocksSchemaTest,ParseHomepageTest,BlocksEditorValidationTest}.php`
- `tests/Feature/{BlocksComponentsTest,BlocksRendererTest,BlockMediaTest}.php`
- `config/layout.php` (`home.published_ttl`/`home.preview_ttl`; a entrada transitória `home.document` saiu na S2.2)

### S2.1/S2.2 — módulo `Portal/Home`: editor, publicação, prévia e locales

- `src/modules/Portal/Home/{ModuleProvider.php,Routes/{portal,cms}.php,MODULE.md}`
- `src/modules/Portal/Home/Database/{Migrations/2026_10_25_000000_create_home_documents_table.php,Models/HomeDocument.php}`
- `src/modules/Portal/Home/Logic/Actions/{SaveHomeDraft,PublishHome}.php`
- `src/modules/Portal/Home/Logic/Controllers/HomepageController.php`
- `src/modules/Portal/Home/Logic/Controllers/Cms/{HomeEditorController,HomeDraftSaveController,HomePublishController,HomePreviewController}.php`
- `src/modules/Portal/Home/Logic/Requests/SaveHomeDraftRequest.php`
- `src/modules/Portal/Home/Logic/Support/{HomeDraftSections,HomeDraftReader,PublishedHomepage,HomePreviewDocument}.php`
- `src/modules/Portal/Home/Logic/Exceptions/HomeDraftConflict.php`
- `src/modules/Portal/Home/Layout/Views/{index,home-preview}.blade.php` + `cms/{index,partials/home-block-fields,partials/home-block-field}.blade.php`
- `src/modules/Portal/Home/Lang/{pt_BR,en,es,fr}/cms.php`
- `src/modules/Portal/Home/Assets/js/home-editor.js` (`vite.config.js`, `tests/Feature/PerformanceBudgetTest.php`)
- `src/layout/Cms/Assets/css/shell.css` (`@media (scripting: none)` do `<dialog>` de módulo)
- `src/modules/Portal/Home/Test/{HomeEditorCmsTest,HomePublishPreviewCmsTest}.php`
- `src/layout/Test/BlocksEditorValidationTest.php`
- `tests/Feature/HomeModuleTest.php`, `src/core/Access/Test/PermissionCatalogTest.php`

### S3.1/S3.2 — módulo `Portal/Paginas`

- `src/modules/Portal/Paginas/{ModuleProvider.php,Routes/cms.php,Routes/portal-fallback.php,MODULE.md}`
- `src/modules/Portal/Paginas/Database/{Migrations/2026_10_25_000001_create_paginas_pages_table.php,Models/Pagina.php}`
- `src/modules/Portal/Paginas/Logic/Enums/PaginaStatus.php`
- `src/modules/Portal/Paginas/Logic/Actions/{SavePagina,TransitionPagina}.php`
- `src/modules/Portal/Paginas/Logic/Controllers/PaginaShowController.php` + `Controllers/Cms/{PaginaIndex,PaginaCreate,PaginaEdit,PaginaStore,PaginaUpdate,PaginaPublish,PaginaUnpublish,PaginaArchive,PaginaPreview}Controller.php`
- `src/modules/Portal/Paginas/Logic/Requests/SavePaginaRequest.php`, `Logic/DTOs/{PaginaData,PaginaRenderData}.php`
- `src/modules/Portal/Paginas/Logic/Support/{PaginaSlug,PaginaReservedSlugs,PaginaContent,PaginaSeo,PaginaFormState,PaginaRenderer,PaginaCache}.php`
- `src/modules/Portal/Paginas/Logic/Exceptions/PaginaTransitionConflict.php`
- `src/modules/Portal/Paginas/Seo/PaginaSitemapSource.php`
- `src/modules/Portal/Paginas/Layout/Views/{show,cms/index,cms/form}.blade.php` + `Lang/{pt_BR,en,es,fr}/{index,cms}.php`
- `src/modules/Portal/Paginas/Test/{PaginaCmsTest,PaginaSchemaTest,PaginaSlugTest,PaginaPortalTest}.php`
- `src/core/Localization/LocalizedTextCast.php`, `tests/Feature/LocalizedTextCastTest.php`
- `src/core/Internal/Routing/AreaRegistrar.php`, `src/core/Enums/PlatformArea.php`, `src/core/Area/Portal/README.md`
- `src/services/Seo/{Http/Middleware/RedirectLegacy.php,README.md}`, `config/paginas.php`

### S4.1/S4.2 — módulo `Portal/Destaques` e o widget de banner

- `src/modules/Portal/Destaques/{ModuleProvider.php,Routes/cms.php,MODULE.md,Widgets/DestaqueBannerWidget.php}`
- `src/modules/Portal/Destaques/Database/{Migrations/2026_10_26_043244_create_destaques_destaques_table.php,Models/Destaque.php}`
- `src/modules/Portal/Destaques/Logic/Enums/{DestaqueSlot,DestaqueState}.php`
- `src/modules/Portal/Destaques/Logic/Actions/{SaveDestaque,SetDestaqueActive,ArchiveDestaque}.php`
- `src/modules/Portal/Destaques/Logic/Controllers/Cms/{DestaquesIndex,DestaqueCreate,DestaqueEdit,DestaqueStore,DestaqueUpdate,DestaqueActivate,DestaqueDeactivate,DestaqueArchive}Controller.php`
- `src/modules/Portal/Destaques/Logic/Requests/SaveDestaqueRequest.php`, `Logic/DTOs/{DestaqueData,DestaqueBannerItem}.php`
- `src/modules/Portal/Destaques/Logic/Support/{DestaqueLink,DestaqueWindow,DestaqueFormState,DestaqueSlotFeed,DestaqueSlotCache,DestaqueSlotLimit}.php`
- `src/modules/Portal/Destaques/Layout/Views/cms/{index,form}.blade.php` + `Layout/Views/widgets/destaques-banner.blade.php`
- `src/modules/Portal/Destaques/Lang/{pt_BR,en,es,fr}/{index,menu,cms,widget}.php`
- `src/modules/Portal/Destaques/Test/{DestaquesCmsTest,DestaquesSchemaTest,DestaqueLinkTest,DestaqueWindowTest,DestaqueBannerWidgetTest}.php`
- `config/destaques.php`
- `src/layout/Components/{widget,slot,portal}.blade.php`
- `src/services/Gallery/{Contracts/GalleryStore.php,DTOs/GalleryMediaView.php,GalleryService.php}` (`views()`/`sources`)

### S5.1/S5.2 — fontes reais de widget e `/cms/layout`

- `src/modules/Publicacoes/Noticias/Widgets/{NoticiasUltimasWidget,NoticiasMaisLidasWidget}.php`
- `src/modules/Publicacoes/Noticias/Logic/Support/NoticiasWidgetFeed.php` + `Layout/Views/widgets/{noticias-ultimas,noticias-mais-lidas}.blade.php`
- `src/modules/Portal/DadosAbertos/{Widgets/DadosAbertosUltimosWidget.php,Logic/Support/DadosAbertosWidgetFeed.php,Layout/Views/widgets/dadosabertos-ultimos.blade.php}`
- `src/modules/Portal/Home/{Widgets/HomeQuickLinksWidget.php,Logic/Support/HomeQuickLinks.php,Layout/Views/widgets/home-quick-links.blade.php}`
- `src/modules/*/Lang/{pt_BR,en,es,fr}/widget.php` (Notícias, Dados Abertos, Home)
- `config/{noticias,dados_abertos,home}.php`
- `src/core/Contracts/WidgetRegistry.php`, `src/core/Internal/Widgets/InMemoryWidgetRegistry.php` (`owner()`, ativação memorizada, log)
- `src/services/Layout/{Support/WidgetInventory.php,Actions/ResolveLayoutPlacements.php,Http/Controllers/Cms/LayoutProfileIndexController.php,View/cms/index.blade.php,Lang/{pt_BR,en,es,fr}/cms.php,README.md}`
- `tests/Feature/{WidgetRegistryTest,WidgetSlotCompositionTest,CmsThrottleIsolationTest}.php`
- `src/services/Layout/Test/{LayoutWidgetsTest,LayoutAreaTest}.php`
- `src/modules/*/Test/{NoticiasWidgetsTest,DadosAbertosWidgetTest,HomeQuickLinksWidgetTest}.php`
- `src/modules/Portal/{Home,Paginas,Destaques}/Routes/cms.php`, `src/services/{Media,RichText}/Routes/cms.php` (balde de throttle por família)
- `tools/coverage-parallel.sh`, `tests/Feature/CheckPipelineTest.php`

### S6.1/S6.2 — E2E, axe, perf, fechamento

- `src/tests-e2e/tests/{16-cms-mobile,25-cms-editor-home,26-cms-publicacao-home,27-cms-paginas,28-cms-paginas-portal,29-cms-destaques,30-cms-widgets-slots,31-cms-home-composicao,32-cms-banner-vigencia}.spec.ts`
- `src/tests-e2e/tests/support/{home.ts,media.ts}`
- `src/tests-e2e/histories/{25-editor-home,26-publicacao-previa-home,27-cms-paginas,28-portal-paginas,29-cms-destaques,30-widgets-slots,31-home-composicao,32-banner-vigencia-modulo-inativo}.md`
- `src/tests-e2e/{playwright.config.ts,README.md}`
- `src/layout/Cms/Assets/css/shell.css` (cabeçalho com `flex-wrap`), `src/services/Layout/View/cms/index.blade.php` (`x-cms::table`)
- `wiki/specs/04-acessibilidade-ux.md`, `AGENTS.md` (contagem de histórias = 32)
- `wiki/implementation-phases/{P5-composicao-site.md,README.md,INVENTARIO.md}`, `_to_revision/{README.md,P5-composicao-site.md}`

## P5.5 — motor de dados abertos (fase S1→S6.2)

_(revisado em 2026-10-26; ficha `_to_revision/P5.5-motor-dados-abertos.md`; status ✅)_

- `src/core/Contracts/Ports/DatasetSource.php`, `src/core/Contracts/Ports/Data/*`
- `src/core/Contracts/{DatasetRegistry,ModuleStatus}.php`, `src/core/Internal/Datasets/**`, `src/core/Internal/ModuleDiscovery/ManifestModuleStatus.php`
- `src/core/CoreServiceProvider.php`, `src/core/Contracts/Test/ContractsBindingTest.php`
- `src/services/OpenData/**` (provider, contracts, serializer, array source/factory, export action, exceptions, tests + gate `DatasetIntegrationTest`)
- `src/modules/Portal/DadosAbertos/` (migração `add_source_*`, model, DTOs, request, save/export, present, controllers, SEO, views, 4 locales, tests)
- `src/tests-e2e/tests/33-cms-dados-abertos-fonte.spec.ts`, `src/tests-e2e/histories/33-dados-abertos-fonte.md`, `src/tests-e2e/README.md`
- `wiki/adr/ADR-049-motor-dados-abertos-fonte-pull.md` (implementação conferida), `wiki/implementation-phases/{P5.5,P6,P9,P12,PNTP,MODULOS,README}.md`
- `wiki/specs/04-acessibilidade-ux.md`, `AGENTS.md` (33 histórias), `_to_revision/{README.md,P5.5-motor-dados-abertos.md,_inventario.md}`
