Check-in now also returns "auftraege": the full present/absent state of every catalog-eligible Merkmal (im_auftragskatalog = true) for the device's backend, derived statelessly from device_merkmale rather than just the workspace-resolved blueprints list, which stays untouched. This is what lets a deselected Auftrag actually be reverted once the corresponding Ansible role grows an absent branch (ADR-0010) - the agent doesn't have that branch yet, so this is additive and inert until it does. Adds POST /api/v1/agent/report so the agent can write execution results (applied/apply_failed/removed/remove_failed) back into device_merkmal_events; selected/deselected is intentionally rejected here since those are meant to come from wherever Auftrag selection ends up being triggered, not from the agent itself. Migration 0007 adds the backing tables (kategorien, device_merkmale, device_merkmal_events) and the two new merkmale columns. Verified against anode: checkin toggles present/absent correctly after inserting a device_merkmale row, report endpoint accepts valid entries and rejects unknown merkmale / non-agent event types / bad secrets, and the written event round-trips through device_merkmal_events correctly as jsonb. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Description
Provisioning Activation Service
Languages
Python
86.6%
PLpgSQL
13.4%