Depuis un Appartement, permettre au Bailleur authentifié de publier son premier Lien public de candidature après activation du coffre par Passkey de candidature. L'ouverture anonyme de ce lien crée un brouillon vide distinct et redirige vers un Lien privé de reprise dont le serveur ne possède pas la clé de chiffrement.
Acceptance criteria
La Passkey n'est demandée qu'au moment où un Bailleur sans coffre demande son premier Lien public ; la boîte de dialogue explique données sensibles, chiffrement, passkey et perte irrécupérable avant confirmation.
Une annulation, une erreur WebAuthn ou l'absence de PRF ne crée ni coffre ni lien et propose une aide de compatibilité, sans PIN, clé serveur ou effet sur les fonctions sans Candidature.
Le navigateur crée le matériel RSA-OAEP 3072/SHA-256 du Bailleur, protège sa clé privée par PRF, HKDF-SHA-256 et AES-256-GCM, puis n'envoie que la clé publique et l'enveloppe chiffrée.
Un Appartement possède au plus un Lien public actif, consultable par son seul Bailleur après OIDC et contrôle backend du portefeuille.
Le GET public est sans effet ; le client anonyme exécuté lance le POST de création, obtient un nouveau DRAFT et remplace l'URL par son Lien privé sans clic supplémentaire. Une prévisualisation sans JavaScript ne crée rien.
Le Lien privé contient dans son fragment un identifiant technique, une capacité d'accès et la clé aléatoire de la Candidature ; le client transmet seulement la capacité, le serveur n'en conserve qu'une empreinte et ne peut pas reconstruire un lien perdu.
La clé de Candidature est chiffrée sous la clé publique du Bailleur ; aucune clé privée, clé de dossier ou donnée personnelle ne rejoint le serveur en clair.
Les pages publiques et privées anonymes utilisent un shell accessible sans écran OIDC, exposent la Notice d'information de candidature complète et son résumé, ainsi que des états véridiques de chargement et d'erreur.
Les routes publiques, à capacité et OIDC sont distinctes ; les réponses sensibles utilisent Cache-Control: no-store et Referrer-Policy: no-referrer, et aucun fragment, capacité, en-tête sensible ou matériel de clé n'est journalisé.
La création est limitée par Lien public et IP avec 429, sans CAPTCHA ; l'IP reste transitoire et n'entre jamais dans les métadonnées de la Candidature.
Le brouillon vide n'apparaît pas au Bailleur et les tests couvrent l'isolation, les formats cryptographiques, les altérations et l'absence de mode dégradé.
Blocked by
None — can start immediately.
## Parent
#135
## What to build
Depuis un Appartement, permettre au Bailleur authentifié de publier son premier Lien public de candidature après activation du coffre par Passkey de candidature. L'ouverture anonyme de ce lien crée un brouillon vide distinct et redirige vers un Lien privé de reprise dont le serveur ne possède pas la clé de chiffrement.
## Acceptance criteria
- [ ] La Passkey n'est demandée qu'au moment où un Bailleur sans coffre demande son premier Lien public ; la boîte de dialogue explique données sensibles, chiffrement, passkey et perte irrécupérable avant confirmation.
- [ ] Une annulation, une erreur WebAuthn ou l'absence de PRF ne crée ni coffre ni lien et propose une aide de compatibilité, sans PIN, clé serveur ou effet sur les fonctions sans Candidature.
- [ ] Le navigateur crée le matériel RSA-OAEP 3072/SHA-256 du Bailleur, protège sa clé privée par PRF, HKDF-SHA-256 et AES-256-GCM, puis n'envoie que la clé publique et l'enveloppe chiffrée.
- [ ] Un Appartement possède au plus un Lien public actif, consultable par son seul Bailleur après OIDC et contrôle backend du portefeuille.
- [ ] Le `GET` public est sans effet ; le client anonyme exécuté lance le `POST` de création, obtient un nouveau `DRAFT` et remplace l'URL par son Lien privé sans clic supplémentaire. Une prévisualisation sans JavaScript ne crée rien.
- [ ] Le Lien privé contient dans son fragment un identifiant technique, une capacité d'accès et la clé aléatoire de la Candidature ; le client transmet seulement la capacité, le serveur n'en conserve qu'une empreinte et ne peut pas reconstruire un lien perdu.
- [ ] La clé de Candidature est chiffrée sous la clé publique du Bailleur ; aucune clé privée, clé de dossier ou donnée personnelle ne rejoint le serveur en clair.
- [ ] Les pages publiques et privées anonymes utilisent un shell accessible sans écran OIDC, exposent la Notice d'information de candidature complète et son résumé, ainsi que des états véridiques de chargement et d'erreur.
- [ ] Les routes publiques, à capacité et OIDC sont distinctes ; les réponses sensibles utilisent `Cache-Control: no-store` et `Referrer-Policy: no-referrer`, et aucun fragment, capacité, en-tête sensible ou matériel de clé n'est journalisé.
- [ ] La création est limitée par Lien public et IP avec `429`, sans CAPTCHA ; l'IP reste transitoire et n'entre jamais dans les métadonnées de la Candidature.
- [ ] Le brouillon vide n'apparaît pas au Bailleur et les tests couvrent l'isolation, les formats cryptographiques, les altérations et l'absence de mode dégradé.
## Blocked by
- None — can start immediately.
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.
Parent
#135
What to build
Depuis un Appartement, permettre au Bailleur authentifié de publier son premier Lien public de candidature après activation du coffre par Passkey de candidature. L'ouverture anonyme de ce lien crée un brouillon vide distinct et redirige vers un Lien privé de reprise dont le serveur ne possède pas la clé de chiffrement.
Acceptance criteria
GETpublic est sans effet ; le client anonyme exécuté lance lePOSTde création, obtient un nouveauDRAFTet remplace l'URL par son Lien privé sans clic supplémentaire. Une prévisualisation sans JavaScript ne crée rien.Cache-Control: no-storeetReferrer-Policy: no-referrer, et aucun fragment, capacité, en-tête sensible ou matériel de clé n'est journalisé.429, sans CAPTCHA ; l'IP reste transitoire et n'entre jamais dans les métadonnées de la Candidature.Blocked by
mentioned in issue #149
mentioned in issue #153
mentioned in commit
06a8037ad9mentioned in commit
6afb2f68c3mentioned in commit
48c903d7cbmentioned in commit
6459d7b1d3Preserved GitLab #148 history: source attribution, exact timestamps, discussion grouping and review positions. Historical diff snapshots: 0; visible source notes: 6.
gitlab-47-issue-148.md (SHA-256
24997578958605cbe4561a8c3faad965e75aabfa269b9a5b5809c681f361f523)gitlab-47-issue-148.json (SHA-256
44ff72871781c117bac47075039b46c0a7e9834c9e20d5fbb69d96b4ca7b19e3)Old CI job execution and reports are omitted. Original source files and rollback backups remain protected.