v0.281.0: 'Done' asks the probe first; sign-up closed after the first admin (decision 47); R-713 code-bound values refused, ${NAME|base64}
gates / gates (push) Successful in 23s
gates / gates (push) Successful in 23s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -1,3 +1,28 @@
|
||||
## v0.281.0 — "Done" asks the app first; open sign-up closed once the first admin exists; a password is never read as code (2026-09-29)
|
||||
|
||||
**MinAgent: 0.131.0** (unchanged). Needs hub v0.123.0 (unchanged). New strings: `signup_closed.page_title`,
|
||||
`signup_closed.page_body`, `app_info.setup_gate_confirm`, `app_info.signup_title`, `app_info.signup_closed`,
|
||||
`app_info.signup_add_how`, `app_info.signup_open_until`, `app_info.signup_window_btn`, `err.setup_gate.probe_not_done`,
|
||||
`err.setup_gate.no_signup_block` (hu + en). Evidence: `felhom.eu/documentation/audits/gate-rollout-2026-09-29/`.
|
||||
|
||||
- **„Kész, beállítottam" asks the app first.** For an app with a `setup_done_probe:` the press reads it and REFUSES
|
||||
while it says "not done", and when it cannot be read (409, "The app says its first setup is not done yet. Create your
|
||||
account, then try again."). Measured 2026-09-29: uptime-kuma pressed before its setup answered anyone. A probe app
|
||||
now also shows the press. An app without a probe asks in the page first (`felhomConfirm`: "Press this only after
|
||||
you have created your own account. After this, anyone can reach the app's address.").
|
||||
- **Sign-up closed once the first admin exists (`09` §3 decision 47).** `.felhom.yml` `signup_block:` (a traefik
|
||||
matcher for the app's own sign-up address). When the setup gate opens, the box writes
|
||||
`<stacks>/traefik/dynamic/signup-block-<app>.yml` FIRST (a failed write keeps the gate closed), then removes the
|
||||
gate: that address alone answers "sign-up is closed" (`/__felhom_gate/signup-closed`, a page or 403 JSON). The app
|
||||
page's new sign-up card says how to add a family member (`app_info.add_people`, per app, hu + en) and has
|
||||
„Regisztráció megnyitása 15 percre" (`POST /apps/<slug>/signup-window`); the loop closes it again. Only an app
|
||||
whose gate this box opened gets a block — an installed app is never touched.
|
||||
- **R-713:** `after_install` refuses a value that would land inside code (text with spaces, quotes or brackets around
|
||||
the placeholder) when it holds a quote, a backslash, `$`, `{`, `}`, a backtick or a line break. Its own argument and
|
||||
plain arguments (`--password=${X}`, `admin:${X}`) take any value. New `${NAME|base64}`.
|
||||
- Tests: `TestSetupGateButton_*`, `TestSignupBlock_*`, `TestSignupClosed_*`, `TestSetupGatePage_ConfirmAndSignupCard`,
|
||||
`TestR713_*`. Red-proofs RP17–RP24, each seen failing on an assertion.
|
||||
|
||||
## v0.280.0 — the setup gate: a new app is closed to strangers until its household set it up; "I changed it"; an installed app's password leaves the page HTML; a generator with a special character (2026-09-29)
|
||||
|
||||
**MinAgent: 0.131.0** (unchanged). Needs hub v0.123.0 (unchanged). New strings: `setup_gate.page_title`,
|
||||
|
||||
Reference in New Issue
Block a user