{
  "packId": "ACCEPTANCE-CRITERIA-PACK-001",
  "version": "1.0.0",
  "fictional": true,
  "artifactType": "acceptance-criteria-register",
  "roles": [
    { "roleId": "role-product-owner", "label": "Product owner" },
    { "roleId": "role-business-reviewer", "label": "Business reviewer" },
    { "roleId": "role-qa-reviewer", "label": "QA reviewer" },
    { "roleId": "role-security-reviewer", "label": "Security reviewer" },
    { "roleId": "role-accessibility-reviewer", "label": "Accessibility reviewer" },
    { "roleId": "role-operations-reviewer", "label": "Operations reviewer" }
  ],
  "parentItems": [
    {
      "parentItemId": "PBI-INTAKE-017",
      "parentVersion": "1.2",
      "title": "Store a complete public request",
      "outcomeSummary": "A visitor can submit one bounded request and receive a durable public request reference.",
      "ownerRoleId": "role-product-owner"
    },
    {
      "parentItemId": "PBI-REVIEW-021",
      "parentVersion": "2.1",
      "title": "Review a request without silent overwrite",
      "outcomeSummary": "An authorized reviewer can change a request state while stale or unauthorized writes remain safe.",
      "ownerRoleId": "role-product-owner"
    },
    {
      "parentItemId": "PBI-NOTIFY-009",
      "parentVersion": "1.0",
      "title": "Attempt follow-up after durable save",
      "outcomeSummary": "The system preserves the request result independently from a later provider delivery attempt.",
      "ownerRoleId": "role-product-owner"
    }
  ],
  "criteria": [
    {
      "criterionId": "AC-INTAKE-001",
      "parentItemId": "PBI-INTAKE-017",
      "order": 1,
      "format": "scenario",
      "category": "happy-path",
      "title": "Complete request receives a stable reference",
      "rule": "A complete allowed submission creates one durable request before success is shown.",
      "given": [
        "The visitor has opened the current public form version",
        "All required fields contain allowed values and consent is recorded"
      ],
      "when": "The visitor submits the request once",
      "then": [
        "The visitor sees one stable public request reference",
        "The request is available to an authorized reviewer with the submitted values and form version"
      ],
      "evidenceRequirement": {
        "type": "response-contract",
        "description": "Inspect the public response and an authorized read for the same stable request reference.",
        "ownerRoleId": "role-qa-reviewer"
      },
      "status": "review-ready",
      "notes": "This criterion does not assert notification delivery or reviewer approval."
    },
    {
      "criterionId": "AC-INTAKE-002",
      "parentItemId": "PBI-INTAKE-017",
      "order": 2,
      "format": "scenario",
      "category": "invalid-input",
      "title": "Invalid input remains editable and unsaved",
      "rule": "A rejected submission identifies correctable fields without creating a request.",
      "given": ["The public form contains one missing required value and one malformed value"],
      "when": "The visitor submits the invalid form",
      "then": [
        "The visitor sees field-specific guidance without losing other allowed values",
        "No public request reference is issued"
      ],
      "evidenceRequirement": {
        "type": "rendered-state",
        "description": "Inspect the visible error summary, field guidance, retained values, and absence of a request reference.",
        "ownerRoleId": "role-accessibility-reviewer"
      },
      "status": "review-ready",
      "notes": "The criterion describes observable validation behavior, not a full accessibility conformance decision."
    },
    {
      "criterionId": "AC-INTAKE-003",
      "parentItemId": "PBI-INTAKE-017",
      "order": 3,
      "format": "scenario",
      "category": "duplicate-retry",
      "title": "A safe retry does not create a second request",
      "rule": "The same bounded retry identity resolves to the original request result.",
      "given": [
        "A complete request was saved but the visitor did not receive the first response",
        "The retry carries the same server-issued attempt identity and unchanged payload"
      ],
      "when": "The visitor repeats the submission",
      "then": [
        "The visitor receives the original public request reference",
        "An authorized reviewer sees one request rather than a duplicate"
      ],
      "evidenceRequirement": {
        "type": "audit-event",
        "description": "Inspect one durable request plus a separate retry event linked to the same attempt identity.",
        "ownerRoleId": "role-qa-reviewer"
      },
      "status": "review-ready",
      "notes": "The real system must separately define retry scope, payload fingerprint, retention, and conflict behavior."
    },
    {
      "criterionId": "AC-INTAKE-004",
      "parentItemId": "PBI-INTAKE-017",
      "order": 4,
      "format": "rule",
      "category": "accessibility",
      "title": "Validation guidance is programmatically associated",
      "rule": "Every rejected field exposes a programmatically associated message and the error summary links to the field without widening the page.",
      "given": ["At least one required field is invalid"],
      "when": "The validation result is rendered",
      "then": [
        "Keyboard focus reaches the error summary",
        "Each summary item identifies and links to its invalid field"
      ],
      "evidenceRequirement": {
        "type": "accessibility-check",
        "description": "Inspect keyboard focus, accessible associations, linked error targets, and root document containment.",
        "ownerRoleId": "role-accessibility-reviewer"
      },
      "status": "draft",
      "notes": "Specialist accessibility review and conformance remain separate."
    },
    {
      "criterionId": "AC-REVIEW-001",
      "parentItemId": "PBI-REVIEW-021",
      "order": 1,
      "format": "scenario",
      "category": "authorization",
      "title": "Authorized reviewer changes one allowed state",
      "rule": "The signed-in reviewer scope and current record state determine whether the transition is allowed.",
      "given": [
        "The reviewer is signed in with access to the request workspace",
        "The request is in the submitted state at version 4"
      ],
      "when": "The reviewer records the allowed triage transition for version 4",
      "then": [
        "The reviewer sees the triaged state at version 5",
        "The activity view names the actor role, prior state, new state, and request reference"
      ],
      "evidenceRequirement": {
        "type": "audit-event",
        "description": "Inspect the authorized response and one versioned state-transition event for the request.",
        "ownerRoleId": "role-business-reviewer"
      },
      "status": "review-ready",
      "notes": "The criterion does not authorize final acceptance, external fulfillment, or release."
    },
    {
      "criterionId": "AC-REVIEW-002",
      "parentItemId": "PBI-REVIEW-021",
      "order": 2,
      "format": "scenario",
      "category": "authorization",
      "title": "Another workspace learns no private request detail",
      "rule": "An ordinary account outside the request scope cannot read or change the private request.",
      "given": [
        "A second ordinary reviewer belongs to a different workspace",
        "The second reviewer knows the fictional request reference"
      ],
      "when": "The second reviewer attempts to read and change the request",
      "then": [
        "The response reveals no submitted value, state history, or owner detail",
        "The request version and state remain unchanged"
      ],
      "evidenceRequirement": {
        "type": "response-contract",
        "description": "Inspect read and update responses from two ordinary accounts plus the unchanged authorized view.",
        "ownerRoleId": "role-security-reviewer"
      },
      "status": "review-ready",
      "notes": "A hidden control or guessed identifier alone is not authorization evidence."
    },
    {
      "criterionId": "AC-REVIEW-003",
      "parentItemId": "PBI-REVIEW-021",
      "order": 3,
      "format": "scenario",
      "category": "concurrency",
      "title": "A stale reviewer cannot overwrite a newer decision",
      "rule": "A transition based on an old version returns the current record without silent overwrite.",
      "given": [
        "Two authorized reviewers opened request version 4",
        "The first reviewer already created version 5"
      ],
      "when": "The second reviewer submits a different transition against version 4",
      "then": [
        "The second reviewer sees a conflict with the current version and state",
        "The first reviewer\u2019s version 5 decision remains authoritative"
      ],
      "evidenceRequirement": {
        "type": "response-contract",
        "description": "Inspect the conflict response, current record version, and absence of a second state-transition event.",
        "ownerRoleId": "role-qa-reviewer"
      },
      "status": "review-ready",
      "notes": "The product owner must define the next action after a conflict."
    },
    {
      "criterionId": "AC-NOTIFY-001",
      "parentItemId": "PBI-NOTIFY-009",
      "order": 1,
      "format": "scenario",
      "category": "partial-failure",
      "title": "Provider timeout does not erase the saved request",
      "rule": "A provider attempt is tracked separately from the durable request result.",
      "given": [
        "A request was saved with a stable reference",
        "The configured fictional provider does not answer within the bounded attempt window"
      ],
      "when": "The system records the provider timeout",
      "then": [
        "The visitor request remains available to an authorized reviewer",
        "The operations view shows a retryable provider attempt without claiming delivery"
      ],
      "evidenceRequirement": {
        "type": "provider-attempt",
        "description": "Inspect the durable request and a separate timed-out provider attempt linked by stable reference.",
        "ownerRoleId": "role-operations-reviewer"
      },
      "status": "review-ready",
      "notes": "This fictional criterion does not prove provider credentials, transport, delivery, or production behavior."
    },
    {
      "criterionId": "AC-NOTIFY-002",
      "parentItemId": "PBI-NOTIFY-009",
      "order": 2,
      "format": "scenario",
      "category": "duplicate-retry",
      "title": "Repeated provider attempt keeps one attempt identity",
      "rule": "A retry for the same provider operation reuses its bounded idempotency identity.",
      "given": [
        "A timed-out provider attempt remains retryable",
        "No terminal provider result has been reconciled"
      ],
      "when": "Operations requests the bounded retry once",
      "then": [
        "The operations view shows a new attempt event under the original operation identity",
        "The request state does not claim provider delivery"
      ],
      "evidenceRequirement": {
        "type": "provider-attempt",
        "description": "Inspect operation identity, ordered attempt events, and the unchanged delivery claim boundary.",
        "ownerRoleId": "role-operations-reviewer"
      },
      "status": "draft",
      "notes": "Retention, terminal states, reconciliation, and downstream side effects require provider-specific design."
    },
    {
      "criterionId": "AC-NOTIFY-003",
      "parentItemId": "PBI-NOTIFY-009",
      "order": 3,
      "format": "scenario",
      "category": "recovery",
      "title": "Reconciliation records a late provider result",
      "rule": "A late provider result is reconciled without rewriting the original request or earlier attempt history.",
      "given": [
        "The request is durable and the first provider attempt timed out",
        "A later fictional provider result carries the known operation identity"
      ],
      "when": "The system reconciles the late result",
      "then": [
        "The operations view appends the reconciled result after the timeout event",
        "The request reference and submitted values remain unchanged"
      ],
      "evidenceRequirement": {
        "type": "audit-event",
        "description": "Inspect append-only attempt history, result identity, and unchanged request fields.",
        "ownerRoleId": "role-operations-reviewer"
      },
      "status": "draft",
      "notes": "A target-environment smoke and provider-specific verification remain separate release gates."
    }
  ],
  "reviewRules": [
    "Each criterion states one observable behavior boundary for one stable parent item.",
    "Scenario criteria separate known context, one event, and results visible to a person or external system.",
    "Review-ready means the criterion is clear enough for accountable review; it is not a passing test or acceptance decision.",
    "Test cases own fixtures, executable steps, runs, actual results, verdicts, defects, and cleanup.",
    "UAT owns representative business execution and signoff on an exact release.",
    "Product, security, accessibility, operations, and release authorities remain separate."
  ],
  "boundaries": {
    "containsExecutableTestSteps": false,
    "recordsExecutionVerdicts": false,
    "grantsProductApproval": false,
    "grantsUatSignoff": false,
    "authorizesRelease": false,
    "guaranteesOutcome": false
  }
}
