diff --git a/lib/workers/repository/init/apis.spec.ts b/lib/workers/repository/init/apis.spec.ts
index c35030fc98e08a331501030753b34c502dcc6bc3..d03c7319e97637474f95b18cbd0ad3960ca70ee8 100644
--- a/lib/workers/repository/init/apis.spec.ts
+++ b/lib/workers/repository/init/apis.spec.ts
@@ -74,6 +74,19 @@ describe('workers/repository/init/apis', () => {
       expect(workerPlatformConfig).toBeTruthy();
     });
 
+    it('does not throw for forkProcessing=enabled', async () => {
+      platform.initRepo.mockResolvedValueOnce({
+        defaultBranch: 'master',
+        isFork: true,
+        repoFingerprint: '123',
+      });
+      platform.getJsonFile.mockResolvedValueOnce({
+        forkProcessing: 'enabled',
+      });
+      const workerPlatformConfig = await initApis(config);
+      expect(workerPlatformConfig).toBeTruthy();
+    });
+
     it('ignores platform.getJsonFile() failures', async () => {
       platform.initRepo.mockResolvedValueOnce({
         defaultBranch: 'master',
@@ -91,6 +104,21 @@ describe('workers/repository/init/apis', () => {
       ).resolves.not.toThrow();
     });
 
+    it('throws for fork with platform.getJsonFile() failures', async () => {
+      platform.initRepo.mockResolvedValueOnce({
+        defaultBranch: 'master',
+        isFork: true,
+        repoFingerprint: '123',
+      });
+      platform.getJsonFile.mockRejectedValue(new Error());
+      await expect(
+        initApis({
+          ...config,
+          forkProcessing: 'disabled',
+        }),
+      ).rejects.toThrow(REPOSITORY_FORKED);
+    });
+
     it('uses the onboardingConfigFileName if set', async () => {
       platform.initRepo.mockResolvedValueOnce({
         defaultBranch: 'master',
diff --git a/lib/workers/repository/init/apis.ts b/lib/workers/repository/init/apis.ts
index fd392a208c5779d018f57fec295eb0da476e3d53..aa2b3261d06546139105ad577aac0f17baa6ae1c 100644
--- a/lib/workers/repository/init/apis.ts
+++ b/lib/workers/repository/init/apis.ts
@@ -13,7 +13,7 @@ export type WorkerPlatformConfig = RepoResult &
   Record<string, any>;
 
 // TODO #22198
-const defaultConfigFile = (config: RenovateConfig): string =>
+const getDefaultConfigFile = (config: RenovateConfig): string =>
   configFileNames.includes(config.onboardingConfigFileName!)
     ? config.onboardingConfigFileName!
     : configFileNames[0];
@@ -30,7 +30,7 @@ async function validateOptimizeForDisabled(
   config: RenovateConfig,
 ): Promise<void> {
   if (config.optimizeForDisabled) {
-    const renovateConfig = await getJsonFile(defaultConfigFile(config));
+    const renovateConfig = await getJsonFile(getDefaultConfigFile(config));
     if (renovateConfig?.enabled === false) {
       throw new Error(REPOSITORY_DISABLED_BY_CONFIG);
     }
@@ -62,14 +62,31 @@ async function validateOptimizeForDisabled(
 
 async function validateIncludeForks(config: RenovateConfig): Promise<void> {
   if (config.forkProcessing !== 'enabled' && config.isFork) {
-    const renovateConfig = await getJsonFile(defaultConfigFile(config));
-    if (
-      renovateConfig?.includeForks !== true &&
-      renovateConfig?.forkProcessing !== 'enabled'
-    ) {
+    const defaultConfigFile = getDefaultConfigFile(config);
+    const repoConfig = await getJsonFile(defaultConfigFile);
+    if (!repoConfig) {
+      logger.debug(
+        `Default config file ${defaultConfigFile} not found in repo`,
+      );
       throw new Error(REPOSITORY_FORKED);
     }
-    logger.debug('Repository config enables forks - continuing');
+    if (repoConfig.includeForks) {
+      logger.debug(
+        `Found legacy setting includeForks in ${defaultConfigFile} - continuing`,
+      );
+      return;
+    }
+    if (repoConfig.forkProcessing === 'enabled') {
+      logger.debug(
+        `Found forkProcessing=enabled in ${defaultConfigFile} - continuing`,
+      );
+      return;
+    }
+    logger.debug(
+      { config: repoConfig },
+      `Default config file ${defaultConfigFile} found in repo but does not enable forks`,
+    );
+    throw new Error(REPOSITORY_FORKED);
   }
 }