Skip to content

canon(methods): add dispatch-paths — assistant-orchestrated vs autonomous-trigger#201

Merged
klappy merged 1 commit into
mainfrom
claude/dispatch-paths-179f
May 12, 2026
Merged

canon(methods): add dispatch-paths — assistant-orchestrated vs autonomous-trigger#201
klappy merged 1 commit into
mainfrom
claude/dispatch-paths-179f

Conversation

@klappy
Copy link
Copy Markdown
Owner

@klappy klappy commented May 12, 2026

Adds klappy://canon/methods/dispatch-paths as a Tier-2 method naming the two dispatch classes a spawned-agent-session runtime can be invoked through.

What this PR adds

One new file: canon/methods/dispatch-paths.md (1334 words, 104 lines, 6 sections).

The two paths

  • Assistant-orchestrated — an assistant (Claude, OpenCode, etc.) in a chat session dispatches a runtime invocation, waits for the result, and consumes it on behalf of an operator who is watching. engagement=assistant permitted. The skills/managed-agents/SKILL.md is the canonical implementation.

  • Autonomous-trigger — an external event (webhook, queue message, alarm, object-store notification, AMS frame) wakes the runtime with no assistant in the loop. engagement=agent mandatory per klappy://canon/constraints/mode-discipline-and-bottleneck-respect. Errors emit to configured targets, not into a void. The AMS audit gate (forthcoming) is the first implementation.

Single decision rule

When the runtime returns, who reads the result first? If a human via a chat assistant → assistant-orchestrated. Anything else (webhook responder, PR comment, downstream worker, AMS subscriber, database, email) → autonomous-trigger.

The two paths are not interchangeable. Wiring autonomous-trigger but treating it like assistant-orchestrated (e.g., a persona emitting clarifying questions into a Slack webhook nobody watches) is the most common failure mode this doc exists to prevent.

Pairing with PR #198 (trigger-source-taxonomy)

This doc names the dispatch classes. Trigger-source-taxonomy (#198, drafted but pending merge) names the input edges that wake the autonomous-trigger class. Together they cover the "how does a runtime get invoked" question at two altitudes — class (this doc) and routing convention (#198).

Prior art and confidence

Prior art: messaging architecture's request-reply vs publish-subscribe; serverless platforms' synchronous vs event-driven invocation. The contribution is the specific binding to the persona-shaped runtime's engagement dimension.

Confidence: working belief, two implementations. Consistent with deployed managed-agents skill and in-design AMS audit gate. Retraction conditions stated.

Word budget

Hard cap was ~1500 words. Final: 1334 words. The trigger-source-taxonomy draft hit 5962 words against the same target; this draft was scoped tightly enough to land under-budget. Learning encoded in journal/2026-05-11-trigger-taxonomy-drafting.tsv.

Status

status: proposed. Awaits operator review.


Note

Low Risk
Low risk: adds a new Tier-2 canon markdown document only, with no code or runtime behavior changes.

Overview
Introduces canon/methods/dispatch-paths.md, a Tier-2 method that names and defines the two supported dispatch classes for spawned-agent-session runtime invocations: assistant-orchestrated (results consumed inline by a chat assistant, allowing engagement=assistant) vs autonomous-trigger (event-driven invocations with no assistant in the loop, requiring engagement=agent and configured error/result emissions).

Includes a decision rule/tree for selecting the path, plus guidance on expected deployment shapes and failure modes when treating autonomous-trigger flows like assistant-orchestrated ones.

Reviewed by Cursor Bugbot for commit 8e86fcd. Bugbot is set up for automated code reviews on this repo. Configure here.

…mous-trigger

Adds klappy://canon/methods/dispatch-paths as a Tier-2 method naming the two dispatch classes a spawned-agent-session runtime can be invoked through:

- Assistant-orchestrated — an assistant in a chat session dispatches and consumes the result; engagement=assistant permitted; the managed-agents skill is the canonical example.
- Autonomous-trigger — an external event wakes the runtime with no assistant in the loop; engagement MUST be agent per mode-discipline-and-bottleneck-respect; errors emit to configured targets; AMS audit gate is the first impl.

Single decision rule: when the runtime returns, who reads the result first? Human via chat assistant → orchestrated. Anything else → autonomous. No third path; mixed deployments are two wirings.

Pairs with klappy://canon/methods/trigger-source-taxonomy: this doc names the dispatch classes; that doc names the input edges that wake the autonomous-trigger path.

Operationalizes klappy://canon/principles/agents-need-their-own-wire for the dispatch layer (autonomous-trigger is the path that removes the human-as-relay).

Status proposed; 1334 words; under-budget per planning constraint.
@github-actions
Copy link
Copy Markdown

Canon Quality — Frontmatter Schema ✅

All 40 file(s) in writings/ conform to klappy://canon/meta/frontmatter-schema.

Validator: scripts/validate-frontmatter.py · Canon: klappy://canon/constraints/frontmatter-validation-before-merge · Run: #133

@github-actions
Copy link
Copy Markdown

Canon Quality — oddkit_audit ⚠️

8 finding(s) in writings/ (39 files scanned). Mode: soft.

writings/agentic-software-development.md — 1 finding(s)
Line Rule Occurrence Message
242 dead-reference klappy://writings/nothing-new-even-ai URI does not resolve
writings/choosing-faith-not-fear.md — 1 finding(s)
Line Rule Occurrence Message
203 dead-reference klappy://writings/four-questions-that-change-everything URI does not resolve
writings/getting-started-with-odd-and-oddkit.md — 4 finding(s)
Line Rule Occurrence Message
69 legacy-link-pattern /page/writings/the-journey-from-ai-tasks-to-ai-augmented-workflows Use a klappy:// URI instead of /page/ path
202 legacy-link-pattern /page/docs/oddkit/proactive/proactive-bootstrap Use a klappy:// URI instead of /page/ path
204 legacy-link-pattern /page/docs/examples/project-instructions-template Use a klappy:// URI instead of /page/ path
260 legacy-link-pattern /page/writings/the-journey-from-ai-tasks-to-ai-augmented-workflows Use a klappy:// URI instead of /page/ path
writings/the-broken-wall-and-the-buried-talent.md — 1 finding(s)
Line Rule Occurrence Message
332 dead-reference klappy://draft-zeros/appendix-a-the-biblical-roots URI does not resolve
writings/the-voice-came-first.md — 1 finding(s)
Line Rule Occurrence Message
244 dead-reference klappy://writings/four-questions-that-change-everything URI does not resolve

Soft-block mode — this status is informational; the job will not fail. Hard-block ships in PR-3.2 after the observation cycle.

What to do for each finding:

  • Fix the slug if the target now lives at a different klappy:// URI.
  • Remove the link if it is no longer needed.
  • Allowlist with a reason if the rot is intentional (e.g. forward-ref to an upcoming article): place <!-- audit-allow: dead-reference reason="..." --> on the line above the offending link. The directive is line-level and scopes to the next markdown link.

Spec: klappy://docs/oddkit/specs/oddkit-audit · Workflow: .github/workflows/canon-quality.yml · Run: #133

@klappy klappy merged commit c20fee7 into main May 12, 2026
3 checks passed
@klappy klappy deleted the claude/dispatch-paths-179f branch May 12, 2026 02:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant