You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Land the shared C++ interface headers + schema fixtures that every downstream issue codes against. This is the first development step after schema sign-off and the unlock for the parallel engine/wiring/trust tracks — once these compile, work fans out against interfaces instead of finished implementations.
A fake ClassifierServices for tests (fixed embeddings / fixed classifier scores).
Out of scope
Any implementation/behavior — the AST evaluator (#2378), registry (#2379), conditions/classifiers (#2380/#2381/#2405), engine assembly (#2382), parsing (#2383), real wiring (#2384). This issue is the contract surface only.
Acceptance
Headers compile standalone (no backend/Router includes).
The fake ClassifierServices builds and is usable from a trivial test.
Why it's its own issue
It gates four otherwise-parallel tracks (#2378, #2379, #2384, and the trust-milestone #2387 against the trace contract). Keeping it a visible node avoids a hidden serialization where everyone waits on whoever first defines the headers.
Goal
Land the shared C++ interface headers + schema fixtures that every downstream issue codes against. This is the first development step after schema sign-off and the unlock for the parallel engine/wiring/trust tracks — once these compile, work fans out against interfaces instead of finished implementations.
Scope (headers + fixtures only — no behavior)
Decision-side, no trust verdict in core):RouteContext(input text, params{model, has_tools, has_images, chars},metadata),Decision { route_to, matched_rule, default_used, outputs, trace },Rule { id, match, route_to, outputs },MatchExpr/Conditionnode.Classifier { Score evaluate(const ClassifierContext&) const; on_error }, theConditionleaf (deterministic op | classifier-condition band),ClassifierServices { embed(), run_classifier() }, and theRoutingPolicyEngineconstructor signature.collection.routerexamples (L0a–L3, from [Schema][Router] route_policy — routing block in collection.router JSON #2375) + aDecision/trace example ([Schema][Router] Decision + trace object (pure selection) #2376), checked in for downstream unit tests to load.ClassifierServicesfor tests (fixed embeddings / fixed classifier scores).Out of scope
Any implementation/behavior — the AST evaluator (#2378), registry (#2379), conditions/classifiers (#2380/#2381/#2405), engine assembly (#2382), parsing (#2383), real wiring (#2384). This issue is the contract surface only.
Acceptance
ClassifierServicesbuilds and is usable from a trivial test.Why it's its own issue
It gates four otherwise-parallel tracks (#2378, #2379, #2384, and the trust-milestone #2387 against the trace contract). Keeping it a visible node avoids a hidden serialization where everyone waits on whoever first defines the headers.
Depends on: #2375, #2376 (the frozen schemas)