You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
0.1 Capture baseline on a seeded dev instance: curl /apps/planninq/api/health JSON + /apps/planninq/api/metrics Prometheus text + /api/settings JSON; store as fixtures for the parity diff
1.1 Create src/manifest.json (planninq is Tier 0 — no manifest exists yet) with an observability block: health.checks: [{"type": "database"}], metrics: [] (implicit planninq_info/planninq_up come from the engine)
1.2 (Optional, recipe-documentation value) add the worked-example metric planninq_projects_total → {"kind": "objectCount", "register": "planninq", "schema": "project"}; and/or the optional {"type": "orAvailable", "severity": "degraded"} health check — both intentional non-parity additions, document if added
1.3 Validate via ManifestService diagnostics (no errors)
2.1 Shrink lib/AppInfo/Application.php to \OCA\OpenRegister\AppHost\Bootstrap::register($context, 'planninq') (~20 lines); verify the Bootstrap aliases cover the DeepLink listener registration currently done by hand
2.2 Replace appinfo/routes.php with return \OCA\OpenRegister\AppHost\Routes::standard($extra), passing the three domain routes (project#checkCreatePolicy, project#create, project#leaveProject) via $extra; route names/URLs identical (incl. SPA catch-all ordering)
2.4 Confirm info.xml needs no change (repair-step + admin-settings class names resolve to generics via Bootstrap aliases); sweep remaining references (unit tests, @spec tags, docs)
3.1 Diff live /api/health, /api/metrics, /api/settings output vs the 0.1 baseline: identical shape, metric names, types, labels (document intentional deltas only if 1.2 options were added)
3.2 OR AppHost Newman contract collection green against planninq's endpoints; existing tests/integration/planninq.postman_collection.json green
3.3 e2e smoke green: dashboard SPA loads at /apps/planninq/, deep-link/catch-all route renders, admin settings section shows register/schema config; existing unit suite green
3.4 Fresh-install check: occ app:enable planninq runs the generic repair step and seeds the register from lib/Settings/planninq_register.json
4.1 Update planninq docs (docs/ARCHITECTURE.md + feature docs): planninq now runs on the AppHost; mark this change as the fleet adoption-recipe reference (simplest adoption — zero observability descriptors required)
5.1 composer check:strict green (PHPCS, PHPMD, Psalm, PHPStan) — fix any pre-existing issues encountered
5.2 18 hydra gates green; gate-22 manifest validation green against the new src/manifest.json
Synced from openspec/changes/adopt-apphost by OpenSpec workflow App: planninq
Artifacts
Specs
Tasks
curl /apps/planninq/api/healthJSON +/apps/planninq/api/metricsPrometheus text +/api/settingsJSON; store as fixtures for the parity diffsrc/manifest.json(planninq is Tier 0 — no manifest exists yet) with anobservabilityblock:health.checks: [{"type": "database"}],metrics: [](implicitplanninq_info/planninq_upcome from the engine)planninq_projects_total→{"kind": "objectCount", "register": "planninq", "schema": "project"}; and/or the optional{"type": "orAvailable", "severity": "degraded"}health check — both intentional non-parity additions, document if addedlib/AppInfo/Application.phpto\OCA\OpenRegister\AppHost\Bootstrap::register($context, 'planninq')(~20 lines); verify the Bootstrap aliases cover the DeepLink listener registration currently done by handappinfo/routes.phpwithreturn \OCA\OpenRegister\AppHost\Routes::standard($extra), passing the three domain routes (project#checkCreatePolicy,project#create,project#leaveProject) via$extra; route names/URLs identical (incl. SPA catch-all ordering)lib/Controller/HealthController.php,lib/Controller/MetricsController.php,lib/Controller/DashboardController.php,lib/Controller/SettingsController.php,lib/Service/SettingsService.php,lib/Settings/AdminSettings.php,lib/Sections/SettingsSection.php,lib/Repair/InitializeSettings.php,lib/Listener/DeepLinkRegistrationListener.php—ProjectController.php,planninq_register.json,lib/Migration/stayinfo.xmlneeds no change (repair-step + admin-settings class names resolve to generics via Bootstrap aliases); sweep remaining references (unit tests,@spectags, docs)/api/health,/api/metrics,/api/settingsoutput vs the 0.1 baseline: identical shape, metric names, types, labels (document intentional deltas only if 1.2 options were added)tests/integration/planninq.postman_collection.jsongreen/apps/planninq/, deep-link/catch-all route renders, admin settings section shows register/schema config; existing unit suite greenocc app:enable planninqruns the generic repair step and seeds the register fromlib/Settings/planninq_register.jsondocs/ARCHITECTURE.md+ feature docs): planninq now runs on the AppHost; mark this change as the fleet adoption-recipe reference (simplest adoption — zero observability descriptors required)composer check:strictgreen (PHPCS, PHPMD, Psalm, PHPStan) — fix any pre-existing issues encounteredsrc/manifest.jsonSynced from
openspec/changes/adopt-apphostby OpenSpec workflowApp:
planninq