{
  "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": "f1a43d6a-7c9b-4238-9fdd-c8584780644a",
      "key": "BINCIDENT",
      "title": "Queue backlog incident response",
      "field": "Site reliability",
      "summary": "Diagnose and recover delayed background work without duplicating effects.",
      "context": "A fictional document service has a rising processing backlog. Operators cannot tell whether arrivals, worker failures, or a slow dependency is responsible.",
      "stack": [
        "TypeScript",
        "BullMQ",
        "Redis"
      ],
      "prerequisites": [
        "Create a bounded local queue simulation with synthetic jobs and controllable worker/dependency failures."
      ],
      "developerValue": "Practice incident timelines, queue diagnosis, and measured recovery.",
      "companyValue": "Produce a repeatable response that preserves work integrity and exposes customer delay.",
      "delivery": "Deliver local incident instrumentation, recovery controls, and a tabletop report.",
      "phases": [
        {
          "id": "observe",
          "title": "Observe backlog",
          "goal": "Separate queue age, throughput, and failure symptoms."
        },
        {
          "id": "contain",
          "title": "Contain safely",
          "goal": "Control arrivals and retries while preserving job identity."
        },
        {
          "id": "recover",
          "title": "Recover and learn",
          "goal": "Drain work and validate recovery decisions."
        }
      ],
      "tickets": [
        {
          "id": "132f5f91-367b-419e-9187-8c0346612078",
          "key": "BINCIDENT-101",
          "title": "Report oldest eligible job age alongside queue depth",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "FOUNDATIONAL",
          "estimateMinutes": 60,
          "phaseId": "observe",
          "dependsOn": [],
          "scenario": "A shallow queue can still contain a single customer job stuck for hours.",
          "acceptanceCriteria": [
            "Measure oldest eligible age separately from count.",
            "Exclude scheduled future work from overdue age.",
            "Show missing timestamp records explicitly."
          ],
          "implementationNotes": [
            "Use bounded job-type labels only."
          ],
          "verification": [
            "Measure a known delayed fixture.",
            "Keep future-scheduled jobs out of overdue calculations."
          ],
          "deliverables": [
            "Backlog age metric."
          ],
          "rollout": "Add read-only metrics before changing worker behavior.",
          "skills": [
            "Queue observability"
          ],
          "fieldMix": [
            {
              "field": "Site reliability",
              "percentage": 80
            },
            {
              "field": "Platform engineering",
              "percentage": 20
            }
          ],
          "patterns": []
        },
        {
          "id": "3e4b7de0-a6a4-4786-9248-2a5a42215167",
          "key": "BINCIDENT-102",
          "title": "Separate arrival rate from successful service rate",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 120,
          "phaseId": "observe",
          "dependsOn": [
            "BINCIDENT-101"
          ],
          "scenario": "The dashboard counts retries as new incoming customer work.",
          "acceptanceCriteria": [
            "Track logical arrivals, attempts, and completions separately.",
            "Use consistent measurement windows.",
            "Expose worker concurrency with throughput."
          ],
          "implementationNotes": [
            "Do not infer capacity from a single peak sample."
          ],
          "verification": [
            "Reconcile a fixture with repeated attempts.",
            "Detect growing backlog despite high attempt throughput."
          ],
          "deliverables": [
            "Queue flow dashboard."
          ],
          "rollout": "Compare against synthetic queue inventory before relying on alerts.",
          "skills": [
            "Metrics",
            "Capacity analysis"
          ],
          "fieldMix": [
            {
              "field": "Site reliability",
              "percentage": 60
            },
            {
              "field": "Performance engineering",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "94197340-77d5-486a-a40c-0ef9de7bcfcf",
          "key": "BINCIDENT-103",
          "title": "Identify poison jobs without starving unrelated work",
          "type": "BUG",
          "priority": "HIGH",
          "difficulty": "ADVANCED",
          "estimateMinutes": 180,
          "phaseId": "contain",
          "dependsOn": [
            "BINCIDENT-102"
          ],
          "scenario": "One malformed document repeatedly consumes the first worker slot.",
          "acceptanceCriteria": [
            "Bound attempts by failure category.",
            "Move exhausted jobs to an inspectable terminal holding state.",
            "Allow unrelated valid jobs to continue."
          ],
          "implementationNotes": [
            "Keep payload contents out of generic incident logs."
          ],
          "verification": [
            "Quarantine a deterministic poison job.",
            "Process a valid neighboring job and preserve its identity."
          ],
          "deliverables": [
            "Poison-job containment."
          ],
          "rollout": "Enable per job type; retain held work for reviewed correction.",
          "skills": [
            "Retries",
            "Queue design"
          ],
          "fieldMix": [
            {
              "field": "Platform engineering",
              "percentage": 60
            },
            {
              "field": "Site reliability",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "bed818de-b4ef-4677-8183-ff690a51ba12",
          "key": "BINCIDENT-104",
          "title": "Pause selected producers while preserving accepted work",
          "type": "TASK",
          "priority": "HIGH",
          "difficulty": "ADVANCED",
          "estimateMinutes": 180,
          "phaseId": "contain",
          "dependsOn": [
            "BINCIDENT-102"
          ],
          "scenario": "Operators stop every producer even though only one import path overloads the queue.",
          "acceptanceCriteria": [
            "Scope pause controls to declared producer classes.",
            "Reject new work with explicit retry guidance.",
            "Preserve previously accepted job records."
          ],
          "implementationNotes": [
            "Privileged pause changes require an audit entry."
          ],
          "verification": [
            "Pause the synthetic import producer.",
            "Verify another producer works and unauthorized pause is denied."
          ],
          "deliverables": [
            "Scoped admission control."
          ],
          "rollout": "Start with one producer switch; restore intake gradually after backlog age recovers.",
          "skills": [
            "Admission control",
            "Authorization"
          ],
          "fieldMix": [
            {
              "field": "Site reliability",
              "percentage": 50
            },
            {
              "field": "Platform engineering",
              "percentage": 30
            },
            {
              "field": "Security",
              "percentage": 20
            }
          ],
          "patterns": []
        },
        {
          "id": "3f380235-9c75-4802-8726-3a31c66fe0fa",
          "key": "BINCIDENT-105",
          "title": "Recover expired worker leases without concurrent duplicate effects",
          "type": "BUG",
          "priority": "HIGH",
          "difficulty": "ADVANCED",
          "estimateMinutes": 210,
          "phaseId": "contain",
          "dependsOn": [
            "BINCIDENT-103"
          ],
          "scenario": "A worker crashes after producing output but before acknowledging completion.",
          "acceptanceCriteria": [
            "Use stable job operation identity.",
            "Reclaim only expired ownership.",
            "Adopt existing completed output before repeating effects."
          ],
          "implementationNotes": [
            "Mock effects must be idempotent and locally scoped."
          ],
          "verification": [
            "Crash after effect acceptance and reclaim.",
            "Race two reclaimers and observe one terminal outcome."
          ],
          "deliverables": [
            "Lease recovery behavior."
          ],
          "rollout": "Reclaim in bounded batches; stop on conflicting output identities.",
          "skills": [
            "Leases",
            "Idempotency"
          ],
          "fieldMix": [
            {
              "field": "Distributed systems",
              "percentage": 50
            },
            {
              "field": "Platform engineering",
              "percentage": 30
            },
            {
              "field": "Site reliability",
              "percentage": 20
            }
          ],
          "patterns": []
        },
        {
          "id": "e9de9fc1-cff1-433c-8989-3db9130ff37f",
          "key": "BINCIDENT-106",
          "title": "Tune retry delay for a throttled dependency",
          "type": "TASK",
          "priority": "HIGH",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 150,
          "phaseId": "contain",
          "dependsOn": [
            "BINCIDENT-103",
            "BINCIDENT-104"
          ],
          "scenario": "Immediate retries amplify the dependency's temporary throttling.",
          "acceptanceCriteria": [
            "Respect bounded retry-after guidance.",
            "Apply jitter with reproducible test control.",
            "Cap total attempts and elapsed time."
          ],
          "implementationNotes": [
            "Never retry permanent validation or authorization failures."
          ],
          "verification": [
            "Recover after a temporary throttle.",
            "Exhaust a persistent outage without a retry storm."
          ],
          "deliverables": [
            "Dependency retry policy."
          ],
          "rollout": "Trial on one job class; pause dispatch if throttling remains sustained.",
          "skills": [
            "Backoff",
            "Resilience"
          ],
          "fieldMix": [
            {
              "field": "Site reliability",
              "percentage": 60
            },
            {
              "field": "Integrations",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "5e3e5a35-2214-4c97-b5f2-a20ff4972b7f",
          "key": "BINCIDENT-107",
          "title": "Estimate backlog drain time under explicit capacity assumptions",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "ADVANCED",
          "estimateMinutes": 180,
          "phaseId": "recover",
          "dependsOn": [
            "BINCIDENT-102",
            "BINCIDENT-106"
          ],
          "scenario": "Support promises a completion time using queue depth divided by the busiest worker's speed.",
          "acceptanceCriteria": [
            "Use measured successful service and arrival rates.",
            "Report assumptions and uncertainty bounds.",
            "Return no finite estimate when arrivals meet or exceed service."
          ],
          "implementationNotes": [
            "Use synthetic measurements and avoid general capacity claims."
          ],
          "verification": [
            "Estimate a controlled draining workload.",
            "Show an unstable workload as non-draining."
          ],
          "deliverables": [
            "Drain-time estimator."
          ],
          "rollout": "Publish estimates with their observation window; retract stale estimates.",
          "skills": [
            "Queueing",
            "Capacity planning"
          ],
          "fieldMix": [
            {
              "field": "Performance engineering",
              "percentage": 60
            },
            {
              "field": "Site reliability",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "bf808a7a-5d59-4411-968a-e212a1d66b4c",
          "key": "BINCIDENT-108",
          "title": "Rehearse backlog recovery with a constrained worker budget",
          "type": "TASK",
          "priority": "HIGH",
          "difficulty": "EXPERT",
          "estimateMinutes": 300,
          "phaseId": "recover",
          "dependsOn": [
            "BINCIDENT-104",
            "BINCIDENT-105",
            "BINCIDENT-107"
          ],
          "scenario": "Adding workers may increase database contention and make recovery slower.",
          "acceptanceCriteria": [
            "Compare two bounded concurrency settings under identical arrivals.",
            "Measure completion age, dependency pressure, and duplicate-effect checks.",
            "Choose a recovery setting with stated tradeoffs."
          ],
          "implementationNotes": [
            "Record machine limits; do not extrapolate local capacity to production."
          ],
          "verification": [
            "Drain the synthetic incident workload.",
            "Demonstrate a setting that worsens contention or violates limits."
          ],
          "deliverables": [
            "Recovery experiment report."
          ],
          "rollout": "Raise concurrency in measured steps; revert when dependency or integrity thresholds fail.",
          "skills": [
            "Performance experiments",
            "Incident response"
          ],
          "fieldMix": [
            {
              "field": "Performance engineering",
              "percentage": 60
            },
            {
              "field": "Site reliability",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "ba55f9ec-cb8f-48ef-abad-0c468c0fc0c5",
          "key": "BINCIDENT-109",
          "title": "Create an incident timeline from control and queue events",
          "type": "STORY",
          "priority": "MEDIUM",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 120,
          "phaseId": "recover",
          "dependsOn": [
            "BINCIDENT-108"
          ],
          "scenario": "The post-incident discussion relies on memory of when pauses and retries changed.",
          "acceptanceCriteria": [
            "Record control actions with actor and UTC time.",
            "Link changes to observed backlog metrics.",
            "Separate observations from causal hypotheses."
          ],
          "implementationNotes": [
            "Exclude customer payloads and personal operator commentary."
          ],
          "verification": [
            "Reconstruct the synthetic incident.",
            "Show a missing observation as a gap rather than inventing timing."
          ],
          "deliverables": [
            "Incident timeline exporter."
          ],
          "rollout": "Preserve original event records; append corrections to the timeline.",
          "skills": [
            "Auditability",
            "Incident analysis"
          ],
          "fieldMix": [
            {
              "field": "Site reliability",
              "percentage": 80
            },
            {
              "field": "Data engineering",
              "percentage": 20
            }
          ],
          "patterns": []
        },
        {
          "id": "95ee50ea-fc4b-4fbe-bc39-42b52dcfad77",
          "key": "BINCIDENT-110",
          "title": "Write a queue handoff with explicit resume conditions",
          "type": "CHORE",
          "priority": "LOW",
          "difficulty": "FOUNDATIONAL",
          "estimateMinutes": 60,
          "phaseId": "recover",
          "dependsOn": [
            "BINCIDENT-109"
          ],
          "scenario": "The next on-call engineer inherits paused intake without knowing when to reopen it.",
          "acceptanceCriteria": [
            "List active controls and held job counts.",
            "Specify measurable intake-resume conditions.",
            "Document safe rollback of each temporary control."
          ],
          "implementationNotes": [
            "Commands target the local incident fixture only."
          ],
          "verification": [
            "Resume intake using the handoff.",
            "Keep intake paused when dependency health remains unknown."
          ],
          "deliverables": [
            "On-call handoff runbook."
          ],
          "rollout": "Require a handoff whenever containment outlives the current operator.",
          "skills": [
            "Runbooks"
          ],
          "fieldMix": [
            {
              "field": "Site reliability",
              "percentage": 100
            }
          ],
          "patterns": []
        }
      ]
    }
  ]
}
