F12_Notification / Notification
誰へ何をいつ送るかを常に見せ、同意・quiet hours・retryを扱う器官。
subscribe済みrecipientへのsend planをtimezoneとbody preview付きで作り、scheduleまたは承認実行する。
入力 → 状態 → 出力
- 入力validated JSON payload
- 状態engine-owned durable slice
- 承認必要な外部 / 不可逆操作だけ
- 出力result / receipt / explicit error
- 回復unsubscribeで停止し、失敗はbackoff retryを経てdead letterへ残す。webhookは署名とidempotencyで守る。
保存状態はAction Coreのfilesystem state store内の capabilities sliceとして再起動可能なplain dataで保持される。functionや秘密値をstateへ保存しない。
全Action
以下はAction Registryに実在するF12_Notificationの全actionである。クリックでpayload境界、状態、出力、回復を開ける。
capability.notification.bindBind notificationlocal or validated transition
- payload
provider- 状態
- unbound → configured / ready
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- error codeと状態を残し、必要に応じて再計画・再承認・retryへ戻る。
capability.notification.subscribeSubscribe notificationlocal or validated transition
- payload
recipientpurpose- 状態
- state transition defined by the capability engine
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- error codeと状態を残し、必要に応じて再計画・再承認・retryへ戻る。
capability.notification.unsubscribeUnsubscribe notificationlocal or validated transition
- payload
recipient- 状態
- state transition defined by the capability engine
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- error codeと状態を残し、必要に応じて再計画・再承認・retryへ戻る。
capability.notification.plan_sendPlan notification sendapproval boundary / external effect
- payload
recipientsubjectbodypurpose- 状態
- durable plan → approval_required
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- error codeと状態を残し、必要に応じて再計画・再承認・retryへ戻る。
capability.notification.arm_sendArm notification sendapproval boundary / external effect
- payload
sendPlanId- 状態
- approval_required → armed
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- error codeと状態を残し、必要に応じて再計画・再承認・retryへ戻る。
capability.notification.execute_sendExecute notification sendapproval boundary / external effect
- payload
sendPlanId- 状態
- armed → visible provider/result state
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- 実行前にarm状態を要求する。失敗はengineが保持し、同一keyは重複実行を防ぐ。
capability.notification.scheduleSchedule notificationlocal or validated transition
- payload
sendPlanIdcronExpression- 状態
- state transition defined by the capability engine
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- error codeと状態を残し、必要に応じて再計画・再承認・retryへ戻る。
capability.notification.cancelCancel notificationlocal or validated transition
- payload
notificationId- 状態
- active work → cancelled
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- error codeと状態を残し、必要に応じて再計画・再承認・retryへ戻る。
capability.notification.retryRetry notificationlocal or validated transition
- payload
sendPlanId- 状態
- failed → retry / dead letter when bounded
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- error codeと状態を残し、必要に応じて再計画・再承認・retryへ戻る。
capability.notification.register_webhookRegister notification webhooklocal or validated transition
- payload
endpointpurpose- 状態
- state transition defined by the capability engine
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- error codeと状態を残し、必要に応じて再計画・再承認・retryへ戻る。
capability.notification.apply_webhookApply notification webhooklocal or validated transition
- payload
eventIdtypenotificationIdsignature- 状態
- state transition defined by the capability engine
- result
- Capability engine の
okresult、または明示的な validation / provider error。plan・receipt・stateは持続sliceへ返る。 - recovery
- error codeと状態を残し、必要に応じて再計画・再承認・retryへ戻る。
Capability Spec
F12 Notification — Capability Spec
Notification, webhook, and scheduling capability with Resend/webhook/cron-compatible contract mocks. No live sending. Channel, recipient, content, purpose, and time are always visible. Consent/unsubscribe enforced. Retry with backoff and dead-letter queue. Webhook signature and idempotency. Schedule timezone support. Cancel and quiet hours.
States
| State | Meaning |
|---|---|
draft | Local draft. |
planned | Send plan recorded. |
approval_required | Awaiting human approval. |
scheduled | Scheduled for future delivery. |
sending | Execute in progress (mock). |
delivered | Mock delivery confirmed. |
failed | Send failed; retry eligible. |
cancelled | Cancelled before send. |
Actions
| Action | Flow |
|---|---|
bind | Resend/webhook/cron binding |
subscribe / unsubscribe | Consent lifecycle |
plan_send → arm_send → execute_send | Approval-required mock send |
schedule | Cron-compatible schedule mock |
cancel | Cancel scheduled notification |
retry | Backoff retry after failure |
register_webhook / apply_webhook | Webhook signature + replay protection |
Environment Names
| Name | Role |
|---|---|
RESEND_API_KEY | Resend API key (name only) |
MIKAAIR_MAIL_FROM | From address env name |
MIKAAIR_NOTIFICATION_WEBHOOK_SECRET | Webhook HMAC secret |
MIKAAIR_NOTIFICATION_QUIET_HOURS_START | Quiet hours start hour (UTC) |
MIKAAIR_NOTIFICATION_QUIET_HOURS_END | Quiet hours end hour (UTC) |
MIKAAIR_NOTIFICATION_DEFAULT_TIMEZONE | Default IANA timezone |
MIKAAIR_NOTIFICATION_MAX_RETRIES | Max retry attempts before dead letter |
binding / secret boundary
provider設定はbinding templateから参照する。環境変数は名前だけを扱い、値はsource repository・画面・reportに書かない。
| 環境変数名 | 扱い |
|---|---|
RESEND_API_KEY | secret reference — 値は表示・保存しない |
MIKAAIR_MAIL_FROM | configuration reference — 値は表示・保存しない |
MIKAAIR_NOTIFICATION_WEBHOOK_SECRET | secret reference — 値は表示・保存しない |
MIKAAIR_NOTIFICATION_QUIET_HOURS_START | configuration reference — 値は表示・保存しない |
MIKAAIR_NOTIFICATION_QUIET_HOURS_END | configuration reference — 値は表示・保存しない |
MIKAAIR_NOTIFICATION_DEFAULT_TIMEZONE | configuration reference — 値は表示・保存しない |
MIKAAIR_NOTIFICATION_MAX_RETRIES | configuration reference — 値は表示・保存しない |
unsubscribeで停止し、失敗はbackoff retryを経てdead letterへ残す。webhookは署名とidempotencyで守る。
source trace
../MikaAir LIGHTNESS/F_BUS_Capability/F12_Notification/spec/capability_spec.md 6d9cff13fd22../MikaAir LIGHTNESS/F_BUS_Capability/F12_Notification/binding/binding_manifest.template.json 079b0dc3bddf../MikaAir LIGHTNESS/F_BUS_Capability/F12_Notification/agent.md 20da889bd9cc../MikaAir LIGHTNESS/F_BUS_Capability/runtime_bridge.mjs 7e7384638a41../MikaAir LIGHTNESS/F_BUS_Capability/action_surface.mjs e5bae5f48648../MikaAir LIGHTNESS/A_BUS_Action_Core/A2_State_Store/filesystem_store.mjs b1cc32d3f456../MikaAir LIGHTNESS/F_BUS_Capability/F12_Notification/contract/index.mjs 4b8da78ff446../MikaAir LIGHTNESS/F_BUS_Capability/F12_Notification/engine.mjs 02c7a119e29c