Skip to content

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’, its gate.open steps’ and its verbs’, under the workflow’s, an intent’s drafts under the intent’s, and the rest under gates.toml’s. A [gates.approval] rule that releases a gate (a draft gate’s rule of any mode, any other gate’s of mode send, run or delay) 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 in config.toml; what selects the work, a workflow’s when, 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.