secubox-deb/packages/secubox-annuaire/menu.d
CyberMind-FR a0d372404c feat(annuaire): four verbs (auto-add/invite/proposal/emancipate) + FastAPI + packaging
- annuaire/verbs.py: auto_add / invite / accept_invite / propose / vote /
  tally / revoke / emancipate — pure service layer, no FastAPI.
  Enforces OBSERVED→MEMBER state machine, EM-MONOTONE invariant,
  one-voice-per-node dedup, bounded cascade revocation, M1/M2/M3 milestone
  gates for emancipate, and founder-anchor safety predicate.
- api/__init__.py + api/main.py: FastAPI on root_path=/api/v1/annuaire,
  Unix socket /run/secubox/annuaire.sock; read endpoints public,
  mutating endpoints JWT-gated; secubox_core import guarded for off-box use.
- tests/test_verbs.py: 24 new tests (97 total). EM-MONOTONE: level-decrease
  and same-level both rejected. Invitation: tampered sig / expired / over-used
  all rejected. Non-MEMBER inviter blocked. One-voice-per-node enforced.
- Packaging: debian/control, changelog (0.1.0-1~bookworm1), rules, postinst,
  prerm, secubox-annuaire.service (NoNewPrivileges=yes, RuntimeDirectoryPreserve=yes),
  secubox.yaml, nginx/annuaire.conf + annuaire-routes.conf, menu.d/575-annuaire.json.
2026-06-30 07:01:17 +02:00
..
575-annuaire.json feat(annuaire): four verbs (auto-add/invite/proposal/emancipate) + FastAPI + packaging 2026-06-30 07:01:17 +02:00