Gates hold every decision
- Context: a send, a run or an answer decided by a rule or by an agent would let a thread’s or an agent’s text act under your name: an agent writes task properties, a classification’s output and a brief’s extra fields, and a thread’s author writes what the plugin reads. And a loop that asks before everything makes more work than it saves.
- Decision: every decision the loop could wait on you for (a draft, a run waiting for approval or trust, a question, an agent’s post, a proposal, a gated step) is a gate, and drafts, plan items, messages and proposals keep only their own lifecycles. You decide, per gate kind, name, workflow, intent or plugin, whether a gate waits for you, waits for its window or is released at once, in a
[gates.approval]table; the bundled profile only sets defaults. Every gate opens under the approval of what opened it: a workflow’s gates, its runs’, its drafts’, itsgate.opensteps’ and its verbs’, under the workflow’s, an intent’s drafts under the intent’s, and the rest undergates.toml’s. A[gates.approval]rule that releases a gate (a draft gate’s rule of any mode, any other gate’s of modesend,runordelay) fails to load when it reads a fact the facts table marks untrusted, a brief’s extra field, a classification’s output or a property an agent or a plugin writes, in an intent’s or a workflow’s manifest and inconfig.toml; what selects the work, a workflow’swhen, may read any. A proposal that pairs two tasks you took apart waits for you whatever its approval says. A resolution by a plugin is refused, and so is one by an agent unless it comes through a session you drive, as Authority comes from you says. - Consequence: what an agent writes can inform you, order your lists and pick which workflow asks, never release a post or a run by itself; a new fact, property or record kind that an agent or a plugin writes is untrusted from its first use, and a rule that needs it waits for you. Where the loop acts at once is where your approval says so, and what it did is named on the timeline.
- Enforced by:
TestApprovalRulesReadTrustedFacts,TestNoUnattendedAgentResolvesAGate,TestAGatedVerbOpensItsGateThroughTheService,TestASlackItemLinkingAPullRequestWithATaskIsMergedIntoIt,TestAFoldThatWaitsForYouMergesOnceApproved,TestASplitFoldWaitsForYouEverAfter,TestAPairYouUnrelatedIsNeverRelatedAgainOnItsOwn. See Gates.