{
  "policy": {
    "version": 5,
    "patterns": {
      "version": 1,
      "method": "CURATED_PRACTICE_TOPIC",
      "notice": "Pattern topics identify design choices to practice. Read the ticket's acceptance criteria and justify the simplest suitable approach. Tags are not capability or ownership evidence; an untagged ticket has no curated pattern topic assigned."
    },
    "fieldMix": {
      "version": 1,
      "method": "CURATED_ESTIMATE",
      "notice": "Field percentages are editorial estimates of the ticket's engineering focus. They total 100%; they are not measured time, proficiency scores, or ownership evidence."
    },
    "contentStatus": "PRACTICE_BRIEF",
    "assessmentStatus": "NOT_QUALIFIED",
    "evidenceUse": "NONE",
    "aiPolicy": "AI tools are welcome during implementation. Record assumptions, review the result, and verify its behavior.",
    "notice": "Fictional engineering practice briefs. Starter repositories, fixtures, automated grading, and verified ownership are not included.",
    "outcomeEvidence": "Tests, patches, and runbooks are requested deliverables. They become Outcome Evidence only through a qualified Mission and immutable Evidence IDs.",
    "ownershipEvidence": "Independent adaptation must be observed under a declared verification policy and cite immutable Evidence IDs. Completing a planning ticket establishes no Ownership Evidence."
  },
  "patternTopics": [
    {
      "id": "factory-method",
      "label": "Factory Method",
      "group": "Creational"
    },
    {
      "id": "abstract-factory",
      "label": "Abstract Factory",
      "group": "Creational"
    },
    {
      "id": "builder",
      "label": "Builder",
      "group": "Creational"
    },
    {
      "id": "prototype",
      "label": "Prototype",
      "group": "Creational"
    },
    {
      "id": "singleton",
      "label": "Singleton",
      "group": "Creational"
    },
    {
      "id": "adapter",
      "label": "Adapter",
      "group": "Structural"
    },
    {
      "id": "bridge",
      "label": "Bridge",
      "group": "Structural"
    },
    {
      "id": "composite",
      "label": "Composite",
      "group": "Structural"
    },
    {
      "id": "decorator",
      "label": "Decorator",
      "group": "Structural"
    },
    {
      "id": "facade",
      "label": "Facade",
      "group": "Structural"
    },
    {
      "id": "flyweight",
      "label": "Flyweight",
      "group": "Structural"
    },
    {
      "id": "proxy",
      "label": "Proxy",
      "group": "Structural"
    },
    {
      "id": "chain-of-responsibility",
      "label": "Chain of Responsibility",
      "group": "Behavioral"
    },
    {
      "id": "command",
      "label": "Command",
      "group": "Behavioral"
    },
    {
      "id": "interpreter",
      "label": "Interpreter",
      "group": "Behavioral"
    },
    {
      "id": "iterator",
      "label": "Iterator",
      "group": "Behavioral"
    },
    {
      "id": "mediator",
      "label": "Mediator",
      "group": "Behavioral"
    },
    {
      "id": "memento",
      "label": "Memento",
      "group": "Behavioral"
    },
    {
      "id": "observer",
      "label": "Observer",
      "group": "Behavioral"
    },
    {
      "id": "state",
      "label": "State",
      "group": "Behavioral"
    },
    {
      "id": "strategy",
      "label": "Strategy",
      "group": "Behavioral"
    },
    {
      "id": "template-method",
      "label": "Template Method",
      "group": "Behavioral"
    },
    {
      "id": "visitor",
      "label": "Visitor",
      "group": "Behavioral"
    },
    {
      "id": "ports-and-adapters",
      "label": "Ports and Adapters",
      "group": "Architectural"
    },
    {
      "id": "cqrs",
      "label": "CQRS",
      "group": "Architectural"
    },
    {
      "id": "strangler-fig",
      "label": "Strangler Fig",
      "group": "Architectural"
    },
    {
      "id": "saga",
      "label": "Saga",
      "group": "Distributed and reliability"
    },
    {
      "id": "transactional-outbox",
      "label": "Transactional Outbox",
      "group": "Distributed and reliability"
    },
    {
      "id": "circuit-breaker",
      "label": "Circuit Breaker",
      "group": "Distributed and reliability"
    },
    {
      "id": "bulkhead",
      "label": "Bulkhead",
      "group": "Distributed and reliability"
    }
  ],
  "projects": [
    {
      "id": "44e40751-208d-4c15-badf-8883cb027b99",
      "key": "BRELEASE",
      "title": "Risk-based release acceptance",
      "field": "Quality engineering",
      "summary": "Build a focused release gate for a checkout change with explicit coverage gaps.",
      "context": "A fictional retailer is changing delivery options. Its regression suite is large, but no one can explain whether inventory, totals, or recovery behavior is covered.",
      "stack": [
        "TypeScript",
        "Playwright",
        "PostgreSQL"
      ],
      "prerequisites": [
        "Build a minimal local checkout fixture with synthetic prices, inventory, and a mock delivery provider."
      ],
      "developerValue": "Practice risk analysis, exploratory testing, and evidence-based release decisions.",
      "companyValue": "Provide a reviewable release assessment tied to customer-impacting invariants.",
      "delivery": "Deliver the acceptance suite, exploratory notes, and a local release rehearsal; no live transactions.",
      "phases": [
        {
          "id": "scope",
          "title": "Scope release risk",
          "goal": "Translate the change into observable business invariants."
        },
        {
          "id": "exercise",
          "title": "Exercise critical paths",
          "goal": "Test changed behavior and failure recovery."
        },
        {
          "id": "decide",
          "title": "Prepare release review",
          "goal": "Report uncertainty and make rollback conditions explicit."
        }
      ],
      "tickets": [
        {
          "id": "3e2cc852-35ea-4004-a772-5160f325c167",
          "key": "BRELEASE-101",
          "title": "Map delivery-option changes to checkout invariants",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "FOUNDATIONAL",
          "estimateMinutes": 60,
          "phaseId": "scope",
          "dependsOn": [],
          "scenario": "The release checklist says 'test checkout' without defining what must remain true.",
          "acceptanceCriteria": [
            "List total, inventory, address, and order-state invariants.",
            "Rank scenarios by impact and change exposure.",
            "Identify dependencies the local fixture cannot represent."
          ],
          "implementationNotes": [
            "Keep priorities explainable without a composite quality score."
          ],
          "verification": [
            "Trace one delivery change to affected invariants.",
            "Show an unrelated account setting outside this release scope."
          ],
          "deliverables": [
            "Release risk map."
          ],
          "rollout": "Review the map before selecting tests; retain explicit uncovered risks.",
          "skills": [
            "Risk analysis"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 100
            }
          ],
          "patterns": []
        },
        {
          "id": "df9f820c-0a99-4022-aa62-7e85148b168c",
          "key": "BRELEASE-102",
          "title": "Create boundary partitions for delivery eligibility",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 120,
          "phaseId": "scope",
          "dependsOn": [
            "BRELEASE-101"
          ],
          "scenario": "Only ordinary postal codes are tested, while minimum basket size and service boundaries determine eligibility.",
          "acceptanceCriteria": [
            "Partition valid, excluded, and malformed destinations.",
            "Cover basket thresholds below, at, and above the boundary.",
            "State the expected reason when no option is eligible."
          ],
          "implementationNotes": [
            "Use fictional destinations and rates."
          ],
          "verification": [
            "Exercise representative values from every partition.",
            "Reject malformed input without calling the mock provider."
          ],
          "deliverables": [
            "Eligibility case table."
          ],
          "rollout": "Version the case table with the delivery rules.",
          "skills": [
            "Boundary testing",
            "Test design"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 100
            }
          ],
          "patterns": []
        },
        {
          "id": "fce92030-7ebd-4443-9ab6-f8252c76dd61",
          "key": "BRELEASE-103",
          "title": "Verify totals remain stable across delivery-option switching",
          "type": "BUG",
          "priority": "HIGH",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 150,
          "phaseId": "exercise",
          "dependsOn": [
            "BRELEASE-102"
          ],
          "scenario": "Changing options twice sometimes charges the first option while displaying the second.",
          "acceptanceCriteria": [
            "Use the selected option consistently in displayed and submitted totals.",
            "Invalidate stale quotes when inputs change.",
            "Prevent submission while the current quote is unresolved."
          ],
          "implementationNotes": [
            "Represent amounts in exact minor units."
          ],
          "verification": [
            "Switch options rapidly and verify the final total.",
            "Resolve an old quote late and confirm it cannot overwrite selection."
          ],
          "deliverables": [
            "Quote-race regression."
          ],
          "rollout": "Ship with the corrected quote binding; revert the option feature if totals diverge.",
          "skills": [
            "Concurrency testing",
            "Numeric correctness"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 60
            },
            {
              "field": "Frontend",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "99bcb76f-a4c9-4888-8f09-2dc562e89af8",
          "key": "BRELEASE-104",
          "title": "Test inventory reservation when checkout is abandoned",
          "type": "TASK",
          "priority": "HIGH",
          "difficulty": "ADVANCED",
          "estimateMinutes": 210,
          "phaseId": "exercise",
          "dependsOn": [
            "BRELEASE-101"
          ],
          "scenario": "Reservations survive failed checkout and make available stock look sold out.",
          "acceptanceCriteria": [
            "Expire abandoned reservations by the declared deadline.",
            "Preserve completed-order reservations.",
            "Make repeated expiry processing idempotent."
          ],
          "implementationNotes": [
            "Control time and use only synthetic inventory."
          ],
          "verification": [
            "Expire an abandoned reservation.",
            "Race completion with expiry and verify the chosen invariant."
          ],
          "deliverables": [
            "Reservation lifecycle tests."
          ],
          "rollout": "Keep expiry processing observable; pause the changed flow if stock reconciliation fails.",
          "skills": [
            "State transitions",
            "Concurrency"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 60
            },
            {
              "field": "Backend",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "0b280dec-973e-4001-8dd2-19f8693b0847",
          "key": "BRELEASE-105",
          "title": "Check assistive-technology behavior for delivery errors",
          "type": "TASK",
          "priority": "HIGH",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 150,
          "phaseId": "exercise",
          "dependsOn": [
            "BRELEASE-102"
          ],
          "scenario": "Eligibility failures appear visually below the form but keyboard users receive no useful indication.",
          "acceptanceCriteria": [
            "Associate errors with the relevant inputs.",
            "Move or announce focus consistently after failed submission.",
            "Preserve entered values for correction."
          ],
          "implementationNotes": [
            "Use semantic HTML and owned accessible components."
          ],
          "verification": [
            "Complete the flow using a keyboard.",
            "Trigger multiple errors and verify readable order and no focus trap."
          ],
          "deliverables": [
            "Accessibility acceptance notes."
          ],
          "rollout": "Include these checks in the release smoke path; revert inaccessible validation changes.",
          "skills": [
            "Accessibility",
            "Exploratory testing"
          ],
          "fieldMix": [
            {
              "field": "Accessibility",
              "percentage": 50
            },
            {
              "field": "Quality engineering",
              "percentage": 50
            }
          ],
          "patterns": []
        },
        {
          "id": "fa983c57-9f9f-4e5c-8a7a-eeeed15eb061",
          "key": "BRELEASE-106",
          "title": "Exercise partial provider failure without duplicating orders",
          "type": "TASK",
          "priority": "HIGH",
          "difficulty": "ADVANCED",
          "estimateMinutes": 240,
          "phaseId": "exercise",
          "dependsOn": [
            "BRELEASE-103",
            "BRELEASE-104"
          ],
          "scenario": "The delivery provider accepts a booking but the checkout request times out.",
          "acceptanceCriteria": [
            "Represent booking outcome as pending when confirmation is unknown.",
            "Retry using the same operation identity.",
            "Prevent a second order from the same confirmed submission."
          ],
          "implementationNotes": [
            "Use a scripted provider double; send no external bookings."
          ],
          "verification": [
            "Recover a timed-out accepted booking.",
            "Replay duplicate callbacks and verify one final order."
          ],
          "deliverables": [
            "Partial-failure acceptance suite."
          ],
          "rollout": "Release behind a limited local cohort switch; stop new bookings if reconciliation is unhealthy.",
          "skills": [
            "Failure testing",
            "Idempotency"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 50
            },
            {
              "field": "Distributed systems",
              "percentage": 30
            },
            {
              "field": "Integrations",
              "percentage": 20
            }
          ],
          "patterns": []
        },
        {
          "id": "ab1ad063-7535-43b0-9983-571468871f06",
          "key": "BRELEASE-107",
          "title": "Run a structured exploratory session on edited addresses",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "ADVANCED",
          "estimateMinutes": 180,
          "phaseId": "exercise",
          "dependsOn": [
            "BRELEASE-105",
            "BRELEASE-106"
          ],
          "scenario": "Automated cases miss interactions between edited addresses, browser back navigation, and refreshed quotes.",
          "acceptanceCriteria": [
            "Define a charter and a fixed session duration.",
            "Record observations, reproduction steps, and unresolved questions.",
            "Turn a discovered stable regression into one focused test."
          ],
          "implementationNotes": [
            "Do not claim absence of defects from a time-boxed session."
          ],
          "verification": [
            "Explore address edits during pending quotes.",
            "Verify an interrupted session leaves useful reproducible notes."
          ],
          "deliverables": [
            "Exploratory session report."
          ],
          "rollout": "Use findings to update release risk; keep unknown behavior visible.",
          "skills": [
            "Exploratory testing"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 80
            },
            {
              "field": "Frontend",
              "percentage": 20
            }
          ],
          "patterns": []
        },
        {
          "id": "c0f2d49c-0714-4ac0-9189-65fb2564dc9e",
          "key": "BRELEASE-108",
          "title": "Assess a reduced regression suite against explicit omission risk",
          "type": "TASK",
          "priority": "HIGH",
          "difficulty": "EXPERT",
          "estimateMinutes": 300,
          "phaseId": "decide",
          "dependsOn": [
            "BRELEASE-101",
            "BRELEASE-107"
          ],
          "scenario": "The team has thirty minutes for the release gate and cannot run every browser combination.",
          "acceptanceCriteria": [
            "Select checks using the documented change and impact map.",
            "Compare runtime cost against omitted risk.",
            "Identify conditions that require the broader suite before release."
          ],
          "implementationNotes": [
            "Declare device and browser coverage limits without inferring untested support."
          ],
          "verification": [
            "Show coverage for every critical invariant.",
            "Introduce a high-impact uncovered path and force broader verification."
          ],
          "deliverables": [
            "Release gate selection record."
          ],
          "rollout": "Use the reduced gate only within its declared scope; retain a broader fallback.",
          "skills": [
            "Quality strategy",
            "Tradeoff analysis"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 100
            }
          ],
          "patterns": []
        },
        {
          "id": "accb8e82-422e-4ca3-a470-feefc237433b",
          "key": "BRELEASE-109",
          "title": "Create a release evidence index with reproducible commands",
          "type": "CHORE",
          "priority": "MEDIUM",
          "difficulty": "FOUNDATIONAL",
          "estimateMinutes": 60,
          "phaseId": "decide",
          "dependsOn": [
            "BRELEASE-108"
          ],
          "scenario": "Reviewers cannot distinguish current results from screenshots copied from an earlier build.",
          "acceptanceCriteria": [
            "Bind results to fixture and application revisions.",
            "Link each risk to a check or explicit gap.",
            "Include exact local commands and outcomes."
          ],
          "implementationNotes": [
            "Results are practice artifacts, not ownership claims."
          ],
          "verification": [
            "Reproduce one indexed result.",
            "Detect a result whose revision differs from the release candidate."
          ],
          "deliverables": [
            "Release evidence index."
          ],
          "rollout": "Regenerate the index after candidate changes; keep previous reports append-only.",
          "skills": [
            "Provenance",
            "Documentation"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 80
            },
            {
              "field": "Developer tooling",
              "percentage": 20
            }
          ],
          "patterns": []
        },
        {
          "id": "08a18d4e-a7e2-4f88-b815-3304cfe38e03",
          "key": "BRELEASE-110",
          "title": "Rehearse rollback when delivery quotes become inconsistent",
          "type": "TASK",
          "priority": "HIGH",
          "difficulty": "ADVANCED",
          "estimateMinutes": 210,
          "phaseId": "decide",
          "dependsOn": [
            "BRELEASE-106",
            "BRELEASE-109"
          ],
          "scenario": "The rollback plan restores code but says nothing about orders already using the new delivery model.",
          "acceptanceCriteria": [
            "Define a measurable stop condition for quote inconsistency.",
            "Preserve completed orders and reconcile pending bookings.",
            "Verify the old application can read retained order records."
          ],
          "implementationNotes": [
            "Do not delete accepted transactions to simplify recovery."
          ],
          "verification": [
            "Roll back after a synthetic completed and pending order.",
            "Verify unsupported records trigger a reviewed repair path."
          ],
          "deliverables": [
            "Rollback rehearsal and data compatibility report."
          ],
          "rollout": "Gate release on the rehearsal; prefer disabling new bookings while reconciling pending work.",
          "skills": [
            "Release recovery",
            "Data compatibility"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 40
            },
            {
              "field": "Platform engineering",
              "percentage": 30
            },
            {
              "field": "Database engineering",
              "percentage": 30
            }
          ],
          "patterns": []
        }
      ]
    }
  ]
}
