furtka/furtka
Daniel Maksymilian Syrnicki 1a2b817eb8
All checks were successful
CI / lint (pull_request) Successful in 31s
CI / test (pull_request) Successful in 1m27s
CI / validate-json (pull_request) Successful in 25s
CI / markdown-links (pull_request) Successful in 54s
Build ISO / build-iso (push) Successful in 18m35s
CI / lint (push) Successful in 29s
CI / test (push) Successful in 1m20s
CI / validate-json (push) Successful in 25s
CI / markdown-links (push) Successful in 54s
fix(deps): give on_start hooks the consumer's stored credentials
The reconciler handed an on_start dependency hook only
FURTKA_CONSUMER_APP/_VERSION, so it had no way to learn the consumer's
existing secrets. That made the feature's own headline use case —
re-create a provider account (e.g. an MQTT user) after a wipe with the
same password the consumer already holds — impossible unless the
provider stashed a copy itself.

on_start now also receives the consumer's .env values, namespaced under
FURTKA_CONSUMER_ENV_<KEY> (UPPER_SNAKE_CASE keys only, so a hand-edited
.env can't produce a malformed --env arg). on_start stays read-only
toward the consumer: unlike on_install, its stdout is intentionally not
merged back into the consumer's .env.

Surfaced building the first real provider/consumer catalog pair
(mosquitto + zigbee2mqtt) in daniel/furtka-apps.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-28 23:45:42 +02:00
..
__init__.py feat(furtka): resource-manager skeleton — manifest, scanner, CLI 2026-04-15 09:59:41 +02:00
_release_common.py feat(catalog): on-box apps catalog synced independently of core version 2026-04-20 14:16:02 +02:00
api.py chore: ruff format 2026-05-11 20:10:04 +02:00
auth.py feat(auth): rate-limit failed logins with per-(user, IP) lockout 2026-04-22 17:27:14 +02:00
catalog.py feat(catalog): on-box apps catalog synced independently of core version 2026-04-20 14:16:02 +02:00
cli.py chore: ruff format 2026-05-11 20:10:04 +02:00
deps.py chore: ruff format 2026-05-11 20:10:04 +02:00
dockerops.py chore: ruff format 2026-05-11 20:10:04 +02:00
https.py fix(https): make HTTPS opt-in to stop the BAD_SIGNATURE trap on fresh installs 2026-04-21 19:30:04 +02:00
install_runner.py chore: ruff format 2026-05-11 20:10:04 +02:00
installer.py feat(apps): app-to-app dependencies with install + start hooks 2026-05-11 19:39:10 +02:00
manifest.py chore: ruff format 2026-05-11 20:10:04 +02:00
passwd.py fix: unbreak upgrade path + install-lock race 2026-04-21 17:03:28 +02:00
paths.py fix: auth-guard / and /settings, add Logout link to static navs 2026-04-21 18:16:42 +02:00
reconciler.py fix(deps): give on_start hooks the consumer's stored credentials 2026-05-28 23:45:42 +02:00
scanner.py fix(furtka): audit follow-ups — placeholder secrets, isolate reconcile, .env perms 2026-04-15 10:17:00 +02:00
sources.py feat(catalog): on-box apps catalog synced independently of core version 2026-04-20 14:16:02 +02:00
updater.py fix(https): make HTTPS opt-in to stop the BAD_SIGNATURE trap on fresh installs 2026-04-21 19:30:04 +02:00