Skip to main content

max / makenotwork

Retire the two unconditional Action::with suppliers `with` is a modifier now (quasi@94101e2), so auth_pages' reset_action and git_commit's note_delete are written on the action they belonged to. tip::checkout stays a supplier: its value really is conditional, which is the half the wave-3 refusal got right.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session
https://claude.ai/code/session_01MptwXZ8k65v19rFmdGAyki
Author: Max Johnson <me@maxj.phd> · 2026-09-04 16:30 UTC
Signed with PGP, not checked
Commit: 917a7119ff7170210380ddfae2411c7718aa7048
Parent: fd90160
2 files changed, +7 insertions, -30 deletions
@@ -307,18 +307,6 @@
307 307 }
308 308 }
309 309
310 - /// Where a new password is sent, with the signed token along for the ride.
311 - ///
312 - /// A supplier because `Action::with(name, value)` is refused as a production: a
313 - /// form has no way to say "and this value too, sometimes", and `doing` is the
314 - /// remedy the form already names for an action it cannot spell. Counted in the
315 - /// population for the reason `tip::checkout` is.
316 - fn reset_action(token: &str) -> Action {
317 - Action::post("/reset-password")
318 - .with("token", token)
319 - .replacing(FEEDBACK)
320 - }
321 -
322 310 declare! {
323 311 /// `/reset-password`.
324 312 ///
@@ -328,7 +316,7 @@
328 316 ///
329 317 /// The token rides on the action as a parameter rather than as a hidden
330 318 /// field. A hidden input is markup standing in for a value the call already
331 - /// carries. See [`reset_action`].
319 + /// carries, and `with` is what the vocabulary has for it.
332 320 #[must_use]
333 321 pub shape reset_password(valid: bool, token: &str, error: Option<&str>) -> Screen;
334 322
@@ -346,7 +334,8 @@
346 334
347 335 section "Set New Password" when valid;
348 336 text "Enter your new password below." when valid;
349 - form doing reset_action(token) when valid {
337 + form post "/reset-password" with "token" token replacing FEEDBACK
338 + when valid {
350 339 submit "Set Password";
351 340 field Secret "password" "New Password" {
352 341 required;
@@ -35,7 +35,7 @@
35 35
36 36 use makeover_layout as layout;
37 37 use quasi_declare::declare;
38 - use quasi_router::{Action, Document, RegionKind};
38 + use quasi_router::{Document, RegionKind};
39 39 use quasi_webview::Webview;
40 40
41 41 use crate::git::signing::SignatureStatus;
@@ -295,20 +295,6 @@
295 295 notes.iter().filter(|note| !note.read_only).collect()
296 296 }
297 297
298 - /// Where a note's delete goes, with the namespace along for the ride.
299 - ///
300 - /// A supplier because `Action::with(name, value)` is refused as a production: a
301 - /// form has no way to say "and this value too, sometimes", and `doing` is the
302 - /// remedy the form already names. Counted, for the reason `tip::checkout` is.
303 - fn note_delete(view: &View<'_>, namespace: &str) -> Action {
304 - Action::post(format!(
305 - "{}/commit/{}/notes/delete",
306 - view.base(),
307 - view.detail.oid
308 - ))
309 - .with("namespace", namespace.to_owned())
310 - }
311 -
312 298 declare! {
313 299 /// The write half for the repository's own notes.
314 300 ///
@@ -337,7 +323,9 @@
337 323 limited_to BODY_LIMIT;
338 324 }
339 325 }
340 - act "Remove the note in {note.namespace}" to doing note_delete(view, &note.namespace) {
326 + act "Remove the note in {note.namespace}"
327 + to post "{view.base()}/commit/{view.detail.oid}/notes/delete"
328 + with "namespace" note.namespace.clone() {
341 329 tone Danger;
342 330 }
343 331 }