Repository navigation
Conversation
no ref Use one initializer so synchronous subscriptions and asynchronous key checks share readiness and retry behavior. Keep job registration in its existing background phase, and undo partial IndexNow subscriptions when startup fails.
no ref Give runtime framework code a clear home alongside server and frontend. Move the initializer and its tests without changing behavior, document the boundary, and include the directory in lint and dependency checks.
no ref Keep kernel primitives independent of Ghost application code, including shared. Document the intended dependency direction and enforce it across the Ghost package.
no ref Keep the familiar .service access while guarding against use before initialization. Export the signing-keys wrapper intact so imports don't read the getter before boot, and update its callers and tests.
no ref Use the same service terminology as the rest of the initializer.
no ref Track adoption of the shared initializer separately from contract audits, with validated total and migrated counts. Refresh the first two migrated service records against their current implementation.
|
| Command | Status | Duration | Result |
|---|---|---|---|
nx run ghost:test:ci:integration |
✅ Succeeded | 2m 44s | View ↗ |
nx run ghost:test:ci:e2e |
✅ Succeeded | 5m 19s | View ↗ |
nx run ghost:test:integration |
✅ Succeeded | 1m 38s | View ↗ |
nx run ghost:test:legacy |
✅ Succeeded | 3m 2s | View ↗ |
nx run ghost:test:e2e |
✅ Succeeded | 2m 55s | View ↗ |
nx run ghost:test:ci:unit |
✅ Succeeded | 1m 20s | View ↗ |
nx run-many -t test:unit -p ghost |
✅ Succeeded | 1m | View ↗ |
nx run ghost-monorepo:lint:boundaries |
✅ Succeeded | 18s | View ↗ |
Additional runs (6) |
✅ Succeeded | ... | View ↗ |
💡 Verify your cache is correct by running tasks in a sandbox. Read docs ↗
☁️ Nx Cloud last updated this comment at 2026-10-10 07:22:19 UTC
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #31701 +/- ##
==========================================
+ Coverage 81.40% 81.64% +0.23%
==========================================
Files 1653 1654 +1
Lines 60268 60273 +5
Branches 10544 10542 -2
==========================================
+ Hits 49064 49209 +145
+ Misses 9584 9464 -120
+ Partials 1620 1600 -20
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Explain which startup guarantees belong to defineService and which cleanup belongs to its callback. Put the contract in developer guides and link it from the API comment.

Start standardizing service initialization with IndexNow and signing keys. Both now use a small kernel helper that shares initialization, exposes the ready instance through
.service, and permits an explicit retry after failure. Boot owns when each service starts and awaits readiness.IndexNow rolls back partial event subscriptions if startup fails. Signing-key background scheduling keeps its existing owner. The inventory records 2 of 72 entries migrated and validates those counts.
Verification:
Passed:
pnpm test:typesfromghost.Passed:
pnpm exec vitest run test/unit/server/services/service-inventory.test.tsfromghost(74 tests).Passed: real Ghost boot on a fresh MySQL database; both instances ready, one IndexNow listener per event, staff/member key providers available, and both verification endpoints returning 200. Site and Admin also loaded in the browser.
Full validation is not clean locally.
NX_PARALLEL=1 pnpm checkpassed formatting, lint and the other workspace tests, but Core timed out in the unchanged jobs shutdown-deadline test. A retry exited with code 139.pnpm exec vitest run --maxWorkers=2then passed 9,760 tests and timed out in the unchanged gift-preview image test. Both affected files passed when run individually.I've read and followed the Contributor Guide
I've explained my change
I've written an automated test to prove my change works