Skip to content
Recued
Menu
← Back to recipes

Notion page comment closure watcher

by recued-core v1

Scheduled adopter for Notion page comment closure rows seeded by comment-notion-page-with-closure. It lists only Recued-originated page-comment watches, re-reads a bounded batch of Notion page and one configured status property, and closes the shared row when Notion reports a configured terminal status such as done, complete, completed, closed, or archived, or when the page is in trash. It can notify the owner on closure, but it never creates, updates, trashes, moves, locks, templates, appends blocks to, updates to-do blocks on, edits comments on, deletes from, exports, or otherwise mutates Notion pages.

Complete workflow

Workflow pack for Recued-created Notion page comments. It composes the Notion capability pack with a closure ledger: add one owner-approved comment to an existing Notion page, persist only the connection/page/status-property/comment linkage in data.shared, and let a scheduled watcher re-read that exact page and configured status property until Notion reports a terminal status such as done, complete, completed, closed, or archived, or until the page is in trash. This pack does not replace Notion comments, status properties, native notifications, database views, dashboards, reminders, automations, templates, or project management workflows; it adds Recued-visible closure state for page comments Recued created.

You are viewing one recipe in this workflow. Installing it opens the complete pack so its other recipes and background automations arrive together.

Notion page comment closure watcher
This recipe Background automation

Scheduled adopter for Notion page comment closure rows seeded by comment-notion-page-with-closure. It lists only Recued-originated page-comment watches, re-reads a bounded batch of Notion page and one configured status property, and closes the shared row when Notion reports a configured terminal status such as done, complete, completed, closed, or archived, or when the page is in trash. It can notify the owner on closure, but it never creates, updates, trashes, moves, locks, templates, appends blocks to, updates to-do blocks on, edits comments on, deletes from, exports, or otherwise mutates Notion pages.

notionpagescommentsstatus
by recued-core pinned v1

Workflow origin for the Notion page comment closure loop. It reads one Notion page and one configured status property, reads current unresolved comments for context, creates exactly one owner-provided page comment through recued-core.notion.comment.create, and when the comment succeeds it seeds durable data.shared closure state for notion-page-comment-closure-watcher. It uses deterministic owner-provided copy rather than AI and does not create, update, trash, move, lock, template, append blocks to, update to-do blocks on, edit comments on, delete from, export, or otherwise mutate Notion pages.

notionpagescommentsstatus
by recued-core pinned v1

Low-frequency timeout role for recued-core/notion-page-comment-closure. It moves a bounded batch of expired rows from active to timed_out, deletes the active copy only after the durable timeout write succeeds, and notifies the owner once per batch.

notionwatchertimeoutowner-review
by recued-core pinned v1

Owner-visible list/close role for recued-core/notion-page-comment-closure. It lists bounded active, timed-out, and closed rows. Supplying a timed-out or closed key deletes only that exact terminal row; active watches cannot be deleted here.

notionwatcherreviewclose
by recued-core pinned v1
View pack details, dependencies, and permissions →
How it works 140 steps

Inspect the data fetches, transforms, gates, and output this recipe runs.

Data fetch
shared_page_watches ?
Process (139 steps)
now date_add
Add 0 days to
watch_rows filter
Filter by condition
watch_rows_for_connection filter
Filter by condition
watch_rows_with_page filter
Filter by condition
watch_rows_with_status_property filter
Filter by condition
watch_rows_with_comment filter
Filter by condition
never_checked_watch_rows filter
Filter by condition
checked_watch_rows filter
Filter by condition
checked_watch_rows_oldest_first sort
Sort by value.last_checked_at
fair_watch_rows flatten
Flatten nested lists in
candidate_rows slice
Take a subset of
batch_count count
Count items in candidate rows
candidate_count count
Count items in watch rows with comment
has_candidate compare
Check if candidate rows has data
has_connection compare
Check if setting notion has data
skip_page_read any
Check if any of the conditions are true
batch_context_envelopes merge
Combine objects together
batch_contexts map
Extract from each item
page ?
skip: step.skip_page_read equal true
page_live_batch_context pick
Keep only specific fields from
page_batch_context_envelopes merge
Combine objects together
page_batch_contexts map
Extract from each item
page_in_trash_value default
Apply default
page_in_trash_value_live_batch_context pick
Keep only specific fields from
page_in_trash_value_batch_context_envelopes merge
Combine objects together
page_in_trash_value_batch_contexts map
Extract from each item
page_in_trash compare
Check if item page in trash value equals true
page_in_trash_live_batch_context pick
Keep only specific fields from
page_in_trash_batch_context_envelopes merge
Combine objects together
page_in_trash_batch_contexts map
Extract from each item
status_property_id_value default
Apply default
status_property_id_value_live_batch_context pick
Keep only specific fields from
status_property_id_value_batch_context_envelopes merge
Combine objects together
status_property_id_value_batch_contexts map
Extract from each item
has_status_property_id compare
Check if item status property id value has data
has_status_property_id_live_batch_context pick
Keep only specific fields from
has_status_property_id_batch_context_envelopes merge
Combine objects together
has_status_property_id_batch_contexts map
Extract from each item
skip_status_read any
Check if any of the conditions are true
skip_status_read_live_batch_context pick
Keep only specific fields from
skip_status_read_batch_context_envelopes merge
Combine objects together
skip_status_read_batch_contexts map
Extract from each item
status_property ?
skip: item.skip_status_read equal true
status_property_live_batch_context pick
Keep only specific fields from
status_property_batch_context_envelopes merge
Combine objects together
status_property_batch_contexts map
Extract from each item
status_name default
Apply default
status_name_live_batch_context pick
Keep only specific fields from
status_name_batch_context_envelopes merge
Combine objects together
status_name_batch_contexts map
Extract from each item
has_status_name compare
Check if item status name has data
has_status_name_live_batch_context pick
Keep only specific fields from
has_status_name_batch_context_envelopes merge
Combine objects together
has_status_name_batch_contexts map
Extract from each item
status_name_norm lowercase
Convert item status name to lowercase
status_name_norm_live_batch_context pick
Keep only specific fields from
status_name_norm_batch_context_envelopes merge
Combine objects together
status_name_norm_batch_contexts map
Extract from each item
status_terminal compare
Check if item status name norm is one of setting terminal statuses
status_terminal_live_batch_context pick
Keep only specific fields from
status_terminal_batch_context_envelopes merge
Combine objects together
status_terminal_batch_contexts map
Extract from each item
terminal_status_ready all
Check if all conditions are true
terminal_status_ready_live_batch_context pick
Keep only specific fields from
terminal_status_ready_batch_context_envelopes merge
Combine objects together
terminal_status_ready_batch_contexts map
Extract from each item
closure_detected any
Check if any of the conditions are true
closure_detected_live_batch_context pick
Keep only specific fields from
closure_detected_batch_context_envelopes merge
Combine objects together
closure_detected_batch_contexts map
Extract from each item
closed_reason ternary
Apply ternary
closed_reason_live_batch_context pick
Keep only specific fields from
closed_reason_batch_context_envelopes merge
Combine objects together
closed_reason_batch_contexts map
Extract from each item
page_last_edited_time default
Apply default
page_last_edited_time_live_batch_context pick
Keep only specific fields from
page_last_edited_time_batch_context_envelopes merge
Combine objects together
page_last_edited_time_batch_contexts map
Extract from each item
skip_close any
Check if any of the conditions are true
skip_close_live_batch_context pick
Keep only specific fields from
skip_close_batch_context_envelopes merge
Combine objects together
skip_close_batch_contexts map
Extract from each item
closed_watch_key replace
Replace text in item watch key
closed_watch_key_live_batch_context pick
Keep only specific fields from
closed_watch_key_batch_context_envelopes merge
Combine objects together
closed_watch_key_batch_contexts map
Extract from each item
close_watch ?
skip: item.skip_close equal true
close_watch_live_batch_context pick
Keep only specific fields from
close_watch_batch_context_envelopes merge
Combine objects together
close_watch_batch_contexts map
Extract from each item
delete_closed_active_watch ?
skip: item.close_watch.ok not_equal true
delete_closed_active_watch_live_batch_context pick
Keep only specific fields from
delete_closed_active_watch_batch_context_envelopes merge
Combine objects together
delete_closed_active_watch_batch_contexts map
Extract from each item
notify_terminal_enabled compare
Check if setting notify when terminal equals true
notify_terminal_enabled_live_batch_context pick
Keep only specific fields from
notify_terminal_enabled_batch_context_envelopes merge
Combine objects together
notify_terminal_enabled_batch_contexts map
Extract from each item
notify_trashed_enabled compare
Check if setting notify when trashed equals true
notify_trashed_enabled_live_batch_context pick
Keep only specific fields from
notify_trashed_enabled_batch_context_envelopes merge
Combine objects together
notify_trashed_enabled_batch_contexts map
Extract from each item
should_notify_terminal all
Check if all conditions are true
should_notify_terminal_live_batch_context pick
Keep only specific fields from
should_notify_terminal_batch_context_envelopes merge
Combine objects together
should_notify_terminal_batch_contexts map
Extract from each item
should_notify_trashed all
Check if all conditions are true
should_notify_trashed_live_batch_context pick
Keep only specific fields from
should_notify_trashed_batch_context_envelopes merge
Combine objects together
should_notify_trashed_batch_contexts map
Extract from each item
status_should_notify any
Check if any of the conditions are true
status_should_notify_live_batch_context pick
Keep only specific fields from
status_should_notify_batch_context_envelopes merge
Combine objects together
status_should_notify_batch_contexts map
Extract from each item
should_notify all
Check if all conditions are true
should_notify_live_batch_context pick
Keep only specific fields from
should_notify_batch_context_envelopes merge
Combine objects together
should_notify_batch_contexts map
Extract from each item
notification_title ternary
Apply ternary
notification_title_live_batch_context pick
Keep only specific fields from
notification_title_batch_context_envelopes merge
Combine objects together
notification_title_batch_contexts map
Extract from each item
notify_owner ?
skip: item.should_notify not_equal true
notify_owner_live_batch_context pick
Keep only specific fields from
notify_owner_batch_context_envelopes merge
Combine objects together
notify_owner_batch_contexts map
Extract from each item
refreshed_watch_value merge
Combine objects together
skip: item.delete_closed_active_watch.ok equal true
refreshed_watch_value_live_batch_context pick
Keep only specific fields from
refreshed_watch_value_batch_context_envelopes merge
Combine objects together
refreshed_watch_value_batch_contexts map
Extract from each item
refresh_active_watch ?
skip: item.delete_closed_active_watch.ok equal true
refresh_active_watch_live_batch_context pick
Keep only specific fields from
refresh_active_watch_batch_context_envelopes merge
Combine objects together
refresh_active_watch_batch_contexts map
Extract from each item
closed_batch_rows filter
Filter by condition
refreshed_batch_rows filter
Filter by condition
closed_batch_count count
Count items in closed batch rows
refreshed_batch_count count
Count items in refreshed batch rows
summary to_summary
Format results as a summary card
Settings 6 configurable

Configurable at install. Defaults shown — change them anytime in Recued.

notion setting =
channels setting = in_app
batch limit setting = 5
terminal statuses setting = done,complete,completed,closed,archived
notify when trashed setting = true
notify when terminal setting = true

Trust & control

What installing this recipe would let it do. Recued grants these permissions at install — review them there before approving.

Where it runs

Device + server Runs on your device (browser) or your server.

Permissions it requires

Send notificationsRead your Notion connection
Declared by the recipe — Recued grants these at install, where you review them before approving.

Data it touches

Warehousedata.shared

About

Tags

notion notionpagescommentsstatusknowledge-baseproject-managementclosurenotificationclosed-loopstate:notion-page-comment-closure-watcherpack:notion-page-comment-closure

Details

140 steps 6 configurable settings recipe_id: notion-page-comment-closure-watcher