one gesture beside the reply corrects a turn (V-630)

Two buttons' worth of cost: wrong, or wrong and it should have been this.
The second is worth much more and is not required to give the first, so a
turn marked wrong with no target still lands as a usable negative.

The target is one of the seven intents, never free text: an unroutable label
would enter the one table V-632 fits prototypes from.

/api/correct is not behind the step-up gate. It reaches no router, no model
and no act path, and a correction that costs a passkey tap is one that does
not get made.
This commit is contained in:
2026-08-06 19:45:50 +04:00
parent 4d97280d74
commit 0d5bd0a9f0
5 changed files with 274 additions and 2 deletions
+7
View File
@@ -210,6 +210,13 @@ func main() {
mux.HandleFunc("/routines", gatedPage(handleRoutines))
mux.HandleFunc("/api/chat", gatedPage(handleChatAPI))
mux.HandleFunc("/api/revert", gatedPage(handleRevert))
// POST /api/correct is deliberately NOT on the step-up list (V-630). It
// reaches no router, no model and no act path: it writes one label row that
// nothing executes from. A correction that costs a passkey tap is a
// correction the owner does not make, and then the table stays empty.
mux.HandleFunc("/api/correct", func(w http.ResponseWriter, r *http.Request) {
handleCorrectAPI(w, r, core)
})
mux.HandleFunc("/models", func(w http.ResponseWriter, r *http.Request) {
handleModels(w, r, core, swapConn, stepUpSession, *requireStepUp)
})