Skip to main content

notification-manual-dismissal-safety

Safe notification dismissal reference: producer-owned state, atomic targets, stale versions, force, protected channels, post-molt acknowledgement, hooks, and legacy large-result reminders. Read after notification-manual before a clear or when one is refused; compaction belongs to summarize-manual.

설치로 이동

소스 정보

저장소
Lingtai-AI/lingtai-kernel
최근 소스 활동
2026년 9월 9일 05:50
감지된 SKILL.md 언어
영어
스타
11
포크
14

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
notification-manual-dismissal-safety
description
Safe notification dismissal reference: producer-owned state, atomic targets, stale versions, force, protected channels, post-molt acknowledgement, hooks, and legacy large-result reminders. Read after notification-manual before a clear or when one is refused; compaction belongs to summarize-manual.
version
0.5.0
tags
["lingtai","notifications","dismiss","force","stale","safety","hooks"]
last_changed_at
2026-09-09T05:30:00Z
related_files
["src/lingtai/tools/notification/manual/SKILL.md","src/lingtai/tools/notification/__init__.py","src/lingtai/tools/notification/schema.py"]
maintenance
Keep this reference as the sole owner of dismissal safety and refusal recovery; update the parent route when its installed path changes.
# Notification Dismissal Safety ## Owner first; mirror second Read the current payload's `instructions`. If the notification mirrors producer- owned state, call that producer's read/dismiss verb first (for example, `email(action='read'|'dismiss', ...)`). A generic notification dismiss clears only the high-attention mirror; it never removes producer history, mailbox state, goal semantics, or a source queue. Choose one atomic target: ```text notification(action='dismiss_channel', input={'channel': 'nudge', 'force': null, 'reason': null}, reasoning='handled the notification') ``` `dismiss_channel` clears one whole mirror and requires `channel`. `dismiss_event` removes one matching `event_id`; `dismiss_ref` removes matching `ref_id` event(s). Event/ref calls default to `channel: 'system'`, target events in the system mirror; `channel: "daemon"` is also supported through the Core aggregate. Other channels refuse event/ref targets. Clearing the final system event removes that mirror, not producer records. The schema is the exact field source; cross-action fields are rejected before I/O. All three verbs delegate to the canonical Core policy path. ## Stale versions and `force` A non-force clear compares the delivered version with the current on-disk version. If the producer updated the channel after delivery, it refuses with `reason: 'stale_channel_version'`. Read the newly delivered state before making a decision. `force=true` is only for a confirmed stale **mirror**, never a routine retry and never a substitute for handling the producer. A successful clear still changes the mirror only. ## Protected and acknowledgement-sensitive channels `goal` is protected source of truth: generic `dismiss_channel` refuses even with `force=true`; use `../../../system-manual/reference/goal-manual/SKILL.md` to cancel or complete goal state. `post-molt` requires a non-empty decision reason in the form `continue: ...`, `defer: ...`, or `obsolete: ...`: ```text notification(action='dismiss_channel', input={'channel': 'post-molt', 'force': null, 'reason': 'continue: recovered the pending work'}, reasoning='acknowledge continuation') ``` A refusal is a route, not a retry: producer guard → producer verb; stale version → reread, then decide whether confirmed mirror-only `force` is justified; protected channel → owning manual; missing post-molt reason → record the real decision; one system event → use `dismiss_event` or `dismiss_ref`, not a whole channel clear. ## Hooks and legacy reminders A registered hook channel uses the same atomic dismissal and producer guards. Registration widens only this agent's allowlist, never producer-dismiss policy. `drop` removes the manifest and revokes the channel; it does **not** kill the hook process. Stop it using the manifest's `how_to_cancel`. If the process keeps publishing after drop, the kernel may emit the blocked-channel warning again. New large tool results are not notification events. They belong to `_meta.agent_meta.agent_state.current_tool_result_chars` and `context(action='summarize')`; `../../../context-manual/reference/summarize-manual/SKILL.md` owns digest, recovery, and summarize-versus-molt procedure. A persisted legacy `source='large_tool_result'` event can be cleared by successful summarization of the matching `tool_call_id`; if that is impossible, prefer `dismiss_ref(ref_id='large_tool_result:<tool_call_id>')` over a whole-channel system clear, which may remove unrelated events. The original result remains in chat history and `events.jsonl`. No dismissal mutates producer state. Never bypass these guards by deleting files.
GitHub에서 보기