Align cleveractors-core to The Actor Configuration Standard v1.0.0 #9
Labels
No labels
auto/blocked-by-deps
auto/ci-timeout
auto/claimed-implementer
auto/claimed-merge
auto/claimed-reviewer
auto/driver-down
auto/invariant-violation
auto/last-attempt-tier-0
auto/last-attempt-tier-1
auto/last-attempt-tier-2
auto/last-attempt-tier-min
Automation Tracking
auto/needs-conflict-resolution
auto/needs-implementer
auto/postmortem
auto/ready-to-merge
auto/restart-throttled
auto/revert
auto/sentinel
auto/stale-inactivity
auto/unstable
Blocked
Bounty
$100
Bounty
$1000
Bounty
$10000
Bounty
$20
Bounty
$2000
Bounty
$250
Bounty
$50
Bounty
$500
Bounty
$5000
Bounty
$750
MoSCoW
Could have
MoSCoW
Must have
MoSCoW
Should have
Needs Feedback
Points
1
Points
13
Points
2
Points
21
Points
3
Points
34
Points
5
Points
55
Points
8
Points
88
Priority
Backlog
Priority
CI Blocker
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Signed-off: Owner
Signed-off: Scrum Master
Signed-off: Tech Lead
Spike
State
Completed
State
Duplicate
State
In Progress
State
In Review
State
Paused
State
Unverified
State
Verified
State
Wont Do
Type
Automation
Type
Bug
Type
Discussion
Type
Documentation
Type
Epic
Type
Feature
Type
Legendary
Type
Refactor
Type
Support
Type
Task
Type
Testing
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
cleveragents/cleveractors-core#9
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Overview
The Actor Configuration Standard (
actors-spec) v1.0.0 is the normative YAML schema, runtime semantics, and security model that all compliant implementations must satisfy.cleveractors-coreis the Python reference implementation, but a thorough audit reveals significant divergences:print(..., sys.stderr)signalling rather than spec-defined semanticssandbox.pydefinesSAFE_BUILTINSbutToolAgentbuilds its own parallel dict and never imports it[TOOL_EXECUTE:]block processing, routing prefix stripping, stream-route cycle detection) has no designated ownerminimal_contextpaper keys) are hardcoded in the framework coresession.pyis a one-line placeholder;network.pyraisesNotImplementedError; thelsp/module has no source filesactor-registry-standard.md) — a complete HTTP API for content-addressed package storage — is entirely unimplementedtypeCheckingModeis set to"off"inpyrightconfig.jsonThis Legendary tracks all work to bring
cleveractors-coreinto full conformance with both standards documents.Spec Documents
actors-spec/docs/index.md(v1.0.0)actors-spec/docs/actor-registry-standard.md(v1.0.0)Child Epics
Epic A1 — §3.1 + §11 + §16 + §20: Validation, Forbidden Patterns, File Merging, and Error Taxonomy
Enforce all §11 pre-instantiation validation rules and all §16 forbidden patterns as hard rejections. Currently accepted (and silently ignored) patterns that must produce
ConfigurationErrorinclude: top-levelstreams:/graphs:sections, list-formrouteswithfrom:/to:shorthand,agent_template:key,strategy:on composite agent,dynamic_routernode type, short-form bare-string prompts, sequence-form template parameters,template+typecoexisting on the same agent, andprompt+prompt_referenceon a chain agent.Additional scope beyond the original 9-epic draft:
metadata.error_typeis populated with the correct §20 category on every error emitted to__error__; ensureAgentCreationErroris raised for unavailable providers (notConfigurationError)verbose,logging.level,version) must be accepted without error even if they are not acted onEpic A2 — §4: Agent Type Completeness
Verify and complete all five agent types against the full §4 behavioral spec:
response_formatwith JSON schema forwarding), memory list capped atmax_history,conversation_historycontext pass-through whenmemory_enabled: false,_temperature_overridecontext key, system prompt rendered at invocation withcontext+message(warn and use literal on failure)_execute_python_codeto usesandbox.py'sSAFE_BUILTINS(currently a parallel dict); the 5-step tool invocation dispatch algorithm (single inline-code tool → full message; JSON withtoolkey; JSON parse failure error; space-separated command; unknown tool error); all seven built-in tools with their exact argument semantics;file_writemodes (w/a/insert,positionsemantics); progress bar facility (24-cell bar,█/░, percentage to 1 decimal, counter, optional label, trailing newline at 100%)strategy:key prohibition (already in §16; verify enforcement path)prompt/prompt_referencemutual exclusion; verify"ChainAgent processed: "prefix +" -> "separator semantics; no external callscontext.global) MUST be merged into each agent'sconfig.contextat creation time unless the agent declares its owncapabilitieslist andmetadatamapping; the 15 standard capability identifier strings ("text-generation","conversation","reasoning","analysis","creative-writing","structured-output","tool-execution","command-execution","http-requests","file-operations","math-evaluation","composite","stateful-workflow","reactive-processing","chain-processing") must all be supported; required per-agent metadata fields:name,type,capabilities,reactive: trueEpic A3 — §5 + §7.3: Stream Routes, Operators, Conditions, Bridge Routes, and Pipelines
Implement all 19 stream operators per §5.3 with exact semantics (including the 4 bridge operators:
graph_execute,state_update,state_checkpoint,graph_node). Enforcesubscriptionsas informational-only (canonical wiring is viamergesonly; no auto-subscription fromsubscriptionslist). Deprecate themerges: [{sources: [__input__], target: ...}]default-router approach in favour of thedefault_routerparameter.Additional scope:
"Error: <reason>",processed_bymetadata key,metadata.contextpropagation into outgoing messagessource_isonly in stream-router;context_value/output_pattern/message_patternonly in pure-graph edges;customonly in conditional graph nodes); §5.4.2 default-behavior table (stream-router → True on unknown type; bridgeconditional_route→ False; pure-graph edges → True with warning; conditional graph nodes → True)publicationstarget is also a merge/split source)upgrade_conditions,downgrade_conditions,state_extractor,state_flattener,preserve_subscriptions,preserve_checkpointing); all 7 bridge condition keys; advisory-only semantics (implementations MAY not act but MUST NOT reject valid bridge declarations)Epic A4 — §6: Graph Route Completeness
Complete all seven node types including
message_routerwith all five match modes (prefix/suffix/contains/regex/exact) and their extraction semantics. Implement the four §6.8 loop-detection guards with the preciseauto_finish_activebypass, 200-character fingerprint, and routing token list (GOTO_,ROUTE_,SET_,CMD_,DISCOVERY_RESPONSE,AUTO_SECTIONS_COMPLETE,COMMAND_OUTPUT). Replaceprint(..., file=sys.stderr)loop signals with proper exception/return-value semantics. Implement checkpointing + time travel (§6.6) and parallel node execution (§6.7). Implement pure-graph mode (§6.9) with post-execution context promotion.Additional scope:
replace,merge(default — deep for dicts, extend for lists),appendstate_classresolution; default fallback with warning on unknown class__<graph>_node_<node>__,__<graph>_control__,__<graph>_state__must be created with the correct reserved-name patternEpic A5 — §8: Three-Phase Template System
Implement the complete three-phase template lifecycle:
<<<TEMPLATE_START>>>/<<<TEMPLATE_END>>>/<<<BLOCK_START>>>/<<<BLOCK_END>>>) to protectsystem_promptexpressions during document parsingagent_ref/component_refresolution (local composite → outer actor scope)Add
template_strings:section support for templates whose{% for %}loops generate YAML keys. Verify all §8.3 built-in callables and filters for all three template engines (JINJA2, MUSTACHE, SIMPLE). Verify SIMPLE dialect's two-pass behavior (expression sandbox first, then format-string substitution).Additional scope:
"true"/"false"→bool, integer patterns →int, float patterns →float, valid JSON arrays/objects →list/dictConfigurationError(fatal); Phase B failure →ConfigurationError; Phase C failure → warn and use literal unrendered text (processing continues)Epic A6 — §13: Security Model
Align sandbox built-in allowlists to the two distinct §13 sets:
bool,dict,float,int,list,set,str,tuple,abs,all,any,enumerate,len,max,min,range,reversed,round,sorted,sum,zip,isinstance,type,locals,print,ValueError,IndexError,KeyError,TypeError,jsonmodule onlybool,dict,float,int,list,set,str,tuple,abs,all,any,len,max,min,round,sumonly (smaller set; nojson, no exception types, noisinstance)Consolidate all sandboxed execution to use a single source-of-truth dict (currently
sandbox.pydefinesSAFE_BUILTINSbutToolAgentbuilds its own parallel dict). Enforce two-factorfile_writerestriction (safe_mode: falsealone is insufficient — also requires_unsafe_mode: truein invocation context). Shell command blocklist (rm,del,format,shutdown,reboot,kill) applies in all modes regardless of safe/unsafe state.Epic A7 — §10 + §14: Context, Environment Variables, and Prompts
Complete global context inheritance per §4.9. Implement env var type coercion per §14 (when interpolation is the entire string value:
"true"/"false"→bool, integer patterns →int, float patterns →float; coercion applies recursively to all nested mappings and sequences). Enforce long-form prompts (reject bare-stringpromptsvalues; require{content: ...}mapping; silently skip non-conforming entries per §10.4).Verify §10.3 reserved context key enforcement: all 19 reserved keys documented in the spec; user keys MUST NOT begin with
__; keys beginning with_are strongly discouraged.Epic A8 — Actor Registry Standard: Package Registry HTTP API
Implement the HTTP API defined in
actor-registry-standard.md:GET /packages/{package_id},GET /{type}/{namespace}/{name}?version={v},POST /publish,GET /browse,GET /.well-known/cleverrouter-packagesvX.Y.Z(immutable),vX.Y.x/vX.x/latest(mutable aliases)actor,graph,stream,agent,template,skill,mcp,lspEpic A9 — Code Quality: Framework Depollution and Technical Debt
_strip_routing_prefixes's hardcoded paper-writer prefix list inapplication.py,minimal_context's paper-domain keys inconfig_parser.py, paper-stage list inrouting_adapter.pysession.py(1-line placeholder) andnetwork.py(NotImplementedError)lsp/module (only.pycfiles present; no source)typeCheckingMode: "standard"or"strict") and resolve all errorscomposite.pyparameter propagation stubEpic A10 — §12: Runtime Behavior
This section has no current owner and covers cross-cutting contracts that all other epics depend on for correctness.
content,metadata,source_stream,timestamp) must be present on all messages;metadata.contextMUST be preserved by reference on message copy; all other metadata MUST be shallow-copied (not deep-copied)context,_unsafe_mode,processed_by,error,error_type,timeout,state_updated,checkpointed,graph,node,execution_history,execution_count,final_state,source) and the rules for when each must be set__error__withcontent: <error string>,metadata.error: true,metadata.error_type: <§20 category>; downstream pipeline continues[TOOL_EXECUTE:]block processing: 5-rule algorithm — detect[TOOL_EXECUTE:<name>]...[/TOOL_EXECUTE]blocks across multiple lines in LLM output; sanitize JSON (escape unescaped backslashes, newlines, tabs, carriage returns); execute tool; substitute result in reverse-match orderGOTO_<TARGET>:,ROUTE_<TARGET>:,SET_<KEY>:,CMD_<KEY>:,COMMAND_OUTPUT:,DISCOVERY_RESPONSE:,AUTO_SECTIONS_COMPLETE:) must be stripped from__output__before exposing to the consumer; the current implementation has a hardcoded paper-writer-specific list (addressed in A9) and must be replaced with the spec-defined setEpic A11 — §17: Compliance Test Vectors
Build a structured compliance test suite covering all 12 §17 test vector categories. Without this epic, there is no systematic evidence that any other epic's work actually satisfies the spec. The 12 categories are:
llm,tool,composite,chain,template_instanceSuccess Criteria
ConfigurationErrortypeCheckingModeenabled with zero type errorsSAFE_BUILTINSis the single source of truth for all sandboxed execution, with the correct two-set split (§13.2.1 vs §13.2.2)This epic drafting should cover the full actors-spec as of commit
cleveragents/actors-spec@76e4299ae7, I haven't created those epics yet as the quick review shows that certain part of the spec may need to be updated. Once the spec is in good shape, I'll review the epic draft and create them.As of 2026 May 27, in the scrum meeting, Jeff advises Luis Mendes to prioritize integrating v2 as a stable working version, even if it disagrees with the spec. So for CleverRouter, I will start integrating the current version of CleverActors right away. This epic should be suspended for now.