The gate (node-tools/internal/approval) derives a module's marked tools and verbs, and the subjects of its marked events and restricted streams, from its served entry (the build its composed environment's fingerprint names) and the newest, unioned while they differ, and the seat definitions' verb marks, which no holder unmarks. A bundle whose marks name a tool it does not register is not loaded, its finding mark-unserved raised through the runner's held writer and cleared when a bundle serves it. The first views now start whether or not the console listens, since the gate reads the catalog half too. Builds: design 46 7-approval-mark §5, §4 (at load), §3; design 34 every-event §33; lead answer A-154 Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
37 lines
1.3 KiB
Go
37 lines
1.3 KiB
Go
package runtime
|
|
|
|
import (
|
|
"github.com/novox/mesh-tools/node-tools/internal/approval"
|
|
"github.com/novox/mesh-tools/node-tools/internal/launch"
|
|
)
|
|
|
|
// FingerprintWord is the word of a module's composed environment that names the build its bundle serves (design 47 G §424).
|
|
const FingerprintWord = "MESH_FINGERPRINT"
|
|
|
|
// Gate is the approval gate the runner serves through (design 46 7-approval-mark §4, §20; node-tools/internal/approval).
|
|
type Gate interface {
|
|
// Unserved is, of a module's marked tools, those its bundle does not register, saying it as the module's finding.
|
|
Unserved(module, fingerprint string, registered []string) []string
|
|
}
|
|
|
|
// WithGate serves every call through the approval gate.
|
|
func WithGate(g Gate) Option { return func(c *consumers) { c.gate = g } }
|
|
|
|
var _ Gate = (*approval.Gate)(nil)
|
|
|
|
// unservedMarks is, of the module's marked tools, those its bundle's registrations under its own name do not register.
|
|
func (r *runner) unservedMarks(module string, regs []launch.Registration) []string {
|
|
if r.events.gate == nil {
|
|
return nil
|
|
}
|
|
var registered []string
|
|
for _, reg := range regs {
|
|
if reg.Module == module {
|
|
for _, t := range reg.Tools {
|
|
registered = append(registered, t.Name)
|
|
}
|
|
}
|
|
}
|
|
return r.events.gate.Unserved(module, r.fingerprintOf(module), registered)
|
|
}
|