Skip to content

Document failure model - #86

Open
MYRhouma wants to merge 2 commits into
mainfrom
docs/dva-failure-model
Open

MYRhouma wants to merge 2 commits into
mainfrom
docs/dva-failure-model

Conversation

@MYRhouma

@MYRhouma MYRhouma commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Summary

This documents the failure modes identified across evaluation, AoV issuance, and verification.

It defines stable identifiers, detection points, feedback locations, responsible parties, recovery actions, relationships, and known trust limitations. It also records proposed answers to the open design questions and includes a visual hierarchy.

No runtime behavior is changed.

Review focus

  • Failure names and hierarchy
  • Detectability classifications
  • Feedback recipients
  • Recommended actions
  • Open design decisions

CC @bzp99

@MYRhouma
MYRhouma marked this pull request as ready for review September 3, 2026 12:34
Copilot AI lite review requested due to automatic review settings September 3, 2026 12:34

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The Mermaid hierarchy includes a couple of labels that are inconsistent with the stable failure identifiers/meanings, which can mislead readers cross-referencing the diagram and catalog.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Adds a new documentation artifact defining the DVA failure taxonomy across evaluation, AoV issuance, and AoV verification, including stable identifiers, detectability, feedback recipients, recommended actions, and relationships. This supports aligning future backend/frontend behavior and operator workflows without changing runtime behavior.

Changes:

  • Introduces a failure hierarchy (text + Mermaid) to organize outcomes, faults, and trust limitations.
  • Defines a failure catalog with per-failure detection points, feedback locations/recipients, and recovery guidance.
  • Documents a proposed structured “feedback record” contract shape and cross-failure relationship mapping.
File summaries
File Description
docs/failure-model.md Adds the DVA failure/feedback model, including hierarchy diagrams, catalog entries, and a proposed structured contract.
Review details

Suppressed comments (1)

docs/failure-model.md:78

  • The Mermaid diagram labels VLAHASH as "VLA version mismatch", but the corresponding stable code in the hierarchy/catalog is VLA_COMMITMENT_MISMATCH. Aligning the label avoids confusion when cross-referencing the diagram with the catalog.
    VERIFY --> COMMIT[Commitment faults]
    COMMIT --> DATAHASH[Data commitment mismatch]
    COMMIT --> VLAHASH[VLA version mismatch]
  • Files reviewed: 1/1 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread docs/failure-model.md
Comment on lines +73 to +75
VERIFY --> CRYPTO[Cryptographic faults]
CRYPTO --> INVALIDSIG[Invalid signature]
INVALIDSIG -. observed during verification .-> SIGCHECK[Signature verification failed]
@bzp99
bzp99 changed the base branch from yassine-refactor to main September 14, 2026 21:20
@bzp99 bzp99 changed the title docs: define DVA failure and feedback model Document failure model Sep 14, 2026
@bzp99
bzp99 self-requested a review September 14, 2026 21:21
@bzp99
bzp99 force-pushed the docs/dva-failure-model branch from bcdad94 to 1953753 Compare September 14, 2026 21:24
Comment thread docs/failure-model.md
Comment on lines +25 to +83
```text
DVA outcome
├── Expected negative outcome
│ └── DATA_REQUIREMENT_NOT_MET
├── Evaluation faults
│ ├── Execution faults
│ │ ├── EVALUATION_OPERATIONAL_FAULT
│ │ └── EVALUATION_TRANSIENT_FAULT
│ └── Requirement-definition faults
│ ├── EVALUATION_LOGIC_SYNTAX_INVALID
│ ├── EVALUATION_LOGIC_INCORRECT
│ └── REQUIREMENT_MISUNDERSTOOD
├── AoV issuance faults
│ └── AOV_ISSUANCE_OPERATIONAL_FAULT
└── AoV verification faults
├── Structural
│ └── AOV_MALFORMED
├── Cryptographic
│ ├── AOV_SIGNATURE_INVALID
│ └── SIGNATURE_VERIFICATION_FAILED
├── Commitment
│ ├── DATA_COMMITMENT_MISMATCH
│ └── VLA_COMMITMENT_MISMATCH
└── Trust limitation
└── AOV_CLAIMS_FORGED
```

```mermaid
flowchart TD
DVA[DVA outcome]
DVA --> NEG[Expected negative outcome]
NEG --> DATA[Data does not fulfil requirement]

DVA --> EVAL[Evaluation faults]
EVAL --> EXEC[Execution faults]
EXEC --> OP[Operational or environmental fault]
EXEC --> TRANSIENT[Transient or probabilistic fault]
EVAL --> DEF[Requirement definition faults]
DEF --> SYNTAX[Invalid evaluation syntax]
DEF --> LOGIC[Incorrect implementation logic]
DEF --> MEANING[Misunderstood requirement]

DVA --> ISSUE[AoV issuance faults]
ISSUE --> ISSUEOP[Operational issuance fault]

DVA --> VERIFY[AoV verification faults]
VERIFY --> STRUCT[Structural faults]
STRUCT --> MALFORMED[Malformed AoV]
VERIFY --> CRYPTO[Cryptographic faults]
CRYPTO --> INVALIDSIG[Invalid signature]
INVALIDSIG -. observed during verification .-> SIGCHECK[Signature verification failed]
VERIFY --> COMMIT[Commitment faults]
COMMIT --> DATAHASH[Data commitment mismatch]
COMMIT --> VLAHASH[VLA version mismatch]
VERIFY --> TRUST[Trust limitation]
TRUST --> FORGED[Forged evaluation claims]

SYNTAX -. may become an execution fault if not caught earlier .-> OP
```

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of this, I strongly suggest sketching up one or more fault tree(s) as I expect that to help more with communication than a custom representation.

At the top, we have the undesired outcome event like Attestation cannot be generated and we can drill down to the potential causes; eg, there was an error during the AoV VC issuance OR there was some error during the evaluation of some requirement OR there was an error while retrieveing the associated VLA. Most of these intermediate events can be further broken down: for instance, what could cause an error while retrieving the VLA? Perhaps it was that the VLA manager was not reachable. Or that it was reachable but returned a 404 for the sought VLA. And so on.

Comment thread docs/failure-model.md
SYNTAX -. may become an execution fault if not caught earlier .-> OP
```

## Failure Catalog

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This catalogue is very useful and I think all of the identifiers here should be present in the fault tree(s). Then this can be a more detailed explanation of those events along with annotations on how they can be detected and what feedback can be given where, etc.

Comment thread docs/failure-model.md
Comment on lines +234 to +250
## Feedback Matrix

| Failure | Primary interface | Recipient | Recommended response |
|---|---|---|---|
| `DATA_REQUIREMENT_NOT_MET` | Provider dashboard | Provider | Correct the data or review the requirement. |
| `EVALUATION_OPERATIONAL_FAULT` | Dashboard and logs | Operator | Restore the evaluator and retry. |
| `EVALUATION_TRANSIENT_FAULT` | Evaluation details | Provider, operator | Repeat under controlled conditions and compare attempts. |
| `EVALUATION_LOGIC_SYNTAX_INVALID` | VLA Manager | VLA author | Block the requirement and correct the implementation. |
| `EVALUATION_LOGIC_INCORRECT` | VLA Manager tests | VLA author | Review rendered logic and known examples. |
| `REQUIREMENT_MISUNDERSTOOD` | VLA review | VLA author, participants | Review business meaning and representative examples. |
| `AOV_ISSUANCE_OPERATIONAL_FAULT` | Provider dashboard and logs | Operator | Restore signing or persistence and issue again safely. |
| `AOV_MALFORMED` | Consumer dashboard | Consumer | Reject and request a replacement. |
| `AOV_SIGNATURE_INVALID` | Consumer dashboard | Consumer, operator | Reject and investigate issuer, key, or corruption. |
| `SIGNATURE_VERIFICATION_FAILED` | Verification history | Consumer, operator | Reject and inspect the specific cryptographic reason. |
| `DATA_COMMITMENT_MISMATCH` | Consumer dashboard | Consumer, operator | Reject and investigate exchanged data or routing. |
| `VLA_COMMITMENT_MISMATCH` | Consumer dashboard | Consumer, operator | Reject and retrieve the referenced VLA version. |
| `AOV_CLAIMS_FORGED` | Optional re-evaluation | Consumer, security operator | Investigate the signer and disputed claims. |

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't see the purpose of this if it can be derived from the data catalogue above.

Comment thread docs/failure-model.md
Comment on lines +286 to +312
## Proposed Feedback Record

Components need the same structured information even when they present it differently. The following shape is a proposed contract for implementation work. It is not a claim that every field is already returned by the APIs.

```json
{
"code": "DATA_COMMITMENT_MISMATCH",
"outcome": "ERROR",
"stage": "AOV_VERIFICATION",
"category": "COMMITMENT_FAULT",
"parentCode": "AOV_VERIFICATION_FAULT",
"message": "The attestation refers to different data.",
"evidence": {
"algorithm": "sha-256",
"expected": "...",
"actual": "..."
},
"detectability": "AUTOMATIC",
"recipients": ["DATA_CONSUMER", "OPERATOR"],
"retryable": false,
"suggestedAction": "Reject the attestation and investigate the exchanged data."
}
```

`code`, `outcome`, `stage`, and `category` are stable machine-readable values. `message` and `suggestedAction` are user-facing text. `evidence` contains safe structured details returned by the component that detected the problem. It must not expose private keys, credentials, raw secrets, or unnecessary personal data.

The backend should provide the most specific code it can justify. If it cannot identify the cause, it should return an explicit unknown code for the stage rather than asking the frontend to infer a cause from exception text.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As we discussed in our meeting, I don’t think there should be any specialized feedback record. The individual modules all have their own mechanisms of reporting errors: APIs return error responses, frontends show error messages, etc. We do not have to have a unified error feedback format across the whole of DVA.

Comment thread docs/failure-model.md
Comment on lines +314 to +323
## Relationships Between Failures

| Source | Relationship | Target | Meaning |
|---|---|---|---|
| `EVALUATION_TRANSIENT_FAULT` | specialization of | `EVALUATION_OPERATIONAL_FAULT` | It is an evaluation execution fault whose result may change across controlled attempts. |
| `EVALUATION_LOGIC_SYNTAX_INVALID` | may cause | `EVALUATION_OPERATIONAL_FAULT` | Invalid logic becomes a runtime execution fault if VLA creation fails to block it. |
| `SIGNATURE_VERIFICATION_FAILED` | observes | `AOV_SIGNATURE_INVALID` | The verification event exposes the underlying cryptographic problem. |
| `DATA_COMMITMENT_MISMATCH` | invalidates use of | AoV for received data | A valid signature cannot make the credential applicable to different data. |
| `VLA_COMMITMENT_MISMATCH` | invalidates use of | AoV for referenced agreement | The credential cannot prove requirements from another VLA version. |
| Optional consumer re-evaluation | may reveal | `AOV_CLAIMS_FORGED` | Re-evaluation can expose a disagreement but is not part of normal signature verification. |

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Frankly, I think fault trees should obsolete these relationships.

@bzp99
bzp99 added this pull request to stack #93 September 17, 2026 23:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants