Shop und ApiCore zeigen je Charge denselben Restbestand: bezahlte Verkäufe gehen an ApiCore, Entnahmen in ApiCore kommen sofort im Shop an.
Umgesetzt
Warteschlange apicore_stock_events in derselben Transaktion wie der Statuswechsel, feste Buchungs-ID, Chargen-Zuordnung je Position (93b589f, Migration 20261002120000_apicore_stock_sync)
Webhook POST /api/apicore/webhook (HMAC-signiert) für stock.changed
Nachhol-Skript pnpm stock:apicore-sync und CronJob wabenhain-apicore-stock alle 10 Minuten (k8s/07-backup-cronjob.yaml)
Dashboard zeigt hängende oder abgelehnte Buchungen und unverknüpfte Produkte
Code ist im produktiven Build sha-0d254db enthalten
Offen
APICORE_WEBHOOK_SECRET fehlt im Cluster-Secret wabenhain-secrets (Schlüsselnamen geprüft am 2026-10-16); ohne ihn antwortet der Webhook mit 503
In ApiCore: Webhook für stock.changed auf https://wabenhain.com/api/apicore/webhook anlegen und dem Shop-Schlüssel die Berechtigung shop-sync:write geben (Stand unbekannt)
Kerzen und Propolis in ApiCore als „Hergestellte Ware“ mit Herstellungscharge anlegen und im Shop verknüpfen
Danach einmal einen Testkauf mit Storno durchspielen und den Bestand in beiden Systemen vergleichen
Abhängigkeiten / Blocker
Secret, ApiCore-Einstellungen und das Fortsetzen des CronJobs kann nur der Inhaber freigeben bzw. anlegen.
Grundlage
README, Abschnitt „Bestandsabgleich“; Design im ApiCore-Repo docs/superpowers/specs/2026-10-02-bestandsabgleich-design.md. Verwandt: #14.
Status
Code: ja · Geprüft: ja (Unit-Tests stock-math, inventory, webhook-signature) · Gemergt: ja · Produktiv: teilweise (Code live, Webhook und CronJob nicht wirksam)
Stand: 2026-10-16 (Quelle: git origin/main 35e7c84, Cluster-Abfrage nur lesend am 2026-10-16, Session-Status, Memory)
## Ziel
Shop und ApiCore zeigen je Charge denselben Restbestand: bezahlte Verkäufe gehen an ApiCore, Entnahmen in ApiCore kommen sofort im Shop an.
## Umgesetzt
- [x] Warteschlange `apicore_stock_events` in derselben Transaktion wie der Statuswechsel, feste Buchungs-ID, Chargen-Zuordnung je Position (`93b589f`, Migration `20261002120000_apicore_stock_sync`)
- [x] Webhook `POST /api/apicore/webhook` (HMAC-signiert) für `stock.changed`
- [x] Nachhol-Skript `pnpm stock:apicore-sync` und CronJob `wabenhain-apicore-stock` alle 10 Minuten (`k8s/07-backup-cronjob.yaml`)
- [x] Dashboard zeigt hängende oder abgelehnte Buchungen und unverknüpfte Produkte
- [x] Code ist im produktiven Build sha-0d254db enthalten
## Offen
- [ ] `APICORE_WEBHOOK_SECRET` fehlt im Cluster-Secret `wabenhain-secrets` (Schlüsselnamen geprüft am 2026-10-16); ohne ihn antwortet der Webhook mit 503
- [ ] In ApiCore: Webhook für `stock.changed` auf `https://wabenhain.com/api/apicore/webhook` anlegen und dem Shop-Schlüssel die Berechtigung `shop-sync:write` geben (Stand unbekannt)
- [ ] CronJob `wabenhain-apicore-stock` ist im Cluster ausgesetzt (`suspend: true`), siehe #23
- [ ] Kerzen und Propolis in ApiCore als „Hergestellte Ware“ mit Herstellungscharge anlegen und im Shop verknüpfen
- [ ] Danach einmal einen Testkauf mit Storno durchspielen und den Bestand in beiden Systemen vergleichen
## Abhängigkeiten / Blocker
Secret, ApiCore-Einstellungen und das Fortsetzen des CronJobs kann nur der Inhaber freigeben bzw. anlegen.
## Grundlage
README, Abschnitt „Bestandsabgleich“; Design im ApiCore-Repo `docs/superpowers/specs/2026-10-02-bestandsabgleich-design.md`. Verwandt: #14.
## Status
Code: ja · Geprüft: ja (Unit-Tests stock-math, inventory, webhook-signature) · Gemergt: ja · Produktiv: teilweise (Code live, Webhook und CronJob nicht wirksam)
Stand: 2026-10-16 (Quelle: git origin/main 35e7c84, Cluster-Abfrage nur lesend am 2026-10-16, Session-Status, Memory)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Ziel
Shop und ApiCore zeigen je Charge denselben Restbestand: bezahlte Verkäufe gehen an ApiCore, Entnahmen in ApiCore kommen sofort im Shop an.
Umgesetzt
apicore_stock_eventsin derselben Transaktion wie der Statuswechsel, feste Buchungs-ID, Chargen-Zuordnung je Position (93b589f, Migration20261002120000_apicore_stock_sync)POST /api/apicore/webhook(HMAC-signiert) fürstock.changedpnpm stock:apicore-syncund CronJobwabenhain-apicore-stockalle 10 Minuten (k8s/07-backup-cronjob.yaml)Offen
APICORE_WEBHOOK_SECRETfehlt im Cluster-Secretwabenhain-secrets(Schlüsselnamen geprüft am 2026-10-16); ohne ihn antwortet der Webhook mit 503stock.changedaufhttps://wabenhain.com/api/apicore/webhookanlegen und dem Shop-Schlüssel die Berechtigungshop-sync:writegeben (Stand unbekannt)wabenhain-apicore-stockist im Cluster ausgesetzt (suspend: true), siehe CronJobs release-stale-orders und apicore-stock sind im Cluster ausgesetzt (#23)Abhängigkeiten / Blocker
Secret, ApiCore-Einstellungen und das Fortsetzen des CronJobs kann nur der Inhaber freigeben bzw. anlegen.
Grundlage
README, Abschnitt „Bestandsabgleich“; Design im ApiCore-Repo
docs/superpowers/specs/2026-10-02-bestandsabgleich-design.md. Verwandt: #14.Status
Code: ja · Geprüft: ja (Unit-Tests stock-math, inventory, webhook-signature) · Gemergt: ja · Produktiv: teilweise (Code live, Webhook und CronJob nicht wirksam)
Stand: 2026-10-16 (Quelle: git origin/main
35e7c84, Cluster-Abfrage nur lesend am 2026-10-16, Session-Status, Memory)