Some checks failed
PR Fast Feedback / fast-feedback (pull_request) Failing after 5m7s
Added jobs, controllers, and PDF generation logic for management report runtime as defined in Spec 379. Includes artifact migrations, payload builders, and testing coverage.
3.6 KiB
3.6 KiB
Spec 379 Runtime Validation Evidence
Date: 2026-06-14
Baseline
- Branch:
379-management-report-pdf-runtime - Starting HEAD:
d43ebcb4 feat(report): implement management report pdf v1 (#449) - Initial dirty state: only
specs/379-management-report-pdf-runtime/was untracked. - Spec 378 files verified:
docker-compose.ymlapps/platform/config/tenantpilot.phpapps/platform/app/Services/Pdf/PdfRenderingGateway.phpapps/platform/tests/Unit/Pdf/Spec378PdfRenderingGatewayTest.php
Local Runtime Controls
- Gotenberg image remains pinned to
gotenberg/gotenberg:8.34.0-chromium. - No public Gotenberg port is exposed by the
gotenbergservice. - Runtime safeguards remain configured:
API_DISABLE_DOWNLOAD_FROM=trueWEBHOOK_DISABLE=trueCHROMIUM_ALLOW_FILE_ACCESS_FROM_FILES=trueCHROMIUM_ALLOW_LIST=^file:///tmp/.*$CHROMIUM_DENY_PRIVATE_IPS=trueCHROMIUM_DENY_PUBLIC_IPS=true- timeout, body-limit, queue, and concurrency env controls remain present.
docs/deployment-checklist.mddocuments the pinned image, internal service URL, and renderer hardening controls.- Local validation on 2026-06-15 confirmed that
CHROMIUM_ALLOW_LIST=^$makes/forms/chromium/convert/htmlreturn403 Forbiddenbecause Chromium must navigate to Gotenberg's temporaryfile:///tmp/.../index.html. The allow-list remains restricted to that internal file path and external fetches remain disabled.
Staging/Dokploy Validation
Staging/Dokploy runtime validation was not executable from this local workspace. Generation therefore remains blocked by default through:
TENANTPILOT_PDF_RENDERER_RUNTIME_VALIDATED=falsetenantpilot.pdf_renderer.runtime_validatedManagementReportPdfRuntimeGate
To enable management PDF generation in Staging/Production, validate the deployed Gotenberg container/runtime path first, then set TENANTPILOT_PDF_RENDERER_RUNTIME_VALIDATED=true in the environment.
Verification Commands
cd apps/platform && ./vendor/bin/sail artisan test --compact --filter=Spec379- Result: 7 passed, 81 assertions.
cd apps/platform && ./vendor/bin/sail php vendor/bin/pest tests/Browser/Spec379ManagementReportPdfSmokeTest.php --compact- Result: 1 passed, 12 assertions.
cd apps/platform && ./vendor/bin/sail artisan test --compact --filter=Spec378- Result: 11 passed, 44 assertions.
cd apps/platform && ./vendor/bin/sail artisan test --compact --filter=Spec357- Result: 13 passed, 108 assertions.
cd apps/platform && ./vendor/bin/sail artisan test --compact --filter=Spec366- Result: 9 passed, 181 assertions.
cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/ReviewPack/ReviewPackDownloadTest.php tests/Feature/ReviewPack/ReviewPackResourceTest.php tests/Unit/Pdf/Spec378PdfRenderingGatewayTest.php- Result: 49 passed, 268 assertions.
cd apps/platform && ./vendor/bin/sail pint ...- Result: PASS on changed runtime/test files.
git diff --check- Result: PASS.
Guard Notes
The optional guard command below was run and produced two pre-existing failures unrelated to Spec 379:
cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/Guards/OperationLifecycleOpsUxGuardTest.php tests/Feature/Guards/ActionSurfaceContractTest.phpActionSurfaceContractTest: operation registry URL assertion expects no navigation context, but current code returns an operations-index navigation context.ActionSurfaceContractTest: required-permissions page assertion expectsStart verification, which the current page no longer renders.
Both failures reproduce in isolation and no Spec379 code path is involved.