Why
OpenSpine's product promise is that Lyra can grow into useful responsibility as the owner delegates work. The current implementation path is too close to the first Gmail proof:
- a
StandingRuleManifest identifies one ActionId plus budgets and expiry, but has no reviewed connector, account, target, counterparty, or task-shape scope;
- the proposal renderer is beginning to call that primitive a "responsibility" even though a standing rule is only an authority-composition input at one effect boundary;
- owner review is represented directly as Telegram copy/buttons rather than as a channel-neutral decision object;
- action explanations and delegatability are inferred in ad hoc code instead of being declared with the action.
This is a decomposition gap under the change-sequence rule: it needs a settled architecture/OpenSpec slice before more Gmail-specific behavior is added.
Product distinction to preserve
A standing rule is a kernel authority primitive: a reviewed shortcut at an effect boundary.
A responsibility is the owner-facing unit of delegation. It must explain the job, the workflow already in use, the exact scope in which effects may happen, the limits, exceptions, receipts, and controls. The first proof may compose an existing workflow with one scoped standing rule, but the architecture must not equate the two.
Contracts to define
1. Action descriptor
Add a catalog-owned descriptor for every action that may participate in reusable delegation. At minimum it must declare:
- canonical action ID and effect semantics;
- owner-facing verb, object, and target nouns;
- whether reusable delegation is supported;
- required reviewed scope dimensions;
- executor/effect-adapter identity;
- connector/egress/output classifications already owned by the catalog;
- whether dark-window defaults are permitted for this effect class.
An action without a complete descriptor is ineligible for a reusable-authority proposal. There is no guessed fallback such as reducing memory.read:owner_preferences_limited to "read."
2. Kernel-resolved action context
Define a typed ResolvedActionContext (name may change in design) produced by the kernel, never by the shell. It must be able to carry the relevant subset of:
- connector implementation and stable connector-instance identity;
- account role/account identity;
- canonical target references;
- bound counterparty identity and relationship tier where applicable;
- kernel-bound parameters;
- target and payload digests;
- egress/disclosure/output class;
- workflow/task-shape identity.
This is the reusable form of AD-036 and AD-120: the model sends an intent; the kernel determines the WHO/WHERE and the effect identity.
3. Reviewed action scope
Define a serializable, versioned ReviewedActionScope derived only from the resolved context. It must be possible to compare a live request against the reviewed scope deterministically without connector-specific branches in the standing-rule engine.
Communication effects must not be delegatable with action-only scope.
4. Delegation evidence
Define evidence that distinguishes:
- repeated approvals;
- an explicit owner request to create a rule;
- a correction or workflow proposal;
- a manually supplied artifact.
Repeated-approval evidence must bind the complete context class and an evidence-set digest/count, not one arbitrary source event. Owner-facing copy may say "Lyra noticed a pattern" only when that evidence exists.
5. Channel-neutral owner review
Define an OwnerReviewRequest (name may change) containing:
- proposal kind and provenance summary;
- plain-language responsibility description;
- exact reviewed scope;
- automatic effects and remaining approval/deny boundaries;
- budgets, expiry, drift/default behavior;
- digest/version binding;
- available decisions and lifecycle controls.
Telegram, terminal, web, and future owner channels render this object; they do not define its security semantics.
Required adversarial decisions
- Whether the first proof can represent a responsibility as a view over existing workflow + standing-rule artifacts, or whether an atomic
ResponsibilityManifest/bundle is required now.
- Whether dark-window
Allow remains legal for external communication effects; AD-012 is still marked leaning, so the default must be fail-closed until explicitly settled.
- Which context dimensions define the minimum safe equivalence class for email drafts and for a generic communication action.
- How descriptor/schema/policy drift moves an active responsibility to
needs_review.
- How a connector is removed or an account is reconfigured without leaving a zombie responsibility.
Invariants
- The task grant remains the only live authority object.
- Preferences and persona learning remain separate from authority.
- The shell cannot supply or widen trusted scope fields.
- A connector implementation cannot opt itself into delegation without catalog review.
- Missing descriptor, resolver, executor, or scope information fails closed before owner approval.
- No protocol name is embedded in the generic standing-rule matcher or owner-decision state machine.
Deliverables
- A new settled AD/D decision where needed.
- An OpenSpec change modifying the standing-rules/action/runtime contracts before behavioral implementation.
- Schema and pure-function contract tests for descriptor completeness, resolved-context construction, scope comparison, evidence classes, and owner-review serialization.
- An amended change sequence with explicit dependencies for the execution, scoped matching, owner-control, and first-proof slices.
Done when
- The repository has one documented meaning of responsibility, standing rule, resolved context, reviewed scope, and delegation evidence.
- A synthetic non-Gmail communication action can be described and scope-compared without changing the generic contracts.
- An action with missing delegation metadata cannot reach proposal review.
- Existing Gmail behavior remains unchanged; this issue defines the contract rather than prematurely shipping the autonomous path.
Relationship
Parent: #123.
Blocks the executable delegation, scoped matching, channel-neutral review, and first end-to-end proof slices.
Why
OpenSpine's product promise is that Lyra can grow into useful responsibility as the owner delegates work. The current implementation path is too close to the first Gmail proof:
StandingRuleManifestidentifies oneActionIdplus budgets and expiry, but has no reviewed connector, account, target, counterparty, or task-shape scope;This is a decomposition gap under the change-sequence rule: it needs a settled architecture/OpenSpec slice before more Gmail-specific behavior is added.
Product distinction to preserve
A standing rule is a kernel authority primitive: a reviewed shortcut at an effect boundary.
A responsibility is the owner-facing unit of delegation. It must explain the job, the workflow already in use, the exact scope in which effects may happen, the limits, exceptions, receipts, and controls. The first proof may compose an existing workflow with one scoped standing rule, but the architecture must not equate the two.
Contracts to define
1. Action descriptor
Add a catalog-owned descriptor for every action that may participate in reusable delegation. At minimum it must declare:
An action without a complete descriptor is ineligible for a reusable-authority proposal. There is no guessed fallback such as reducing
memory.read:owner_preferences_limitedto "read."2. Kernel-resolved action context
Define a typed
ResolvedActionContext(name may change in design) produced by the kernel, never by the shell. It must be able to carry the relevant subset of:This is the reusable form of AD-036 and AD-120: the model sends an intent; the kernel determines the WHO/WHERE and the effect identity.
3. Reviewed action scope
Define a serializable, versioned
ReviewedActionScopederived only from the resolved context. It must be possible to compare a live request against the reviewed scope deterministically without connector-specific branches in the standing-rule engine.Communication effects must not be delegatable with action-only scope.
4. Delegation evidence
Define evidence that distinguishes:
Repeated-approval evidence must bind the complete context class and an evidence-set digest/count, not one arbitrary source event. Owner-facing copy may say "Lyra noticed a pattern" only when that evidence exists.
5. Channel-neutral owner review
Define an
OwnerReviewRequest(name may change) containing:Telegram, terminal, web, and future owner channels render this object; they do not define its security semantics.
Required adversarial decisions
ResponsibilityManifest/bundle is required now.Allowremains legal for external communication effects; AD-012 is still marked leaning, so the default must be fail-closed until explicitly settled.needs_review.Invariants
Deliverables
Done when
Relationship
Parent: #123.
Blocks the executable delegation, scoped matching, channel-neutral review, and first end-to-end proof slices.