Write & approval model

What each skill writes - and who has to approve it

The platform's safety model: reading is free, writing is controlled. Reads go through security_invoker views; every write goes through a security definer RPC that checks em_private.accessible_write before it touches a row - base-table writes are revoked from the scoped roles. On top of that, judgement-tier changes require an explicit human OK (propose → approve → apply) and only deterministic facts write on their own. Every approval-state below is taken from the skill's own contract.

Write & approval matrix - all 12 plugins, every skill

"Writes to" lists the em.* table(s) each skill mutates through its RPC. Account changelog rows are an audit side-effect of most writing skills and are noted where they apply.

SkillWrites toHuman approval before write
em-core · Foundation
/em-setupem-manifest.json local config file, not a Notion DBRequired reads back & confirms
em-task-managerem.tasks via em_db.tasksRequired manual / audit modes · Delegated api mode (caller-gated)
em-identity-resolvernever writesRead-only
account-changelogem.account_changelog_entriesAutomatic Mode A (caller already confirmed) · Required Mode B (interactive)
notion-writingCaller's target page formatting helper, no DB of its ownDelegated inherits caller's gate
em-copilot · Assistant
qiraroutes only; no direct writeEnforces gates confirmation contract + each downstream skill's gate
_assistant-coreauto-memory file last-context onlyEnforces gates waits on every downstream write-gate
em-askEM Library Gaps one Open row on a miss; reads the EM Library onlyRead-only except an automatic gap-log when the library doesn't cover the question
em-howtoQira Docs Gaps one Open row on a miss; reads the docs corpus onlyRead-only except an automatic gap-log when the docs don't cover the tooling question
em-people-management · People
em-1on1-loggerem.one_on_one_sessions · em.wins (optional) via em_db.one_on_oneEM-driven EM supplies the score & driver in-session
em-feedback-builderFeedback (via em_db.feedback) · JP_TASKS (follow-up) · .eml fileRequired draft confirmed yes / no / edit
em-feedback-follow-upFeedback (via em_db.feedback)Per-item EM picks Done / Escalate / Snooze
em-account-intelligence · Accounts
em-call-profileremits signals JSONRead-only
em-email-profileremits signals JSONRead-only
em-profile-writerem.stakeholder_profiles (auto-tier) · account changelogAutomatic deterministic; honors "Skip auto-update"
em-conversation-log-writerem.conversation_log_entriesAutomatic auto-generated row, idempotent
em-okr-management · Delivery
em-okr-builderTability (Outcomes · check-ins · Initiatives), mirrored to em.objectives/key_results · account changelogRequired explicit confirm before writing to Tability
em-okr-reviewerTability (check-ins · Initiatives) · account changelogPer-KR EM-driven check-in loop
em-okr-scorerTability (final check-ins · close Initiatives) · account changelogRequired final scoring confirmed / edited
em-okr-auditoraccount changelog audit row onlyRead-only never writes OKRs
em-risk-management · Delivery
em-risk-detectorem.risks (new row / comment) · account changelogRequired never writes without confirmation
em-risk-reviewerem.risks (update / comment / close) · account changelogRequired confirm before each write
em-risk-hygieneproduces a punch listRead-only
em-risk-escalator.eml file · em.risk_comments + account changelogEM sends ready-to-send .eml; log is a non-blocking side-effect
em-planning-assistance · Planning
daily-briefinggenerates a briefing artifactRead-only
em-am-signal-emitterpure formatter, no I/ORead-only
em-reporting · Reporting
monday-briefinggenerates a briefing artifactRead-only
em-bigmac-framework · Delivery
sprint-auditem.bigmac_* (run results) + HTML reports · tasks via em-task-managerAutomatic deterministic orchestrator writes local files
em-routines · Foundation
em-platform-morning-runem.signals · em.proposals (staged) · em.daily_plans stages judgment, never writes risks/feedback directlyAutomatic emits signals + stages proposals; nothing consequential applied
em-platform-closerem.proposals (apply) · em.daily_plans (close) · logger-owned tables via apply()Approval-gated applies only ticked proposals + the trust-ladder 'auto' path
em-platform-backfilllogger-owned tables factual replay only; no risks/tasks/plans/proposalsAutomatic ledgered, idempotent historical capture
Approval states
Required explicit confirm before the write Per-item / EM-driven human decides each item in-session Approval-gated a separate human Approve step (queue / checkbox) Automatic deterministic, writes without approval Delegated worker; inherits the caller's gate Read-only never writes