BFTL
04/20/2026, 4:00 AMkapa.ai
04/20/2026, 4:00 AMBFTL
04/20/2026, 4:20 AMBFTL
04/20/2026, 4:22 AMkapa.ai
04/20/2026, 4:23 AMComments stream (a child stream in the Notion connector) had a known breaking change when migrating from the Python CDK to the low-code framework, specifically around how incremental state is managed for partitioned/nested streams. Users were advised to clear data for that stream before resuming syncs. [Notion Migration Guide]
2. The Blocks stream uses a custom BlocksRetriever that recursively fetches child blocks up to 30 levels deep, which can generate a very large number of API calls. [Notion components]
3. Rate limiting: The Notion API enforces ~3 requests per second per integration, and deeply nested child streams can significantly amplify the number of API calls. [Notion performance] Regarding Your Specific Issue The knowledge sources do not contain any information about a "Notion Markdown" API endpoint or a child stream built on top of it. Since you're forking the Notion connector and adding a new custom child stream, the issue you're seeing (child stream never starting, No checkpoints to flush repeating) is more likely related to the broader known issue discussed in our previous exchange — where source-declarative-manifest does not emit terminal stream status messages required by CDK v3 destinations. [streams without status]
I'd recommend verifying whether your new child stream is correctly emitting stream status messages, as this is the most documented cause of the symptom you're describing. The knowledge sources don't provide enough detail to pinpoint anything specific to your custom "Notion Markdown" stream. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.BFTL
04/20/2026, 4:35 AMkapa.ai
04/20/2026, 4:35 AMpages stream starts, runs, hits a rate limit (HTTP 429), retries, and eventually finishes reading all records.
• page_markdown is marked as STARTED and RUNNING very early (at 12:47:47), but never actually processes any records or emits a terminal status.
• The destination then loops indefinitely with No checkpoints to flush. What the Logs Reveal The page_markdown stream being marked RUNNING immediately at startup — before pages has even finished — suggests it is a child/substream that depends on pages as its parent. The child stream appears to be waiting for parent records to iterate over, but something in the handoff is broken.
This is directly consistent with the known bug documented in the knowledge sources: the source (using source-declarative-manifest) does not emit a terminal stream status message for the parent stream (pages), so the destination never knows the parent is complete and cannot advance. [streams without status]
Additionally, there is a known issue specifically with low-code connectors where the back-off/rate-limit handling is not correctly applied to parent streams, which can disrupt the parent→child data flow. [backoff on parent streams] Best Approaches Based on the knowledge sources, here are the documented options:
1. Downgrade your destination to a pre-CDK v3 version (e.g., BigQuery v2.x, or S3 pre-v1.0.0). CDK v3 destinations require terminal stream status messages that source-declarative-manifest does not emit. This is the most commonly reported workaround. [streams without status]
2. Build a custom Python source connector using the traditional Python CDK instead of the declarative manifest approach. The Python CDK correctly emits STREAM_STATUS messages, making it compatible with all destination versions including CDK v3. [streams without status]
3. Check the rate limit handling for the parent stream — your logs show a very long backoff (714 seconds) on the pages stream. There is a known bug where back-off strategies are not correctly applied to parent streams in low-code connectors, which can cause the child stream to stall. [backoff on parent streams]
The knowledge sources do not confirm an official fix has been released for the source-declarative-manifest terminal status issue as of the latest available information, so the custom Python CDK approach is the most reliable long-term solution if downgrading the destination is not viable. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.