admin
5b8656974b
R-717: after_setup open_command — the family window reopens an app's DB-held sign-up switch
...
The command form ran only when the lock was SET, so a database switch closed by
`command` stayed closed through the household's 15-minute window. New twin
fields `open_command` + `open_success` (same service/user/args_env and the same
argv-safe expansion and success-marker rules as `command`/`success`).
- liftNativeLock (the window, via OpenSignupWindow → goNativeLock(false)): marks
the gate record native_lock "opening" BEFORE anything opens, lifts the env,
runs open_command; only full success records "lifted". A failed open closes
the switch again at once and records after_setup {ok: false, step: open}; the
app page shows its own line (app_info.signup_native_open_failed).
- The close: reconcileSignupBlocks (every 20 s and at controller start) runs
`command` for any non-"applied" state once no window runs. A failed close
after a window is logged ERROR ("may still be OPEN past the household's
window") and retried every nativeLockOpenRetry (2 min) instead of 30.
- After a successful app update, verifyAndConclude → markNativeLockForReapply
sets native_lock "" so the loop closes the switch again.
- A template with `command` but no `open_command` keeps today's window (env
only) and logs once per app that its own switch cannot be reopened.
Tests: internal/stacks/after_setup_r717_test.go (7), web render + parity case.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
2026-10-06 15:15:33 +02:00
..
2026-10-06 15:15:33 +02:00
2026-10-06 15:15:33 +02:00
2026-09-26 10:35:22 +02:00
2026-08-12 15:27:29 +02:00
2026-09-18 11:44:30 +02:00
2026-09-18 11:44:30 +02:00
2026-10-06 02:01:12 +02:00
2026-08-08 16:29:52 +02:00
2026-07-25 07:37:02 +02:00
2026-08-07 21:20:26 +02:00
2026-07-24 09:16:28 +02:00
2026-10-05 23:12:59 +02:00
2026-09-18 10:15:56 +02:00
2026-08-10 13:41:32 +02:00
2026-08-10 13:41:32 +02:00
2026-10-01 21:01:42 +02:00
2026-09-30 10:31:55 +02:00
2026-09-21 07:45:56 +02:00
2026-09-18 10:15:56 +02:00
2026-09-18 11:44:30 +02:00
2026-09-21 07:45:56 +02:00
2026-07-29 08:30:36 +02:00
2026-09-21 07:45:56 +02:00
2026-09-21 07:45:56 +02:00
2026-09-21 07:45:56 +02:00
2026-09-21 07:45:56 +02:00
2026-07-24 20:55:44 +02:00
2026-07-23 12:54:59 +02:00
2026-08-06 08:17:48 +02:00
2026-09-18 11:44:30 +02:00
2026-09-18 11:44:30 +02:00
2026-09-21 07:45:56 +02:00
2026-08-05 07:17:13 +02:00
2026-10-01 21:01:42 +02:00
2026-10-01 21:01:42 +02:00
2026-10-01 21:01:42 +02:00
2026-10-06 15:15:33 +02:00
2026-09-18 14:19:31 +02:00
2026-09-24 12:18:39 +02:00
2026-07-25 07:44:08 +02:00
2026-09-17 17:36:08 +02:00
2026-09-20 18:10:53 +02:00
2026-09-20 18:10:53 +02:00
2026-09-18 10:15:56 +02:00
2026-08-21 21:29:01 +02:00
2026-08-07 21:20:26 +02:00
2026-08-14 08:10:59 +02:00
2026-09-18 11:44:30 +02:00
2026-10-05 20:12:56 +02:00
2026-09-17 10:45:29 +02:00
2026-10-01 21:01:42 +02:00
2026-09-17 10:45:29 +02:00
2026-09-30 10:31:55 +02:00
2026-07-25 07:37:02 +02:00
2026-08-04 18:17:05 +02:00
2026-10-02 07:42:47 +02:00
2026-10-02 07:42:47 +02:00
2026-07-25 07:37:02 +02:00
2026-07-26 08:12:57 +02:00
2026-07-26 08:12:57 +02:00
2026-09-15 10:12:08 +02:00
2026-07-26 08:12:57 +02:00
2026-09-23 13:51:21 +02:00
2026-10-05 22:24:23 +02:00
2026-09-18 11:44:30 +02:00
2026-07-20 13:55:03 +02:00
2026-10-05 23:12:59 +02:00
2026-10-06 15:15:33 +02:00
2026-10-05 23:12:59 +02:00
2026-10-05 20:12:56 +02:00
2026-10-02 07:42:47 +02:00
2026-10-06 02:01:12 +02:00
2026-10-06 15:15:33 +02:00
2026-09-26 10:35:22 +02:00
2026-10-02 07:42:47 +02:00
2026-07-26 08:12:57 +02:00
2026-10-05 23:12:59 +02:00
2026-07-24 09:16:28 +02:00
2026-08-02 19:56:20 +02:00
2026-09-18 11:44:30 +02:00
2026-09-25 13:32:30 +02:00
2026-09-28 09:57:11 +02:00
2026-09-29 08:51:46 +02:00
2026-09-29 08:51:46 +02:00
2026-09-18 15:07:49 +02:00
2026-07-24 10:14:25 +02:00
2026-07-24 12:43:14 +02:00
2026-07-24 09:16:28 +02:00
2026-07-25 07:37:02 +02:00
2026-09-20 14:31:52 +02:00
2026-07-21 16:19:58 +02:00
2026-10-05 09:27:16 +02:00
2026-07-25 07:37:02 +02:00
2026-07-25 07:37:02 +02:00
2026-09-18 11:44:30 +02:00
2026-07-22 14:12:43 +02:00
2026-07-30 14:10:20 +02:00
2026-07-22 13:49:57 +02:00
2026-09-17 17:36:08 +02:00
2026-09-28 18:38:30 +02:00
2026-09-18 11:44:30 +02:00
2026-09-18 10:15:56 +02:00
2026-10-05 21:55:37 +02:00
2026-07-28 13:12:37 +02:00
2026-08-05 07:17:20 +02:00
2026-08-06 16:44:05 +02:00
2026-09-18 10:15:56 +02:00
2026-09-18 10:15:56 +02:00
2026-08-07 18:04:26 +02:00
2026-10-05 20:12:56 +02:00
2026-08-12 13:49:15 +02:00
2026-10-05 21:55:37 +02:00
2026-10-06 02:37:34 +02:00
2026-10-05 23:12:59 +02:00
2026-10-05 20:12:56 +02:00
2026-08-23 11:21:06 +02:00
2026-09-18 14:19:31 +02:00
2026-09-18 14:19:31 +02:00
2026-09-18 14:19:31 +02:00
2026-10-05 20:12:56 +02:00
2026-10-05 20:12:56 +02:00
2026-08-30 21:03:29 +02:00
2026-09-18 11:44:30 +02:00
2026-09-18 14:19:31 +02:00
2026-09-18 10:15:56 +02:00
2026-09-29 16:19:12 +02:00
2026-10-06 02:37:34 +02:00
2026-10-06 15:15:33 +02:00
2026-09-18 10:15:56 +02:00
2026-09-16 21:02:51 +02:00
2026-09-16 21:02:51 +02:00
2026-09-17 10:45:29 +02:00
2026-09-17 10:45:29 +02:00
2026-09-18 11:44:30 +02:00
2026-09-18 10:15:56 +02:00
2026-09-17 21:02:47 +02:00
2026-10-05 20:12:56 +02:00
2026-10-05 20:12:56 +02:00
2026-10-05 22:24:23 +02:00
2026-09-23 13:51:21 +02:00
2026-10-06 02:01:12 +02:00
2026-09-23 17:16:57 +02:00
2026-10-06 11:39:25 +02:00
2026-09-23 20:25:28 +02:00
2026-09-24 08:15:27 +02:00
2026-10-05 20:12:56 +02:00
2026-09-25 11:19:27 +02:00
2026-09-24 16:49:43 +02:00
2026-09-29 16:19:12 +02:00
2026-09-26 10:35:22 +02:00
2026-09-26 10:35:22 +02:00
2026-09-26 10:35:22 +02:00
2026-09-28 18:38:30 +02:00
2026-09-29 08:51:46 +02:00
2026-10-05 21:55:37 +02:00
2026-10-01 21:01:42 +02:00
2026-10-05 09:27:16 +02:00
2026-09-28 18:38:30 +02:00
2026-10-01 21:01:42 +02:00
2026-08-12 18:42:02 +02:00
2026-08-06 08:06:57 +02:00
2026-10-05 20:12:56 +02:00
2026-08-12 18:42:02 +02:00
2026-08-07 12:01:30 +02:00
2026-09-18 11:44:30 +02:00
2026-08-05 12:45:48 +02:00
2026-08-02 19:56:20 +02:00
2026-08-21 21:04:16 +02:00
2026-08-07 18:04:26 +02:00
2026-08-06 16:44:05 +02:00
2026-09-17 10:45:29 +02:00
2026-08-07 18:04:26 +02:00
2026-07-25 07:44:08 +02:00
2026-09-17 14:50:57 +02:00
2026-10-05 22:24:22 +02:00
2026-09-17 17:36:08 +02:00
2026-09-29 09:57:58 +02:00
2026-09-29 08:51:46 +02:00
2026-10-01 21:01:42 +02:00
2026-10-01 21:01:42 +02:00
2026-07-24 12:08:43 +02:00
2026-07-24 12:08:43 +02:00
2026-09-18 11:44:30 +02:00
2026-09-29 09:57:58 +02:00
2026-09-13 12:07:35 +02:00
2026-09-18 14:19:31 +02:00
2026-09-18 15:07:49 +02:00
2026-10-05 21:55:37 +02:00
2026-07-25 07:37:02 +02:00
2026-07-25 07:37:02 +02:00
2026-07-24 13:48:08 +02:00
2026-09-23 20:25:28 +02:00
2026-09-18 14:19:31 +02:00
2026-07-28 16:36:47 +02:00
2026-07-28 16:36:47 +02:00
2026-09-18 10:15:56 +02:00
2026-09-23 11:12:49 +02:00
2026-09-21 12:48:55 +02:00
2026-09-25 11:19:27 +02:00