feat(server): INGEST_WING_ROUTING wires the Router; remove the classifier path (#208)
Removes the LLM classifier, the substring 'BM25' scorer, the agreement gate, the backtest and the old migrate/wingmigrate tooling: measured at 2 of 55 pages placed (#208), and the migration was built for the per-wing facts layout this branch replaces. wing now holds the decision types, the Router and KnownWings. INGEST_WING_ROUTING=1 builds the Router (default wing INGEST_DEFAULT_WING=web-clip, client pattern from INGEST_CLIENT_BLOCK or CLAUDE_INGEST_CLIENT_BLOCK); a bad default or pattern is fatal at startup. Watcher tests rewritten for the Router, including a deliberate subfolder into any existing wing, typo'd folders parked, forged-key and edit-while-placing cases. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -8,12 +8,6 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Placer decides where a raw note goes. Router is the production
|
||||
// implementation; the interface lets the watcher stay ignorant of how.
|
||||
type Placer interface {
|
||||
Resolve(ctx context.Context, n Note) Decision
|
||||
}
|
||||
|
||||
// Router places a note with rules only, no model (hyperguild#208):
|
||||
//
|
||||
// 1. A subfolder or frontmatter `wing:` is the owner's deliberate choice. It
|
||||
@@ -68,3 +62,23 @@ func (r Router) explicit(w, via string) Decision {
|
||||
}
|
||||
return Decision{Wing: w, Source: Explicit, Confidence: 1, Reason: "named by " + via}
|
||||
}
|
||||
|
||||
// NewRouter builds the production Router. defaultWing must be a plain wing
|
||||
// name; clientPattern, when set, is a case-insensitive regexp over note text
|
||||
// whose match parks an unsignalled note instead of filing it. Both fail at
|
||||
// startup rather than later: a client filter that silently does nothing is
|
||||
// worse than none.
|
||||
func NewRouter(brainDir, defaultWing, clientPattern string) (Router, error) {
|
||||
if defaultWing == "" || !plainWingName(defaultWing) {
|
||||
return Router{}, fmt.Errorf("default wing %q is not a plain wing name", defaultWing)
|
||||
}
|
||||
r := Router{BrainDir: brainDir, Default: defaultWing}
|
||||
if clientPattern != "" {
|
||||
re, err := regexp.Compile("(?i)" + clientPattern)
|
||||
if err != nil {
|
||||
return Router{}, fmt.Errorf("client-content pattern: %w", err)
|
||||
}
|
||||
r.ClientBlock = re
|
||||
}
|
||||
return r, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user