Concern
The documentation states that embargo negotiation MAY begin before a report is
sent, but there are no implemented mechanics for it. Every embargo path in the
codebase is case-scoped, and pre-report there is no case and no participant for
that state to live on.
Evidence
docs/topics/process_models/model_interactions/rm_em.md (§ "Start Embargo
Negotiations As Early as Possible") states:
The EM process MAY begin (i.e., the initial propose transition
q^em ∈ N → P) prior to the report being sent to a potential Participant
(q^rm ∈ S)
and motivates it:
Beginning an embargo negotiation before providing a report can be useful in
cases where a Participant wishes to ensure acceptable embargo terms prior to
sharing a report with a potential recipient.
Against that, the implementation:
EmbargoLifecycle.propose_embargo()
(vultron/core/services/embargo_lifecycle.py) requires a case_id.
- PEC state lives on a
CaseParticipant (ParticipantStatus.consent), and a
CaseParticipant exists only within a case.
InviteToEmbargoOnCasePattern requires context_=VULNERABILITY_CASE, so even
the wire format presumes a case.
Pre-report, none of those exist. The documented behaviour has nowhere to be
recorded.
Why it matters
This is a real CVD pattern — a finder who wants embargo terms agreed before
handing over vulnerability details — and it is exactly the scenario where the
protocol's value is highest. It is currently documented as permitted, which means
an implementer reading the docs will believe it is supported.
Note this is independent of #2066 / ADR-0059: RSVP deadlines apply to
case-scoped embargo invitations. If pre-case negotiation is ever built, it will
need its own answer for how a deadline attaches to an invitation with no case.
Questions to resolve
References
Concern
The documentation states that embargo negotiation MAY begin before a report is
sent, but there are no implemented mechanics for it. Every embargo path in the
codebase is case-scoped, and pre-report there is no case and no participant for
that state to live on.
Evidence
docs/topics/process_models/model_interactions/rm_em.md(§ "Start EmbargoNegotiations As Early as Possible") states:
and motivates it:
Against that, the implementation:
EmbargoLifecycle.propose_embargo()(
vultron/core/services/embargo_lifecycle.py) requires acase_id.CaseParticipant(ParticipantStatus.consent), and aCaseParticipantexists only within a case.InviteToEmbargoOnCasePatternrequirescontext_=VULNERABILITY_CASE, so eventhe wire format presumes a case.
Pre-report, none of those exist. The documented behaviour has nowhere to be
recorded.
Why it matters
This is a real CVD pattern — a finder who wants embargo terms agreed before
handing over vulnerability details — and it is exactly the scenario where the
protocol's value is highest. It is currently documented as permitted, which means
an implementer reading the docs will believe it is supported.
Note this is independent of #2066 / ADR-0059: RSVP deadlines apply to
case-scoped embargo invitations. If pre-case negotiation is ever built, it will
need its own answer for how a deadline attaches to an invitation with no case.
Questions to resolve
scope it as future work? (A docs correction is a legitimate resolution.)
Candidate shapes include a proto-case, a standalone negotiation object, or a
CaseProposalextension (ADR-0023).is submitted and the CaseActor initialises the case (ADR-0041)?
notes/embargo-default-semantics.md),which currently produces
EM.ACTIVEat case creation?References
docs/topics/process_models/model_interactions/rm_em.mdnotes/participant-embargo-consent.md§ "Open Questions"