{
  "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": "c893cb7f-50c0-4eda-a668-7f9183b4a846",
      "key": "BCONTRACT",
      "title": "Consumer contract compatibility lab",
      "field": "Quality engineering",
      "summary": "Check independent client expectations against evolving provider behavior.",
      "context": "A fictional fulfillment API serves a web checkout and warehouse adapter. Provider tests pass while consumers fail on subtle response and error changes.",
      "stack": [
        "TypeScript",
        "HTTP",
        "JSON Schema"
      ],
      "prerequisites": [
        "Author two small local consumers and one mock provider with versioned synthetic responses."
      ],
      "developerValue": "Practice executable contracts, meaningful negative tests, and compatibility triage.",
      "companyValue": "Expose integration regressions before deployment without requiring every system to run together.",
      "delivery": "Deliver versioned public contract checks and a local compatibility report.",
      "phases": [
        {
          "id": "capture",
          "title": "Capture expectations",
          "goal": "Identify consumer behavior that forms a real contract."
        },
        {
          "id": "verify",
          "title": "Verify boundaries",
          "goal": "Exercise provider changes and error semantics."
        },
        {
          "id": "adopt",
          "title": "Manage evolution",
          "goal": "Make compatibility decisions and exceptions reviewable."
        }
      ],
      "tickets": [
        {
          "id": "0e278a74-f4e9-4569-bd90-775c9b53f32d",
          "key": "BCONTRACT-101",
          "title": "Inventory the fields each fulfillment consumer actually reads",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "FOUNDATIONAL",
          "estimateMinutes": 60,
          "phaseId": "capture",
          "dependsOn": [],
          "scenario": "The existing contract copies entire sample responses, making harmless changes fail.",
          "acceptanceCriteria": [
            "List fields and semantics used by each consumer.",
            "Distinguish optional fields from required decisions.",
            "Identify one response field neither consumer needs."
          ],
          "implementationNotes": [
            "Use synthetic consumers rather than production traffic."
          ],
          "verification": [
            "Trace checkout and warehouse reads.",
            "Remove an unused field without changing the consumer outcome."
          ],
          "deliverables": [
            "Consumer expectation inventory."
          ],
          "rollout": "Review scope before creating strict assertions.",
          "skills": [
            "Contract testing"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 60
            },
            {
              "field": "API design",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "1a4fa176-6a3d-42ef-8a37-e44564ca85b6",
          "key": "BCONTRACT-102",
          "title": "Create isolated provider states for contract examples",
          "type": "TASK",
          "priority": "HIGH",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 150,
          "phaseId": "capture",
          "dependsOn": [
            "BCONTRACT-101"
          ],
          "scenario": "Contracts depend on whichever orders happen to exist in a shared test database.",
          "acceptanceCriteria": [
            "Create named states with deterministic synthetic identities.",
            "Reset each state independently.",
            "Reject unrecognized state names instead of selecting a default."
          ],
          "implementationNotes": [
            "State setup is accessible only inside the local harness."
          ],
          "verification": [
            "Run states in either order.",
            "Request an unknown state and verify no default data leaks."
          ],
          "deliverables": [
            "Provider-state fixture harness."
          ],
          "rollout": "Use the isolated harness for new contracts; retire shared mutable fixtures.",
          "skills": [
            "Fixtures",
            "Test isolation"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 100
            }
          ],
          "patterns": []
        },
        {
          "id": "c575e385-f8f5-4f25-9e4f-562f476616ed",
          "key": "BCONTRACT-103",
          "title": "Protect decimal quantities from implicit numeric coercion",
          "type": "BUG",
          "priority": "HIGH",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 120,
          "phaseId": "verify",
          "dependsOn": [
            "BCONTRACT-102"
          ],
          "scenario": "The warehouse adapter rounds fractional unit quantities after a provider changes strings to numbers.",
          "acceptanceCriteria": [
            "Specify quantity representation and allowed scale.",
            "Reject excess precision and non-finite values.",
            "Verify consumer arithmetic preserves the declared quantity."
          ],
          "implementationNotes": [
            "Use exact decimal arithmetic or integer units."
          ],
          "verification": [
            "Process a supported fractional quantity.",
            "Reject scientific-notation and overprecision examples where unsupported."
          ],
          "deliverables": [
            "Quantity contract regression."
          ],
          "rollout": "Treat representation changes as reviewed compatibility changes.",
          "skills": [
            "Data contracts",
            "Numeric correctness"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 60
            },
            {
              "field": "API design",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "41f1bd6d-e324-4e47-b494-2392cde220d3",
          "key": "BCONTRACT-104",
          "title": "Verify unknown enum values do not crash old clients",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "ADVANCED",
          "estimateMinutes": 180,
          "phaseId": "verify",
          "dependsOn": [
            "BCONTRACT-102"
          ],
          "scenario": "A new fulfillment status reaches a client compiled against the previous enum.",
          "acceptanceCriteria": [
            "Define unknown-status behavior for each consumer.",
            "Preserve the raw value for safe diagnostics.",
            "Avoid treating unknown as delivered or cancelled."
          ],
          "implementationNotes": [
            "Unknown states must not trigger irreversible actions."
          ],
          "verification": [
            "Handle every documented status.",
            "Feed a future status and verify conservative behavior."
          ],
          "deliverables": [
            "Forward-compatible enum checks."
          ],
          "rollout": "Deploy tolerant readers before adding new provider values.",
          "skills": [
            "Compatibility",
            "State modeling"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 60
            },
            {
              "field": "API design",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "51096f2c-ae27-49bb-b133-03ac4f86ef24",
          "key": "BCONTRACT-105",
          "title": "Test authorization before provider-state response lookup",
          "type": "BUG",
          "priority": "HIGH",
          "difficulty": "ADVANCED",
          "estimateMinutes": 180,
          "phaseId": "verify",
          "dependsOn": [
            "BCONTRACT-102"
          ],
          "scenario": "A contract fixture returns an order by ID even when the caller belongs to another merchant.",
          "acceptanceCriteria": [
            "Scope reads by authenticated merchant at the repository boundary.",
            "Use non-enumerating denial semantics.",
            "Keep privileged fixture setup unavailable to consumers."
          ],
          "implementationNotes": [
            "Contract success must not bypass authorization."
          ],
          "verification": [
            "Read an owned order.",
            "Request another merchant's order and compare safe denial behavior."
          ],
          "deliverables": [
            "Cross-merchant contract cases."
          ],
          "rollout": "Block compatibility approval when tenant denial regresses.",
          "skills": [
            "Authorization",
            "Contract testing"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 50
            },
            {
              "field": "Security",
              "percentage": 50
            }
          ],
          "patterns": []
        },
        {
          "id": "9de2c1c8-5f2d-4ebb-aca7-8087d9a6fec5",
          "key": "BCONTRACT-106",
          "title": "Cover retry semantics for conflicts and transient failures",
          "type": "TASK",
          "priority": "HIGH",
          "difficulty": "ADVANCED",
          "estimateMinutes": 180,
          "phaseId": "verify",
          "dependsOn": [
            "BCONTRACT-103",
            "BCONTRACT-105"
          ],
          "scenario": "Both clients currently retry every failed write, including conflicting requests.",
          "acceptanceCriteria": [
            "Distinguish conflict, validation, and transient errors.",
            "Specify which writes are safely retryable.",
            "Preserve request identity across allowed retries."
          ],
          "implementationNotes": [
            "Use a deterministic mock clock and bounded retry count."
          ],
          "verification": [
            "Recover from one transient error.",
            "Verify validation and conflicting idempotency reuse are not retried."
          ],
          "deliverables": [
            "Error and retry contract suite."
          ],
          "rollout": "Adopt new error handling with the provider behavior unchanged.",
          "skills": [
            "HTTP semantics",
            "Idempotency"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 50
            },
            {
              "field": "API design",
              "percentage": 30
            },
            {
              "field": "Distributed systems",
              "percentage": 20
            }
          ],
          "patterns": []
        },
        {
          "id": "0b92097b-5d43-4c1b-b2fc-f9a6b15d3e69",
          "key": "BCONTRACT-107",
          "title": "Detect undocumented response changes with focused mutation checks",
          "type": "TASK",
          "priority": "HIGH",
          "difficulty": "ADVANCED",
          "estimateMinutes": 210,
          "phaseId": "verify",
          "dependsOn": [
            "BCONTRACT-103",
            "BCONTRACT-104",
            "BCONTRACT-106"
          ],
          "scenario": "A passing contract may only prove the mock matched itself.",
          "acceptanceCriteria": [
            "Mutate one required field, status, or header per case.",
            "Show each relevant mutation makes a consumer expectation fail.",
            "Record intentionally tolerated mutations separately."
          ],
          "implementationNotes": [
            "Mutations target public contract behavior only."
          ],
          "verification": [
            "Catch a missing quantity and wrong conflict status.",
            "Tolerate an unrelated additive response property."
          ],
          "deliverables": [
            "Contract sensitivity report."
          ],
          "rollout": "Review surviving mutations before trusting the contract gate.",
          "skills": [
            "Mutation testing",
            "Test design"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 100
            }
          ],
          "patterns": []
        },
        {
          "id": "8b61cc3d-62c7-4798-9e93-7dcbaecf14be",
          "key": "BCONTRACT-108",
          "title": "Design a compatibility gate that handles missing consumers",
          "type": "TASK",
          "priority": "HIGH",
          "difficulty": "EXPERT",
          "estimateMinutes": 300,
          "phaseId": "adopt",
          "dependsOn": [
            "BCONTRACT-107"
          ],
          "scenario": "A new provider build is marked compatible because one consumer stopped submitting its contract.",
          "acceptanceCriteria": [
            "Require an explicit supported-consumer inventory.",
            "Distinguish failed, missing, stale, and passed verification.",
            "Define a reviewed exception with owner and expiry."
          ],
          "implementationNotes": [
            "Absence of results cannot mean compatibility."
          ],
          "verification": [
            "Pass with all supported consumers checked.",
            "Remove or stale one contract and block the gate."
          ],
          "deliverables": [
            "Compatibility gate decision record."
          ],
          "rollout": "Start as advisory; enforce once inventory ownership is established.",
          "skills": [
            "Release governance",
            "Compatibility"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 60
            },
            {
              "field": "Platform engineering",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "5a35c8aa-6c98-4388-a6b8-e6b9a5dd9c65",
          "key": "BCONTRACT-109",
          "title": "Generate a human-readable contract failure explanation",
          "type": "STORY",
          "priority": "MEDIUM",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 120,
          "phaseId": "adopt",
          "dependsOn": [
            "BCONTRACT-108"
          ],
          "scenario": "Engineers see a JSON diff but cannot tell which consumer behavior changed.",
          "acceptanceCriteria": [
            "Name the consumer and contract revision.",
            "Show the relevant expected and observed public fields.",
            "Exclude credentials and unrelated payload content."
          ],
          "implementationNotes": [
            "Bound output and redact synthetic secret markers."
          ],
          "verification": [
            "Explain a changed error status.",
            "Verify oversized payloads and authorization headers are omitted."
          ],
          "deliverables": [
            "Failure explanation formatter."
          ],
          "rollout": "Attach explanations to existing failed checks without altering outcomes.",
          "skills": [
            "Developer experience",
            "Diagnostics"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 60
            },
            {
              "field": "Developer tooling",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "dc2b44f2-392f-4124-923d-d0a220c6d4d2",
          "key": "BCONTRACT-110",
          "title": "Rehearse retiring an unused consumer contract",
          "type": "CHORE",
          "priority": "LOW",
          "difficulty": "FOUNDATIONAL",
          "estimateMinutes": 60,
          "phaseId": "adopt",
          "dependsOn": [
            "BCONTRACT-109"
          ],
          "scenario": "An abandoned warehouse client keeps blocking harmless provider changes.",
          "acceptanceCriteria": [
            "Record owner confirmation and supported-version cutoff.",
            "Preserve the retired contract for history.",
            "Remove it from required checks only after the cutoff."
          ],
          "implementationNotes": [
            "Do not delete active consumer coverage based solely on low test activity."
          ],
          "verification": [
            "Retire a synthetic obsolete consumer.",
            "Verify an active consumer remains required."
          ],
          "deliverables": [
            "Contract retirement procedure."
          ],
          "rollout": "Keep the last compatibility report available for rollback investigation.",
          "skills": [
            "Lifecycle management",
            "Documentation"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 70
            },
            {
              "field": "API design",
              "percentage": 30
            }
          ],
          "patterns": []
        }
      ]
    }
  ]
}
