Inherited Requirements
This page is normative
This page is considered a core part of the Vultron Protocol. This is a normative section of the documentation.
The whole specification on one page
The specification is also published as a single page that holds every section and annex in order, for printing or for searching the whole text at once.
This page holds section 14.8 of the Vultron Protocol Specification, part of its Requirements Catalog. Each row is one requirement, and the rest of the documentation links a requirement to its row here.
14.8 Inherited Requirements
These are the rules Vultron inherits from the standards beneath it: ActivityStreams 2.0 (AS2), ActivityPub, and the Hypertext Transfer Protocol (HTTP). They cover addressing and delivery, HTTP status codes, and rules that only restate AS2, such as every object ID being an Internationalized Resource Identifier (IRI). Where Vultron asks for one form among several that a standard allows, the rule is a Vultron requirement on one of the pages before this one, not an inherited one.
Vocabulary Model
Requirements governing how ActivityStreams 2.0 vocabulary types are defined, registered, configured, and deserialized in the Vultron wire layer. The vocabulary model is the foundation of the inbound pipeline: every activity must be deserialized into a known vocabulary type before semantic extraction can assign it a domain meaning.
Serialization Rules
Message Validation
Requirements for validating ActivityStreams 2.0 activities at the inbox handler boundary, covering ActivityStreams structure and semantic validation. Invalid activities are rejected with appropriate error responses before dispatch.
Activity Structure Validation
URI Validation
Semantic Extraction
The inbox handler extracts semantic meaning from ActivityStreams activities by matching activity type and object type patterns. This semantic type determines which handler function processes the activity.
Pattern Matching
Actor Knowledge Model
Defines the Actor Knowledge Model: a Vultron Actor's knowledge of the world is strictly bounded by the ActivityStreams 2.0 activities it has received. Actors must not assume recipients hold objects that were not explicitly included in prior activities; DataLayer access is private and non-shareable, and all inter-Actor communication occurs exclusively through the AS2 wire protocol.
Actor Addressing and Discovery
Code Style Specifications
Defines code formatting, import organization, and coding style standards for Python code in the Vultron project.
Datetime and Timezone Conventions
Idempotency
Requirements for handling duplicate activity submissions gracefully, ensuring repeated identical requests produce the same outcome without unintended side effects.
Activity ID Uniqueness
Object ID
Requirements for the format and handling of object identifiers throughout the Vultron system. Establishes full-URI IDs as the canonical form for all ActivityStreams objects and DataLayer records.
ID Format
| ID | Priority | Requirement | Related |
|---|---|---|---|
OID-01-001 |
MUST | All ActivityStreams object IDs MUST use full URI form ActivityPub requires every object it distributes to carry a publicly dereferenceable URI as its identifier, which a relative or bare identifier is not. ActivityStreams 2.0 alone only says relative references SHOULD NOT be used. Vultron inherits the ActivityPub rule. |
Implements: VP-16-002 Implements: VP-16-003 |
OID-01-002 |
MUST | IDs MUST be unique within the issuing actor's deployment; cross-deployment uniqueness is achieved by requiring full URI form (OID-01-001) with a deployment-controlled authority component. Restates ActivityPub's identifier rule: an object's URI has an authority belonging to the server that originated it, so that server keeps it unique and uniqueness across deployments follows from the full URI form. |
Response Format
The Vultron protocol uses ActivityStreams activities for both requests and responses. When handlers process inbound activities, they generate response activities (Accept, Reject, Update, etc.) sent to the originating actor or other participants.
Response Activity Structure
Response Delivery
HTTP Protocol Requirements
HTTP protocol requirements for the Vultron API, covering status codes, headers, and content negotiation.
Content-Type Validation
HTTP Status Codes
The status codes HTTP itself defines for each outcome, which Vultron inherits (foundation, http). Where HTTP leaves the choice open, as with 422 for a schema failure, the code is this codebase's choice and the spec is project.
Inbox Endpoint
The inbox endpoint is the primary entry point for actor-to-actor communication in Vultron. It receives ActivityStreams activities via HTTP POST, validates them, and queues them for asynchronous processing.
Endpoint Configuration
| ID | Priority | Requirement | Related |
|---|---|---|---|
IE-02-001 |
MUST | The endpoint URL MUST be discoverable from actor profile ActivityPub requires every actor object to carry its inbox property, so a peer finds the endpoint from the profile rather than by a URL convention, which also leaves each deployment free to place it. |
|
IE-02-002 |
MUST | The endpoint MUST accept activities delivered to it by HTTP POST. ActivityPub delivers an activity to an inbox by HTTP POST. Vultron inherits the rule. That POST is the only method the inbox serves is this codebase's choice (IE-02-005). |
|
IE-02-003 |
MUST | The endpoint MUST reject non-POST requests with HTTP 405 The inbox is a delivery target, not a mailbox other actors may read: ActivityPub grants an inbox read only to the actor's own authenticated owner, and Vultron has no authentication, so a GET here would open another actor's mail. The 405 covers both trailing-slash forms, and it does not fall out of having no GET route: the profile route is a path catch-all ( /{actor_id:path}) that answers 404 to an unrouted GET, so the inbox path needs its own method refusal declared ahead of it. |
Depends on: HTTP-03-001 |
Request Handling
| ID | Priority | Requirement | Related |
|---|---|---|---|
IE-03-001 |
MUST | The endpoint MUST validate Content-Type header The Content-Type header tells the receiver how to read the body. A body sent as another media type may not be an ActivityStreams document. If the inbox checks the header first, it can refuse such a body with a clear answer (HTTP-01-003) before it parses the body. |
Depends on: HTTP-01-001 |
IE-03-003 |
MUST | Requests exceeding the maximum request body size MUST be rejected with HTTP 413. Rejecting oversized payloads with an explicit 413 prevents resource exhaustion and signals the limit violation to the sender. |
Refines: IE-03-002 Depends on: HTTP-02-001 — HTTP-02-001's default limit decides when this 413 applies; HTTP-02-001 keeps only the limit, and the 413 answer stays here (MS-12-010) |
Error Responses
| ID | Priority | Requirement | Related |
|---|---|---|---|
IE-07-001 |
MUST | The endpoint MUST answer with the status code HTTP defines for each transport failure: HTTP 400 for a malformed request, HTTP 405 for a method other than POST, and HTTP 413 for a request body over the size limit. HTTP defines these status codes for these failures. Any peer with an HTTP client understands them without knowledge of Vultron, so the inbox uses them as HTTP defines them. |
Depends on: HTTP-03-001 |
Outbox
Requirements for actor outboxes, which hold response activities generated by handlers. Covers outbox structure, population, delivery, local and federated dispatch, idempotency, outbound reference dehydration, and outbox addressing rules.
Outbox Population
Outbox Delivery
Agentic Readiness
Requirements for API and CLI design that enable reliable interaction by automated agents and AI systems. Covers machine-parseable interfaces, structured response formats, and observable behavior that supports agentic workflows.