router: add CapabilitySelection field to Decision (slice 6b)

Authoritative record of which executable capability matched, separate
from Decision.Intent (what kind of turn) and ActionCandidate (downstream
action artifact). Decision.Slots.Fn/Args/HasFn remain as compatibility
representations populated from this selection.
This commit is contained in:
2026-09-06 21:02:09 +04:00
parent 8d83c66d11
commit 4b24fbad98
+10
View File
@@ -150,6 +150,16 @@ type Decision struct {
Slots Slots
Clarify bool // stage 3: below threshold — ask, don't guess
// CapabilitySelection — the authoritative result of the capability-
// selection stage. Says what executable capability matched, separate
// from what kind of turn this is (Decision.Intent) and separate from
// the downstream action artifact (ActionCandidate).
//
// Decision.Slots.Fn/Args/HasFn remain as compatibility representations
// populated FROM this selection. Later action execution must read the
// candidate produced from this selection, not the compatibility fields.
CapabilitySelection CapabilitySelection
// Producer — which cascade stage produced this decision. Recorded for
// observability so a trace can name the winning component directly.
Producer RouteProducer