User Story Traceability Matrix
This document maps user stories from docs/reference/user_stories/ to formal
requirements in specs/. It is a traceability reference, not a
requirements document. User stories capture stakeholder intent; the
requirements in specs/ specify system behavior.
Stories are grouped by theme. Each story entry lists the mapped spec requirements with a brief traceability note. Stories with no clear mapping to an existing requirement are marked No mapped requirements.
Source user stories: docs/reference/user_stories/story_2022_NNN.md
Source specifications: specs/*.yaml
Table of Contents
| Section | Line | Stories | Theme |
|---|---|---|---|
| 1. Vulnerability Reporting | ~47 | 001–020 | Report submission, reception, validation, tracking |
| 2. Policy Discovery and Management | ~214 | 021–030 | Disclosure policies, policy publication and lookup |
| 3. Embargo Management | ~393 | 031–050 | Embargo proposals, negotiation, termination |
| 4. Case Management and Participant Roles | ~576 | 051–080 | Case creation, participants, coordinators, roles |
| 5. Actor Identity, Privacy, and Security | ~1013 | 081–090 | Actor registration, identity, privacy constraints |
| 6. Communication and Messaging | ~1216 | 091–100 | Inbox/outbox, notifications, acknowledgments |
| 7. Publication and Disclosure | ~1457 | 101–106 | Coordinated publication, advisories, disclosure timing |
| 8. Bug Bounty and Incentives | ~1708 | 107–109 | Bug bounty programs and incentives |
| 9. Prioritization, Assessment, and Fix Verification | ~1763 | 110–111 | SSVC scoring, fix readiness |
1. Vulnerability Reporting
| User Story ID | Story text | Spec ID | Spec detail |
|---|---|---|---|
| story_2022_001 | As a Finder, discover how to report a vulnerability | VP-02-001 | Coordinators MUST have a clearly defined and publicly available policy — intake discovery. |
| VP-02-005 | Vendors SHOULD have a clearly defined and publicly available policy — intake discovery. | ||
| IE-02-001 | The endpoint URL MUST be discoverable from actor profile — system support for finding intake. | ||
| EP-01-001 | An Actor profile MAY include an embargo_policy field — policy discovery mechanism. |
||
| story_2022_002 | As a Participant, receive reports submitted via platform | VP-03-001 | Participants MUST be in RM Accepted to send a Report Submission — pre-condition for receipt. |
| VP-03-002 | Vendor Recipients receiving a new Report Submission MUST process it — receiving obligation. | ||
| IE-02-002 | The endpoint MUST accept POST requests only — HTTP intake for report submission. | ||
| HP-00-001 | Handlers MUST interpret received activities as assertions about the sender's state — semantics of receipt. | ||
| story_2022_012 | As a Participant, report a new vulnerability | VP-02-015 | Participants SHOULD create a case from reports entering the Valid state — report-to-case transition. |
| VP-03-001 | Participants MUST be in RM Accepted to send a Report Submission — submission precondition. | ||
| MV-01-001 | Incoming payloads MUST conform to ActivityStreams 2.0 structure — message format for report submission. | ||
| VAM-02-002 | SUBMIT_REPORT MUST be represented as Offer(VulnerabilityReport) — submission wire mapping. |
||
| VAM-02-004 | VALIDATE_REPORT MUST be represented as Accept(Offer(VulnerabilityReport)) — validation result. |
||
| IE-02-002 | The endpoint MUST accept POST requests only — HTTP entry point for report. | ||
| story_2022_038 | As a vendor or coordinator, receive vulnerability reports | VP-03-002 | Vendor Recipients receiving a new Report Submission MUST process it — receiving obligation. |
| IE-02-002 | The endpoint MUST accept POST requests only — HTTP intake. | ||
| MV-01-001 | Incoming payloads MUST conform to ActivityStreams 2.0 structure — validation on receipt. | ||
| VP-02-001 | Coordinators MUST have a clearly defined and publicly available policy — intake advertised. | ||
| story_2022_077 | As a Participant, ask further questions about a report | VP-02-025 | Participants MAY perform a more technical report validation process — allows follow-up inquiry. |
| VP-03-008 | Participants SHOULD send RE regardless of state when any error occurs — error/inquiry path. | ||
| VP-03-011 | Recipients SHOULD inquire about the error in an RE message; the ledger entry, not RK, acknowledges it — bidirectional inquiry. | ||
| story_2022_101 | As a Coordinator, validate the report before engaging | VP-02-006 | Participants SHOULD subject each Received report to a validation process — validation obligation. |
| VP-02-007 | Participants SHOULD have a clearly defined process for validating reports — process definition. | ||
| VP-02-009 | Participants SHOULD proceed only after validating the reports they receive — gating. | ||
| VP-02-025 | Participants MAY perform a more technical report validation process — technical validation. | ||
| VP-03-003 | Participants SHOULD send RI when the report validation process determines invalid — send result. | ||
| VP-03-004 | Participants SHOULD send RV when the report validation process determines valid — send result. | ||
| story_2022_102 | As a Coordinator, collect artifacts (PoC, analysis) | VP-02-025 | Participants MAY perform a more technical report validation process — artifact collection. |
| VP-02-028 | Participants MAY choose to perform a shallow technical analysis on the reported vulnerability. | ||
| CM-05-002 | A VulnerabilityCase MUST reference at least one VulnerabilityReport — case ties to report artifacts. | ||
| story_2022_111 | As a Vendor, identify which products are affected | VP-02-011 | Once a Vendor confirms that a reported vulnerability affects one or more products — acknowledgment. |
| VP-02-015 | Participants SHOULD create a case from reports entering the Valid state — per-product case creation. | ||
| VP-02-025 | Participants MAY perform more technical report validation — scope analysis. | ||
| CM-05-006 | One report MAY describe multiple vulnerabilities; one case MAY cover multiple reports — model support. |
2. Policy Discovery and Management
| User Story ID | Story text | Spec ID | Spec detail |
|---|---|---|---|
| story_2022_003 | As a Participant, discover others' policies | VP-02-001 | Coordinators MUST have a clearly defined and publicly available policy — policy discoverability. |
| VP-02-005 | Vendors SHOULD have a clearly defined and publicly available policy — policy discoverability. | ||
| EP-01-001 | An Actor profile MAY include an embargo_policy field — machine-readable policy on actor profile. |
||
| EP-02-001 | Each Actor SHOULD expose its embargo policy at a well-known endpoint (PROD_ONLY) — policy endpoint. |
||
| story_2022_004 | As a Participant, parse and evaluate others' policies | EP-01-002 | The embargo policy record MUST include specified fields — machine-parseable structure. |
| EP-01-003 | The embargo policy record SHOULD include additional fields — richer parseable structure. | ||
| EP-01-004 | The embargo policy record MUST be serializable as a Pydantic model — programmatic parsing support. | ||
| VP-07-001 | If neither Sender nor Receiver proposes an embargo and no policy — default policy evaluation. | ||
| story_2022_005 | As a Participant, optimize all of the policies involved | VP-07-003 | If the Receiver has declared a default embargo, use it — policy reconciliation. |
| VP-07-004 | If the Sender proposes an embargo longer than the Receiver's default — negotiation rule. | ||
| VP-07-005 | If the Sender proposes an embargo shorter than the Receiver's default — negotiation rule. | ||
| EP-03-001 | Before proposing an embargo, retrieve potential Participant's policy (PROD_ONLY) — pre-proposal. |
||
| EP-03-002 | Compatibility evaluation MUST check that policy fields are compatible (PROD_ONLY) — compatibility check. |
||
| story_2022_006 | As a Participant, decide if I will/can engage | VP-02-006 | Participants SHOULD subject each Received report to a validation process — engagement gating. |
| VP-02-014 | For Valid reports, the Participant SHOULD perform a prioritization step — engagement decision. | ||
| VP-02-016 | Participants SHOULD have a bias toward accepting rather than deferring — acceptance policy. | ||
| VP-02-021 | Participants SHOULD act in accordance with their own policy and the policies of others. | ||
| story_2022_007 | As a Participant, flag when policy trouble is detected | VP-03-008 | Participants SHOULD send RE regardless of state when any error occurs — error signal. |
| VP-11-002 | If information about the vulnerability has been made public, initiate embargo termination. | ||
| VP-06-001 | CVD Participants MUST NOT propose or accept a new embargo in specific states — constraint flag. | ||
| story_2022_008 | As a Participant, warn Participants, invoke other channels | VP-03-008 | Participants SHOULD send RE when any error occurs — error notification. |
| VP-11-003 | Participants SHALL initiate embargo termination upon becoming aware of exploitation — escalation. | ||
| VP-11-005 | Participants SHOULD acknowledge and inquire about unexpected embargo state changes. | ||
| story_2022_009 | As a Participant, post/advertise my policy | VP-02-001 | Coordinators MUST have a clearly defined and publicly available policy — publication obligation. |
| VP-02-005 | Vendors SHOULD have a clearly defined and publicly available policy — publication recommendation. | ||
| VP-07-006 | Report Recipients SHOULD post a default embargo period as part of their policy — embargo policy post. | ||
| EP-01-001 | An Actor profile MAY include an embargo_policy field — machine-readable policy on profile. |
||
| EP-02-001 | Each Actor SHOULD expose its embargo policy at a well-known endpoint (PROD_ONLY) — policy endpoint. |
||
| story_2022_021 | As a Participant, advertise locale aspects of policy | EP-01-002 | The embargo policy record MUST include specified fields — locale/scope fields in policy. |
| EP-01-003 | The embargo policy record SHOULD include additional optional fields — extended locale fields. | ||
| VP-02-001 | Coordinators MUST have a clearly defined and publicly available policy — policy publication. | ||
| story_2022_022 | As a Participant, advertise scope of CVD capability | VP-02-001 | Coordinators MUST have a clearly defined and publicly available policy — scope in policy. |
| VP-02-005 | Vendors SHOULD have a clearly defined and publicly available policy — scope in policy. | ||
| EP-01-002 | The embargo policy record MUST include required fields — structured scope definition. | ||
| story_2022_076 | As a VDP operator, want protocol to support VDP | VP-02-001 | Coordinators MUST have a clearly defined and publicly available policy — VDP policy expression. |
| EP-01-001 | An Actor profile MAY include an embargo_policy field — policy field applicable to VDP operators. |
3. Embargo Management
| User Story ID | Story text | Spec ID | Spec detail |
|---|---|---|---|
| story_2022_010 | As a Participant, publish/share embargo dates | VP-04-003 | An embargo MAY be proposed — initial proposal mechanism. |
| VP-04-004 | Once proposed, an embargo MAY be accepted or rejected — acceptance/rejection workflow. | ||
| VP-05-001 | An embargo SHALL specify an unambiguous date and time — date specification requirement. | ||
| VP-07-006 | Report Recipients SHOULD post a default embargo period as part of their policy — default sharing. | ||
| EP-01-002 | The embargo policy record MUST include specified fields — structured date fields. | ||
| story_2022_014 | As a Participant, negotiate and renegotiate embargo schedules | VP-04-001 | Accepted embargoes MUST eventually terminate — termination requirement. |
| VP-04-003 | An embargo MAY be proposed — initial proposal. | ||
| VP-04-005 | Once accepted, revisions MAY be proposed — renegotiation mechanism. | ||
| VP-06-004 | Participants SHOULD explicitly accept or reject embargo proposals — explicit negotiation. | ||
| VP-06-005 | Participants SHOULD make reasonable attempts to retry embargo negotiations. | ||
| story_2022_023 | As a Participant, constrain communication to enforce embargo | VP-05-006 | Embargo Participants SHOULD NOT knowingly release embargo information — information restriction. |
| VP-05-007 | Embargo participation SHOULD be limited to the smallest possible set — access restriction. | ||
| VP-08-006 | The inviting Participant SHOULD NOT share the vulnerability report without embargo — need-to-know. | ||
| VP-16-001 | Vulnerability details MUST NOT appear in embargo representation — separation of concerns. | ||
| story_2022_024 | As a Finder/Reporter, constrain communication for anonymity | VP-08-017 | Participants in an MPCVD case MAY delay notifying potential Participants — controlled disclosure. |
| — | No further mapped requirements (reporter anonymity has no direct requirement in current specs). | ||
| story_2022_025 | As a Vendor/Deployer, constrain until patch published | VP-05-006 | Embargo Participants SHOULD NOT knowingly release information — pre-patch restriction. |
| VP-05-014 | Participants SHOULD NOT publish information before embargo terminates. | ||
| VP-14-007 | Once Fix Ready, new embargoes have reduced scope — fix-ready transition. | ||
| story_2022_026 | As a Coordinator, constrain communication within embargo | VP-05-006 | Embargo Participants SHOULD NOT knowingly release information — coordinator obligation. |
| VP-08-006 | The inviting Participant SHOULD NOT share the vulnerability report — need-to-know enforcement. | ||
| VP-05-007 | Embargo participation SHOULD be limited to the smallest possible set — minimal disclosure. | ||
| story_2022_027 | As a Participant, address Participants constraints/entity lists | VP-05-013 | Participants SHOULD consider other Participants' history of embargo compliance — reputation check. |
| VP-08-010 | Participants known to leak information SHOULD be excluded from embargoes — exclusion mechanism. | ||
| VP-08-021 | Participants MAY decline to participate in future CVD cases with known leakers. | ||
| story_2022_078 | As a coordinator, drive better/shorter embargo timelines | VP-05-008 | Embargo duration SHOULD be limited to the shortest duration feasible — coordinator goal. |
| VP-05-009 | Embargoes SHOULD be of short duration, from a few days to a few months — target range. | ||
| VP-08-003 | Participants SHOULD follow consensus agreement to decide embargo terms — coordinator drives. | ||
| story_2022_079 | As a coordinator, collect and optimize embargo timelines | VP-07-001 | If no embargo policy and no proposal — default determination rule. |
| VP-07-003 | If Receiver has a default embargo, use it as the starting point. | ||
| VP-07-004 | If Sender proposes longer than Receiver's default — negotiation. | ||
| VP-07-005 | If Sender proposes shorter than Receiver's default — negotiation. | ||
| VP-08-003 | Participants SHOULD follow consensus agreement to decide embargo terms. | ||
| story_2022_080 | As a Participant, disclose sooner but minimize others' risk | VP-05-020 | Participants MAY publish information when embargo terminates — publish timing. |
| VP-14-011 | Exploit Publishers who are Participants in pre-public CVD cases MUST notify others. | ||
| VP-14-012 | Exploit Publishers SHOULD NOT release exploit code while an embargo is active. | ||
| VP-14-014 | In MPCVD cases where some Vendors reach Fix Ready before others — staggered disclosure. |
4. Case Management and Participant Roles
| User Story ID | Story text | Spec ID | Spec detail |
|---|---|---|---|
| story_2022_013 | As a Participant, add a Participant (de-duplicate) | VP-08-001 | When inviting a new Participant to a case with an existing embargo — invite protocol. |
| VP-08-004 | All known Vendors of affected software SHOULD be included — inclusion obligation. | ||
| VP-08-013 | Third-party Coordinators MAY be included as Participants — multi-party inclusion. | ||
| ID-01-001 | All activities MUST have globally unique id fields — de-duplication via unique IDs. |
||
| story_2022_029 | As a Vendor/Deployer/Other, assign own ID to a case | OID-01-001 | All ActivityStreams object IDs MUST use full URI form — ID format requirement. |
| OID-01-002 | IDs MUST be globally unique within the system — uniqueness enforcement. | ||
| OID-01-003 | The canonical base URI for locally created objects MUST be configurable — local ID namespace. | ||
| CM-02-001 | Each VulnerabilityCase MUST have exactly one associated CaseActor — case ownership and identity. | ||
| story_2022_030 | As a Participant, discover and map to global/shared case ID | OID-01-001 | All ActivityStreams object IDs MUST use full URI form — global ID format. |
| OID-01-002 | IDs MUST be globally unique within the system — global uniqueness. | ||
| VP-16-002 | A case or vulnerability identifier SHOULD appear in embargo representation — case ID in embargo. | ||
| VP-16-003 | Case or vulnerability identifiers SHOULD NOT carry sensitive information — ID privacy. | ||
| story_2022_031 | As a Participant, get list of cases I am involved in | VP-01-001 | Participants SHOULD track the state of other Participants in a case — state tracking. |
| CM-02-001 | Each VulnerabilityCase MUST have exactly one associated CaseActor — case listing support. | ||
| CM-07-001 | The system SHOULD expose an endpoint returning the set of valid next actions — case API. | ||
| story_2022_032 | As a Participant, ask if another Participant is in a case | VP-01-001 | Participants SHOULD track the state of other Participants — participant tracking. |
| VP-08-004 | All known Vendors SHOULD be included — participation list. | ||
| VP-08-009 | Participants in a case SHOULD notify when a new Participant is added — membership events. | ||
| story_2022_033 | As a Participant, request anonymity in a case | VP-08-017 | Participants in an MPCVD case MAY delay notifying potential Participants — controlled disclosure. |
| — | No further mapped requirements (anonymity policy has limited current spec coverage). | ||
| story_2022_045 | As a Participant, produce a shared verified public record | VP-16-002 | A case or vulnerability identifier SHOULD appear in embargo representation — shared case ID. |
| OID-01-001 | All object IDs MUST use full URI form — stable record identifiers. | ||
| SL-01-001 | All log entries MUST include timestamp field (PROD_ONLY) — auditable timeline. |
||
| story_2022_046 | As a Participant, want the case to have a leader | CM-02-004 | CASE_MANAGER MUST know the case owner — leadership/ownership model. |
| VP-08-003 | Participants SHOULD follow consensus agreement to decide embargo terms — leader-driven consensus. | ||
| story_2022_047 | As a Participant, propose a case leader, possibly myself | CM-02-004 | CASE_MANAGER MUST know the case owner — ownership field populated by leader proposal. |
| VP-08-012 | Participants MAY engage a third-party Coordinator to act as mediator — coordinator as leader. | ||
| RF-02-001 | Accept responses MUST use Accept activity type — accepting a leader proposal uses Accept activity. |
||
| story_2022_048 | As a Participant, vote/accept a proposed case leader | RF-02-001 | Accept responses MUST use Accept activity type — acceptance mechanism. |
| RF-03-001 | Reject responses MUST use Reject activity type — rejection mechanism. |
||
| CM-02-005 | CASE_MANAGER MUST restrict certain activities to the case owner (PROD_ONLY) — ownership enforcement. |
||
| story_2022_049 | As a Participant, announce the case leader to all Participants | VP-03-012 | Participants whose state changes SHOULD announce to other Participants — announcement mechanism. |
| OX-01-001 | Each actor MUST have an outbox collection — delivery mechanism for announcement. | ||
| story_2022_050 | As a Participant, transfer case leadership to another | CM-02-004 | CASE_MANAGER MUST know the case owner — ownership transfer. |
| CM-02-005 | CASE_MANAGER MUST restrict certain activities to the case owner (PROD_ONLY) — ownership change restriction. |
||
| RF-02-001 | Accept responses MUST use Accept activity type — new leader accepts the transfer. |
||
| story_2022_051 | As a Participant, depose or step down as case leader | CM-02-004 | CASE_MANAGER MUST know the case owner — leader identity tracked. |
| VP-08-011 | When consensus fails to reach agreement on embargo terms — fallback when no leader. | ||
| RF-02-001 | Accept responses MUST use Accept activity type — replacement leader acceptance. |
||
| story_2022_052 | As a Participant, add/notify others of new Participants | VP-08-001 | When inviting a new Participant to a case with an existing embargo — invitation protocol. |
| VP-08-004 | All known Vendors of affected software SHOULD be included — obligation to include. | ||
| VP-08-005 | A newly invited Participant SHOULD be informed about the existing embargo — notification duty. | ||
| VP-08-009 | Participants SHOULD notify when a new Participant is added to a case. | ||
| story_2022_053 | As a Participant, propose new Participants to a case | VP-08-001 | When inviting a new Participant to a case with an existing embargo — invitation process. |
| VP-08-004 | All known Vendors SHOULD be included — who to propose. | ||
| VP-08-012 | Participants MAY engage a third-party Coordinator — coordinator as proposed participant. | ||
| AKM-02-001 | An Actor MUST NOT assume that a recipient has knowledge of any object not previously shared — proposed-participant discovery. | ||
| AKM-03-001 | Outbound initiating activities MUST carry, as their object, the domain object they act on, inline or by reference — invite proposal payload integrity. |
||
| story_2022_054 | As a Participant, vote/accept new Participants to a case | RF-02-001 | Accept responses MUST use Accept activity type — acceptance of invitation. |
| RF-03-001 | Reject responses MUST use Reject activity type — rejection of invitation. |
||
| VP-08-015 | The inviting Participant MAY interpret a non-response as non-participation. | ||
| story_2022_063 | As a Participant, include a non-vendor role Participant | VP-08-014 | Other parties MAY be included as Participants when necessary and appropriate — non-vendor inclusion. |
| VP-08-004 | All known Vendors of affected software SHOULD be included — vendor coverage before others. | ||
| PRM-01-001 | CaseParticipant MUST expose a read-only roles property — role inspection for case membership. |
||
| PRM-02-001 | add_role() MUST add a role to the participant's role set — role assignment for non-vendor participants. |
||
| story_2022_064 | As a Participant, include the Government in the case | VP-08-014 | Other parties MAY be included as Participants when necessary and appropriate — government inclusion. |
| story_2022_065 | As a Participant, include Industry/trade group in case | VP-08-014 | Other parties MAY be included as Participants when necessary and appropriate — industry group inclusion. |
| story_2022_066 | As a Participant, stop participating in the case | VP-05-010 | Participants stopping work SHOULD notify remaining Participants. |
| VP-05-011 | Participants SHOULD continue to comply with any active embargoes even after stopping. | ||
| VP-05-012 | Participants who leave an Active embargo SHOULD be removed by the remaining Participants. | ||
| story_2022_067 | As a Participant, stop participating and inform others | VP-05-010 | Participants stopping work SHOULD notify remaining Participants — notification obligation. |
| VP-05-011 | Participants SHOULD continue to comply with active embargoes — compliance after stopping. | ||
| VP-13-009 | A Participant's closure or deferral of a report has implications for the embargo state. | ||
| story_2022_068 | As a Participant, stop and no longer receive forwarded queries | VP-05-010 | Participants stopping work SHOULD notify remaining Participants — departure notification. |
| VP-05-012 | Participants who leave SHOULD be removed from the active embargo — removal from distribution. | ||
| story_2022_074 | As a Participant, keep track of events and timelines | VP-01-001 | Participants SHOULD track the state of other Participants — state tracking. |
| VP-01-002 | Participants SHOULD track the RM states of the other Participants — RM state tracking. | ||
| VP-05-001 | An embargo SHALL specify an unambiguous date and time — timeline anchor. | ||
| SL-04-001 | Log entries MUST include structured state-transition format (PROD_ONLY) — event log for tracking. |
||
| SYNC-01-001 | The canonical recorded case log MUST be append-only — event timeline integrity. | ||
| SYNC-01-002 | Each log entry MUST carry a monotonically increasing index scoped to its case — timeline ordering. | ||
| CLP-02-006 | CaseLedgerEntry MUST include a log_index field corresponding to SYNC-01-002 — canonical ordering for recorded events. |
||
| story_2022_088 | As a Participant, maintain knowledge of case state | VP-01-001 | Participants SHOULD track the state of other Participants — state awareness. |
| VP-01-002 | Participants SHOULD track the RM states of other Participants — RM awareness. | ||
| CM-01-001 | Each actor MUST have an isolated protocol state domain — state isolation per actor. | ||
| CM-01-002 | Each actor's RM state MUST be maintained independently per case — per-case state. | ||
| CM-07-001 | The system SHOULD expose an endpoint returning valid next actions — state-aware API. | ||
| CLP-04-006 | The canonical recorded log is the authoritative source of truth for case participant membership and case state — case-state knowledge derives from canonical history. | ||
| story_2022_104 | As a Participant, address multiple vulnerabilities across vendors | VP-08-004 | All known Vendors of affected software SHOULD be included — multi-vendor inclusion. |
| VP-10-004 | A new embargo SHOULD be proposed when any two or more CVD cases are merged. | ||
| VP-10-001 | If no new embargo has been proposed after a case split — split/merge embargo handling. | ||
| CM-05-006 | One report MAY describe multiple vulnerabilities; one case MAY cover multiple reports — data model. | ||
| story_2022_105 | As a Vendor, address same vulnerability across products | VP-10-004 | A new embargo SHOULD be proposed when any two or more CVD cases are merged. |
| VP-10-001 | If no new embargo proposed after case split — per-product split embargo handling. | ||
| VP-14-014 | In MPCVD cases where some Vendors reach Fix Ready before others — staggered timelines. | ||
| CM-05-006 | One report MAY describe multiple vulnerabilities; one case MAY cover multiple reports — multi-product. | ||
| story_2022_106 | As a Participant, want decentralized coordination process | VP-01-003 | Adequate operation of the protocol MUST NOT depend on perfect knowledge of all Participants. |
| VP-15-001 | Vultron Protocol messages SHOULD use well-defined format — interoperable, decentralized messaging. | ||
| VP-15-002 | Implementations SHOULD use common API patterns for inter-participant communication (PROD_ONLY) — federated identity. |
||
| EDF-02-001 | Every protocol-significant action in Vultron MUST be triggered by an event — decentralized control flow. | ||
| EDF-03-001 | All cascade steps that do not require external input MUST be implemented as BT subtrees — automation within the actor. | ||
| SBT-01-001 | Sync log entry protocol flows MUST be implemented as behavior trees, not procedural use-case code — decentralized sync handling. |
5. Actor Identity, Privacy, and Security
| User Story ID | Story text | Spec ID | Spec detail |
|---|---|---|---|
| story_2022_034 | As a Participant, use global/federated user ID | OID-01-001 | All ActivityStreams object IDs MUST use full URI form — global ID format. |
| VP-15-002 | Implementations SHOULD use common API patterns for inter-participant communication (PROD_ONLY) — federated identity. |
||
| VP-15-003 | Implementations SHOULD use transport-layer encryption for data in transit (PROD_ONLY) — interoperable identity use. |
||
| story_2022_035 | As a Participant, have confidence in identity/group membership | ENC-01-001 | Each CaseActor MUST generate an asymmetric key (PROD_ONLY) — identity key material. |
| ENC-01-002 | The CaseActor MUST publish its public key in its actor profile (PROD_ONLY) — verifiable identity. |
||
| VP-15-002 | Implementations SHOULD use common API patterns for inter-participant communication (PROD_ONLY) — federated identity. |
||
| story_2022_036 | As a non-vendor, determine integration of auth/authz | ENC-01-001 | Each CaseActor MUST generate an asymmetric key (PROD_ONLY) — auth model via keys. |
| VP-15-002 | Implementations SHOULD use common API patterns for inter-participant communication (PROD_ONLY) — auth/authz integration. |
||
| CM-02-006 | CASE_MANAGER MUST enforce case-level authorization for all activities (PROD_ONLY) — authz enforcement. |
||
| story_2022_089 | As a Participant, mechanism for message authentication/integrity | ENC-01-001 | Each CaseActor MUST generate an asymmetric key (PROD_ONLY) — signing key for integrity. |
| ENC-01-002 | CaseActor MUST publish its public key (PROD_ONLY) — verifiable signatures. |
||
| VP-15-004 | Implementations MAY use end-to-end encryption (PROD_ONLY) — integrity mechanism. |
||
| VP-15-005 | Implementations MAY use encryption for data at rest (PROD_ONLY) — integrity mechanism. |
||
| story_2022_090 | As a Participant, mechanism for all Participants' authentication | ENC-01-001 | Each CaseActor MUST generate an asymmetric key (PROD_ONLY) — participant authentication. |
| ENC-01-003 | CaseActor MUST share its public key with Participants (PROD_ONLY) — key exchange for auth. |
||
| VP-15-002 | Implementations SHOULD use common API patterns for inter-participant communication (PROD_ONLY) — identity framework. |
||
| story_2022_091 | As a Participant, mechanism for confidential transport/storage | ENC-02-001 | Case Participants MAY encrypt messages (PROD_ONLY) — confidential transport. |
| ENC-02-002 | When sending messages, encrypt using recipient's public key (PROD_ONLY) — encryption mechanism. |
||
| ENC-01-004 | Private keys MUST be stored securely (PROD_ONLY) — confidential storage. |
||
| VP-15-004 | Implementations MAY use end-to-end encryption (PROD_ONLY) — end-to-end confidentiality. |
||
| story_2022_092 | As a Participant, know who else is participating in a case | VP-08-004 | All known Vendors of affected software SHOULD be included — full participant list. |
| VP-08-009 | Participants SHOULD notify others when a new Participant is added to a case. | ||
| VP-01-001 | Participants SHOULD track the state of other Participants — state tracking implies membership. | ||
| PCR-01-001 | Each Vultron Actor MUST maintain its local case replica as an internal concern — participant membership is actor-local. | ||
| PCR-02-002 | When a new participant is added to a case, the CASE_MANAGER MUST send Announce(VulnerabilityCase) to that participant — replica bootstrap for membership awareness. |
||
| PCR-04-002 | All case-scoped protocol activities sent by the CASE_MANAGER MUST carry context set to the case ID — routing the membership replica. |
||
| story_2022_093 | As a Participant, ensure Participant list is complete | VP-08-004 | All known Vendors of affected software SHOULD be included — completeness obligation. |
| VP-08-009 | Participants SHOULD notify others when a new Participant is added. | ||
| VP-01-001 | Participants SHOULD track the state of other Participants — tracking supports list integrity. | ||
| story_2022_094 | As a Participant, assess reputation of others to decide to engage | VP-05-013 | Participants SHOULD consider others' history of embargo compliance — reputation as input. |
| VP-08-010 | Participants known to leak information SHOULD be excluded from embargoes. | ||
| VP-08-021 | Participants MAY decline to participate in future CVD cases — reputation-driven decisions. | ||
| story_2022_095 | As a Participant, provide evidence of reputation to others | VP-05-013 | Participants SHOULD consider others' history of embargo compliance — reputation-based trust. |
| EP-01-001 | An Actor profile MAY include an embargo_policy field — policy as proxy for reputation. |
||
| — | No further mapped requirements (reputation attestation has no direct current spec requirement beyond policy publication). | ||
| story_2022_096 | As a Participant, record/log trust/reputation of others | VP-05-013 | Participants SHOULD consider others' history of embargo compliance — basis for reputation log. |
| VP-08-010 | Participants known to leak information SHOULD be excluded — outcome of reputation tracking. | ||
| — | No further mapped requirements (reputation logging is not specified in current specs). | ||
| story_2022_097 | As a Participant, organize own groups of other Participants | VP-08-004 | All known Vendors of affected software SHOULD be included — group composition. |
| VP-08-012 | Participants MAY engage a third-party Coordinator — group with coordinator. | ||
| VP-08-014 | Other parties MAY be included as Participants when necessary — flexible group composition. |
6. Communication and Messaging
| User Story ID | Story text | Spec ID | Spec detail |
|---|---|---|---|
| story_2022_016 | As a Participant, limited ACK of vulnerability / full advisory | VP-03-009 | Recipients SHOULD acknowledge R* messages: RK acknowledges RS only, and once a case exists the CASE_MANAGER's ledger entry is the acknowledgment — acknowledgment requirement. |
| RF-02-001 | Accept responses MUST use Accept activity type — formal acceptance of report. |
||
| RF-08-001 | Response activities MUST include inReplyTo field — tracing response back to original. |
||
| story_2022_028 | As a vendor or coordinator, want others to find me | VP-02-001 | Coordinators MUST have a clearly defined and publicly available policy — discoverability. |
| IE-02-001 | The endpoint URL MUST be discoverable from actor profile — inbox discoverability. | ||
| AR-01-001 | The API MUST expose a machine-readable OpenAPI JSON schema — programmatic discovery. | ||
| story_2022_039 | As a Participant, communicate with another case Participant | VP-03-012 | Participants whose state changes SHOULD announce to other Participants. |
| RF-01-001 | Response activities MUST conform to ActivityStreams 2.0 — message format. | ||
| OX-01-001 | Each actor MUST have an outbox collection — delivery mechanism. | ||
| story_2022_040 | As a Participant, unicast/point-to-point communication | OX-04-001 | For actors on the same server, delivery MUST write directly to the recipient's inbox — local unicast delivery. |
| OX-05-001 | For remote actors, MAY deliver via HTTP POST (PROD_ONLY) — remote unicast delivery. |
||
| RF-06-002 | Response activities MUST be addressed to the initiating actor — targeted addressing. | ||
| story_2022_041 | As a Participant, broadcast to all Participants in a case | VP-03-012 | Participants whose state changes SHOULD announce to all Participants — broadcast state changes. |
| OX-03-001 | Activities in an actor's outbox MUST be delivered to recipient inboxes — outbox-based broadcast. | ||
| story_2022_042 | As a Participant, communicate with a subset of Participants | VP-05-007 | Embargo participation SHOULD be limited to the smallest possible set — subset communication. |
| OX-03-001 | Activities in an actor's outbox MUST be delivered to recipient inboxes — selective delivery. | ||
| story_2022_043 | As a Participant, communicate in a common case channel | CM-06-001 | When the CASE_MANAGER updates canonical case state, it MUST broadcast to all Participants. |
| OX-03-001 | Activities in an actor's outbox MUST be delivered to recipient inboxes — channel delivery. | ||
| story_2022_044 | As a Participant, communicate with selected case Participants | OX-03-001 | Activities in an actor's outbox MUST be delivered to recipient inboxes — selective delivery. |
| VP-08-006 | The inviting Participant SHOULD NOT share the vulnerability report — selective disclosure. | ||
| story_2022_058 | As a Participant, share a draft advisory with others | VP-05-006 | Embargo Participants SHOULD NOT knowingly release information — shared draft under embargo. |
| OX-01-001 | Each actor MUST have an outbox collection — delivery of draft advisory. | ||
| RF-01-001 | Response activities MUST conform to ActivityStreams 2.0 — message format for draft sharing. | ||
| story_2022_059 | As a Participant, share draft advisory and request feedback | VP-05-006 | Embargo Participants SHOULD NOT knowingly release information — embargo-constrained sharing. |
| RF-02-001 | Accept responses MUST use Accept activity type — feedback as Accept/Reject on draft. |
||
| RF-08-001 | Response activities MUST include inReplyTo field — feedback references draft. |
||
| OX-01-001 | Each actor MUST have an outbox collection — delivery mechanism. | ||
| story_2022_060 | As a Participant, request advisory draft from a Participant | VP-03-012 | Participants whose state changes SHOULD announce to others — draft availability announcement. |
| RF-01-001 | Response activities MUST conform to ActivityStreams 2.0 — request/response format. | ||
| story_2022_061 | As a Participant, request another Participant's status | VP-01-001 | Participants SHOULD track the state of other Participants — state inquiry. |
| VP-01-002 | Participants SHOULD track the RM states of other Participants — RM state request. | ||
| VP-03-012 | Participants whose state changes SHOULD announce to others — announcement satisfies query. | ||
| story_2022_062 | As a Participant, state my status so others are aware | VP-02-019 | CVD Participants SHOULD announce RM state transitions to other Participants. |
| VP-03-005 | Participants SHOULD send RD when the report prioritization is deferred. | ||
| VP-03-006 | Participants SHOULD send RA when the report prioritization is accepted. | ||
| VP-03-007 | Participants SHOULD send RC when the report is closed. | ||
| VP-03-012 | Participants whose state changes SHOULD announce RM, EM, or CVD Case State. | ||
| story_2022_081 | As a Participant, communicate important public state change | VP-03-012 | Participants whose state changes SHOULD announce to all Participants — state change announcement. |
| VP-12-001 | Vendor Awareness messages SHOULD be sent only by Vendors who become aware of the vulnerability. | ||
| OX-01-001 | Each actor MUST have an outbox collection — delivery mechanism for announcements. | ||
| story_2022_098 | As a Participant, communicate with all Participants in a case | VP-03-012 | Participants whose state changes SHOULD announce to all Participants — broadcast mechanism. |
| CM-06-001 | When CASE_MANAGER updates state, MUST broadcast to all Participants — case-level broadcast. | ||
| OX-03-001 | Activities in an actor's outbox MUST be delivered to recipient inboxes — delivery to all. | ||
| story_2022_099 | As a Participant, communicate with non-vendor Participants | VP-08-014 | Other parties MAY be included as Participants when necessary — non-vendor inclusion. |
| OX-03-001 | Activities in an actor's outbox MUST be delivered to recipient inboxes — delivery mechanism. | ||
| story_2022_100 | As a Participant, be included on distribution list for advisories | VP-12-001 | Vendor Awareness messages SHOULD be sent only by Vendors who become aware — awareness notifications. |
| OX-03-001 | Activities in an actor's outbox MUST be delivered to recipient inboxes — subscription/distribution mechanism. | ||
| OX-04-001 | For actors on the same server, delivery MUST write directly to the recipient's inbox — local distribution. |
7. Publication and Disclosure
| User Story ID | Story text | Spec ID | Spec detail |
|---|---|---|---|
| story_2022_015 | As a Participant, notify others of intent to publish | VP-05-014 | Participants SHOULD NOT publish information before embargo terminates — pre-publish notice. |
| VP-09-001 | Embargoes SHALL terminate immediately when information about the vulnerability is made public. | ||
| OX-01-001 | Each actor MUST have an outbox collection — delivery of publication intent notification. | ||
| story_2022_017 | As a Participant, share my draft publication with others | VP-05-006 | Embargo Participants SHOULD NOT knowingly release information — draft shared within embargo. |
| RF-01-001 | Response activities MUST conform to ActivityStreams 2.0 — format for sharing draft. | ||
| OX-01-001 | Each actor MUST have an outbox collection — delivery mechanism. | ||
| story_2022_018 | As a Participant, aware of public exploit, tell others | VP-09-003 | Embargoes SHOULD terminate early when there is evidence of exploit availability. |
| VP-09-006 | Embargoes MAY terminate early when evidence of exploit publication exists. | ||
| VP-14-002 | Once Exploit Publication has occurred, new embargoes have restricted scope. | ||
| VP-11-002 | If information has been made public, participants should initiate embargo termination. | ||
| story_2022_019 | As a Participant, aware of exploitation in the wild, tell others | VP-11-003 | Participants SHALL initiate embargo termination upon becoming aware of exploitation. |
| VP-11-006 | If attacks are known to have occurred, Participants SHOULD act accordingly. | ||
| VP-11-007 | Participants SHOULD initiate embargo termination when attacks are observed. | ||
| VP-12-002 | Once attacks observed, fix development SHOULD be accelerated. | ||
| VP-14-003 | Once attacks observed, new embargoes have restricted scope. | ||
| story_2022_020 | As a Participant, publish a vulnerability (external to protocol) | VP-05-005 | Embargo termination SHALL NOT be construed as an obligation to publish — no forced publication. |
| VP-05-020 | Participants MAY publish information about the vulnerability when embargo ends. | ||
| VP-09-001 | Embargoes SHALL terminate immediately when information is made public — publication triggers. | ||
| VP-14-001 | Once Public Awareness has happened — implications for embargo state. | ||
| story_2022_037 | As a vendor, publish vulnerability advisories | VP-05-020 | Participants MAY publish information when embargo ends — advisory publication timing. |
| VP-12-001 | Vendor Awareness messages SHOULD be sent only by Vendors — vendor-side announcement. | ||
| OX-01-001 | Each actor MUST have an outbox collection — delivery of advisory announcement. | ||
| story_2022_069 | As a Participant, tell others that I published | VP-03-012 | Participants whose state changes SHOULD announce to other Participants. |
| VP-12-001 | Vendor Awareness messages SHOULD be sent only by Vendors who become aware. | ||
| VP-09-001 | Embargoes SHALL terminate immediately when information is made public — consequence of publishing. | ||
| story_2022_070 | As a Participant, convey how information I provide can be used | VP-05-006 | Embargo Participants SHOULD NOT knowingly release information — use constraint. |
| VP-16-001 | Vulnerability details MUST NOT appear in embargo representation — separation constraint. | ||
| — | No further mapped requirements (TLP-level information use policies have no direct current spec requirement). | ||
| story_2022_071 | As a Participant, convey information use while obeying TLP | VP-05-006 | Embargo Participants SHOULD NOT knowingly release information — TLP-analogous constraint. |
| VP-16-001 | Vulnerability details MUST NOT appear in embargo representation — content restriction. | ||
| — | No further mapped requirements (TLP tagging is not specified in current specs). | ||
| story_2022_072 | As a Participant, convey what restricted info I will accept | EP-01-002 | The embargo policy record MUST include required fields — policy expresses what info is accepted. |
| VP-05-007 | Embargo participation SHOULD be limited to the smallest possible set — restriction principle. | ||
| — | No further mapped requirements (TLP acceptance policy is not specified in current specs). | ||
| story_2022_073 | As a Participant, convey TLP restriction level I will accept | EP-01-003 | The embargo policy record SHOULD include optional fields — policy fields for restriction level. |
| — | No further mapped requirements (TLP acceptance level is not specified in current specs). | ||
| story_2022_083 | As a Participant, contribute to advisory creation and publication | VP-05-020 | Participants MAY publish information when embargo ends — advisory publication. |
| OX-01-001 | Each actor MUST have an outbox collection — delivery of advisory contribution. | ||
| CM-02-007 | VulnerabilityCase MUST include a notes list — advisory draft content in notes. |
||
| story_2022_107 | As a Vendor, convey vulnerability status to other Participants | VP-02-019 | CVD Participants SHOULD announce RM state transitions to other Participants. |
| VP-03-012 | Participants SHOULD announce RM, EM, or CVD Case State changes. | ||
| CM-03-001 | The system MUST implement the three interacting state machines — RM/EM/CS status tracking. | ||
| CM-04-001 | Handlers processing RM state transitions MUST update participant RM state. | ||
| VP-12-001 | Vendor Awareness messages SHOULD be sent only by Vendors. | ||
| story_2022_108 | As a Vendor, convey vulnerability status to Users/the Public | VP-12-001 | Vendor Awareness messages SHOULD be sent only by Vendors — public status announcement. |
| VP-14-001 | Once Public Awareness has happened — implications for state. | ||
| OX-01-001 | Each actor MUST have an outbox collection — public outbox for status delivery. | ||
| story_2022_109 | As a Vendor, convey reason component not affected to Participants | VP-03-003 | Participants SHOULD send RI when the report validation process determines invalid — not-affected. |
| VP-03-012 | Participants SHOULD announce RM, EM, or CVD Case State changes. | ||
| story_2022_110 | As a Vendor, convey reason component not affected to Public | VP-12-001 | Vendor Awareness messages SHOULD be sent only by Vendors — public not-affected message. |
| OX-01-001 | Each actor MUST have an outbox collection — public outbox delivery. |
8. Bug Bounty and Incentives
| User Story ID | Story text | Spec ID | Spec detail |
|---|---|---|---|
| story_2022_011 | As a Participant, provide bug bounty program info to reporters | EP-01-001 | An Actor profile MAY include an embargo_policy field — profile fields for program information. |
| — | No further mapped requirements (bug bounty program description has no direct current spec requirement). | ||
| story_2022_055 | As a Participant, state that I paid or received a bounty | — | No mapped requirements (bounty payment state is not covered by current specs). |
| story_2022_056 | As a Participant, ask if another Participant paid a reporter | — | No mapped requirements (bounty inquiry is not covered by current specs). |
| story_2022_057 | As a Participant, ask a reporter if they were paid | — | No mapped requirements (bounty inquiry to reporter is not covered by current specs). |
| story_2022_084 | As a vendor, reward the reporter by paying a bounty | — | No mapped requirements (bug bounty payment is not covered by current specs). |
| story_2022_085 | As a reporter, be rewarded with a bounty | — | No mapped requirements (receiving a bounty is not covered by current specs). |
9. Prioritization, Assessment, and Fix Verification
| User Story ID | Story text | Spec ID | Spec detail |
|---|---|---|---|
| story_2022_075 | As a Participant, see response times/states of other Participants | VP-01-001 | Participants SHOULD track the state of other Participants — state visibility. |
| VP-01-002 | Participants SHOULD track the RM states of other Participants — RM state visibility. | ||
| VP-03-012 | Participants whose state changes SHOULD announce to others — state updates received. | ||
| story_2022_082 | As a non-vendor Participant, be informed of CVD for risk assessment | VP-08-014 | Other parties MAY be included as Participants when necessary — non-vendor inclusion for risk assessment. |
| VP-03-012 | Participants whose state changes SHOULD announce to others — status updates support risk assessment. | ||
| VP-08-004 | All known Vendors of affected software SHOULD be included — relevant parties informed. | ||
| story_2022_086 | As a Participant, prioritize response to requests | VP-02-014 | For Valid reports, the Participant SHOULD perform a prioritization step. |
| VP-02-024 | Vendors SHOULD communicate their prioritization choices when prioritizing. | ||
| VP-02-034 | Participants MAY re-prioritize Accepted or Deferred cases. | ||
| TRIG-01-001 | Trigger endpoints use the POST /actors/{actor_id}/trigger/{behavior-name} path pattern — response prioritization can be exposed as a trigger. |
||
| TRIG-01-004 | Trigger processing MUST NOT block the HTTP response — operator-driven prioritization remains async. | ||
| TRIG-05-001 | Trigger endpoints SHOULD reuse existing BT trees rather than duplicating behavior logic — trigger wiring for prioritization. | ||
| story_2022_087 | As a Participant, share info to prioritize work on a report | VP-02-014 | For Valid reports, the Participant SHOULD perform a prioritization step. |
| VP-02-024 | Vendors SHOULD communicate their prioritization choices — shared prioritization data. | ||
| VP-01-001 | Participants SHOULD track the state of other Participants — state supports prioritization. | ||
| story_2022_103 | As a Participant, give Finder opportunity to confirm fix | VP-02-013 | Participants SHOULD provide Reporters an opportunity to update their reports — feedback opportunity. |
| VP-02-011 | Once a Vendor confirms that a reported vulnerability affects a product — fix confirmation context. |
Gap Analysis: Stories with Insufficient Specification Coverage
(DOCS-3, 2026-04-23; updated 2026-08-25)
The following stories have no mapped requirements or only partial coverage in
specs/. Each cluster has an explicit prioritization decision recorded in a
dedicated tracking issue. All clusters are deferred: they are PROD_ONLY
concerns, and the prototype does not implement the infrastructure they require.
Bug Bounty Stories — Deferred (#2563)
Deferred — tracked in #2563 (idea: bug bounty protocol support — scope decision and vocabulary design). These stories require new protocol activity types not present in the current spec. They are out-of-scope for the current prototype and must be explicitly elevated to in-scope before any spec work begins.
- story_2022_055 — "As a Participant, state that I paid or received a bounty" — No spec. Deferred — see #2563.
- story_2022_056 — "As a Participant, ask if another Participant paid a reporter" — No spec. Deferred — see #2563.
- story_2022_057 — "As a Participant, ask a reporter if they were paid" — No spec. Deferred — see #2563.
- story_2022_084 — "As a vendor, reward the reporter by paying a bounty" — No spec. Deferred — see #2563.
- story_2022_085 — "As a reporter, be rewarded with a bounty" — No spec. Deferred — see #2563.
- story_2022_011 — "As a Participant, provide bug bounty program info"
— Partial: only
EP-01-001mapped as a loose proxy. Deferred — see #2563.
Privacy and Anonymity Stories — Deferred (#2562)
Deferred — tracked in #2562 (idea: privacy and anonymity spec — pseudonymous
reporting and actor alias support). These stories depend on
specs/encryption.yaml (all PROD_ONLY) and require cryptographic identity
infrastructure not implemented in the prototype.
- story_2022_024 — "As a Finder/Reporter, constrain communication for anonymity"
— Partial: only
VP-08-017mapped. Deferred — see #2562. - story_2022_033 — "As a Participant, request anonymity in a case"
— Partial: only
VP-08-017mapped. Deferred — see #2562.
Trust and Reputation Stories — Deferred (#2565)
Deferred — tracked in #2565 (idea: trust and reputation — machine-readable compliance history for actor profiles). Depends on federated identity infrastructure (#1156) not yet implemented.
- story_2022_095 — "As a Participant, provide evidence of reputation to others"
— Partial: only
VP-05-013andEP-01-001mapped. Deferred — see #2565. - story_2022_096 — "As a Participant, record/log trust/reputation of others"
— Partial: only
VP-05-013andVP-08-010mapped. Deferred — see #2565.
TLP (Traffic Light Protocol) Stories — Deferred (#2564)
Deferred — tracked in #2564 (idea: TLP field support — vocabulary extension and enforcement rules). Requires alignment with the FIRST TLP 2.0 external standard and cross-cutting vocabulary changes.
- story_2022_070 — "As a Participant, convey how information I provide can be used" — Partial: only embargo-related constraints mapped. Deferred — see #2564.
- story_2022_071 — "As a Participant, convey information use while obeying TLP" — Partial: same gap as story_2022_070 plus enforcement requirements. Deferred — see #2564.
- story_2022_072 — "As a Participant, convey what restricted info I will accept"
— Partial:
EP-01-002andVP-05-007mapped as proxies. Deferred — see #2564. - story_2022_073 — "As a Participant, convey TLP restriction level I will accept"
— Partial:
EP-01-003mapped. Deferred — see #2564.