{
  "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": "40608db5-35cd-4637-b5a2-3043fef5b1b7",
      "key": "AADMIT",
      "title": "Design admission control for scheduled report generation",
      "field": "System design",
      "summary": "Define fair scheduling, bounded work and recovery for a report service.",
      "context": "A fictional analytics product lets customers schedule expensive reports at the top of the hour. The API remains available only if report work is admitted and cancelled predictably.",
      "stack": [
        "TypeScript",
        "PostgreSQL",
        "BullMQ"
      ],
      "prerequisites": [
        "Create a local scheduler model and synthetic report jobs.",
        "Use fake execution providers; no customer queries or candidate code run on worker hosts."
      ],
      "developerValue": "Practice workload modeling, fairness and cancellation architecture.",
      "companyValue": "Review controllable operating costs and predictable customer-facing overload behavior.",
      "delivery": "Ten scoped tickets across three phases. Build a synthetic local service or select a ticket after recreating its prerequisites; estimates exclude setup.",
      "phases": [
        {
          "id": "load",
          "title": "Define load and fairness",
          "goal": "Make demand and service objectives explicit."
        },
        {
          "id": "control",
          "title": "Specify admission and work ownership",
          "goal": "Bound queues, retries and cancellation."
        },
        {
          "id": "stress",
          "title": "Challenge overload behavior",
          "goal": "Model burst recovery and review operating limits."
        }
      ],
      "tickets": [
        {
          "id": "8ba0ed0d-54d5-43f9-9a53-6e0f0300a086",
          "key": "AADMIT-101",
          "title": "Build a report arrival model that includes top-of-hour bursts",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "FOUNDATIONAL",
          "estimateMinutes": 90,
          "phaseId": "load",
          "dependsOn": [],
          "scenario": "Average reports per minute looks harmless, but nearly every customer chooses 09:00 for its daily report.",
          "acceptanceCriteria": [
            "Separate average arrival rate from burst size.",
            "State hypothetical report duration and size classes.",
            "Include timezone scheduling assumptions."
          ],
          "implementationNotes": [
            "Create a deterministic synthetic one-day schedule."
          ],
          "verification": [
            "Count average arrivals and the largest one-minute burst.",
            "Move all schedules to one instant and show the peak changes despite equal daily volume."
          ],
          "deliverables": [
            "Arrival model and reproducible schedule generator"
          ],
          "rollout": "Review the model before queue sizing; revise assumptions when schedule usage is measured.",
          "skills": [
            "Workload modeling",
            "Scheduling"
          ],
          "fieldMix": [
            {
              "field": "System design",
              "percentage": 50
            },
            {
              "field": "Performance engineering",
              "percentage": 50
            }
          ],
          "patterns": []
        },
        {
          "id": "fa744788-c136-4ecc-afd1-2b1050ad1a5b",
          "key": "AADMIT-102",
          "title": "Define customer-visible report states and overload responses",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 150,
          "phaseId": "load",
          "dependsOn": [
            "AADMIT-101"
          ],
          "scenario": "The API returns accepted for jobs that may wait indefinitely, so customers repeatedly click generate.",
          "acceptanceCriteria": [
            "Distinguish rejected, queued, running and terminal states.",
            "Specify bounded queue age and a retryable admission response.",
            "Define what acceptance durably guarantees."
          ],
          "implementationNotes": [
            "Use explicit state transitions and stable job identities."
          ],
          "verification": [
            "Trace an admitted report to its durable queue state.",
            "Reject an over-capacity request without creating a phantom report."
          ],
          "deliverables": [
            "Admission response contract and state table"
          ],
          "rollout": "Review the contract before accepting schedules; keep overload behavior explicit in the prototype.",
          "skills": [
            "API design",
            "State modeling"
          ],
          "fieldMix": [
            {
              "field": "API design",
              "percentage": 50
            },
            {
              "field": "System design",
              "percentage": 30
            },
            {
              "field": "Backend",
              "percentage": 20
            }
          ],
          "patterns": []
        },
        {
          "id": "1a98ca58-7afc-425d-8917-3dd341022e3c",
          "key": "AADMIT-103",
          "title": "Record the fairness decision for small and large report tenants",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "FOUNDATIONAL",
          "estimateMinutes": 120,
          "phaseId": "load",
          "dependsOn": [
            "AADMIT-101",
            "AADMIT-102"
          ],
          "scenario": "A single tenant's weekly exports occupy every available slot while small interactive reports wait behind them.",
          "acceptanceCriteria": [
            "Compare FIFO, per-tenant limits and weighted scheduling.",
            "Define fairness and starvation expectations.",
            "Document how unknown report cost is classified."
          ],
          "implementationNotes": [
            "Use a small synthetic tenant set and avoid hiring or user scoring."
          ],
          "verification": [
            "Evaluate a mixed small/large workload against the chosen rule.",
            "Show the behavior when one tenant continuously submits work."
          ],
          "deliverables": [
            "Fairness decision record"
          ],
          "rollout": "Review the chosen policy with the workload model; retain configuration for bounded tuning.",
          "skills": [
            "Scheduling tradeoffs",
            "Fairness"
          ],
          "fieldMix": [
            {
              "field": "System design",
              "percentage": 60
            },
            {
              "field": "Distributed systems",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "e8b6d914-6122-4995-bfc6-0d61adbc8d55",
          "key": "AADMIT-104",
          "title": "Specify transactional report admission with deterministic job identities",
          "type": "STORY",
          "priority": "MEDIUM",
          "difficulty": "ADVANCED",
          "estimateMinutes": 240,
          "phaseId": "control",
          "dependsOn": [
            "AADMIT-102",
            "AADMIT-103"
          ],
          "scenario": "A scheduler creates report rows but loses queue publication, leaving accepted work with no execution path.",
          "acceptanceCriteria": [
            "Commit admission and outbox fact atomically.",
            "Bind job identity to schedule occurrence or request key.",
            "Make repeated dispatch resolve one logical job."
          ],
          "implementationNotes": [
            "Keep lifecycle authority in the durable service boundary."
          ],
          "verification": [
            "Crash after admission commit and recover dispatch.",
            "Replay the same scheduled occurrence and count one report."
          ],
          "deliverables": [
            "Admission/outbox contract and crash probe"
          ],
          "rollout": "Prototype with a fake executor; stop new admission if durable dispatch cannot be recorded.",
          "skills": [
            "Transactional outbox",
            "Idempotency"
          ],
          "fieldMix": [
            {
              "field": "System design",
              "percentage": 40
            },
            {
              "field": "Distributed systems",
              "percentage": 40
            },
            {
              "field": "Database engineering",
              "percentage": 20
            }
          ],
          "patterns": []
        },
        {
          "id": "b587096d-ae53-4945-a9c5-d734cb9ccf09",
          "key": "AADMIT-105",
          "title": "Design cancellation ownership for queued and running reports",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "EXPERT",
          "estimateMinutes": 300,
          "phaseId": "control",
          "dependsOn": [
            "AADMIT-102",
            "AADMIT-104"
          ],
          "scenario": "A user cancels a report, but the worker later publishes a completed artifact and overwrites the cancellation status.",
          "acceptanceCriteria": [
            "Define cancellation request versus confirmed stop.",
            "Fence stale completion against current generation and state.",
            "Specify cleanup ownership for incomplete artifacts."
          ],
          "implementationNotes": [
            "Use a provider cancellation contract; do not kill host processes arbitrarily."
          ],
          "verification": [
            "Cancel queued work and verify no execution begins.",
            "Race cancellation with completion and preserve the declared single terminal outcome."
          ],
          "deliverables": [
            "Cancellation protocol and race model"
          ],
          "rollout": "Canary cancellation in the local provider; retain unresolved stop status when provider confirmation is unavailable.",
          "skills": [
            "Cancellation design",
            "Concurrency"
          ],
          "fieldMix": [
            {
              "field": "System design",
              "percentage": 50
            },
            {
              "field": "Distributed systems",
              "percentage": 30
            },
            {
              "field": "Storage systems",
              "percentage": 20
            }
          ],
          "patterns": []
        },
        {
          "id": "4f1d61c1-ad38-4817-9864-7c1c163ac668",
          "key": "AADMIT-106",
          "title": "Bound retries so failing reports cannot consume the entire service",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "ADVANCED",
          "estimateMinutes": 210,
          "phaseId": "control",
          "dependsOn": [
            "AADMIT-103",
            "AADMIT-104",
            "AADMIT-105"
          ],
          "scenario": "A malformed report fails immediately and retries faster than healthy reports can start.",
          "acceptanceCriteria": [
            "Define retry count, backoff and elapsed-time budgets.",
            "Classify permanent versus retryable failure explicitly.",
            "Keep retry work inside tenant and global admission limits."
          ],
          "implementationNotes": [
            "Use deterministic fake time and bounded jitter inputs."
          ],
          "verification": [
            "Retry a transient failure within the declared budget.",
            "Feed a permanent failure and verify it cannot form a tight retry loop."
          ],
          "deliverables": [
            "Retry-budget model and scheduling probe"
          ],
          "rollout": "Enable bounded retries for synthetic jobs; suspend a failing class if classification is uncertain.",
          "skills": [
            "Retry policy",
            "Resource budgets"
          ],
          "fieldMix": [
            {
              "field": "System design",
              "percentage": 50
            },
            {
              "field": "Site reliability",
              "percentage": 30
            },
            {
              "field": "Platform engineering",
              "percentage": 20
            }
          ],
          "patterns": []
        },
        {
          "id": "b9ec6557-fb1b-43af-b467-f6ab1c2f0db5",
          "key": "AADMIT-107",
          "title": "Choose where report artifacts become authoritative",
          "type": "STORY",
          "priority": "MEDIUM",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 180,
          "phaseId": "control",
          "dependsOn": [
            "AADMIT-104",
            "AADMIT-105"
          ],
          "scenario": "A worker uploads a partial file and the API exposes its object key before completion checks finish.",
          "acceptanceCriteria": [
            "Stage artifacts under a job generation.",
            "Publish only after verified storage identity and guarded completion.",
            "Keep incomplete or stale-generation artifacts inaccessible."
          ],
          "implementationNotes": [
            "Separate object upload from user-visible report publication."
          ],
          "verification": [
            "Publish a verified synthetic artifact for the active job.",
            "Complete an older generation and verify it cannot replace the visible result."
          ],
          "deliverables": [
            "Artifact publication boundary and contract probe"
          ],
          "rollout": "Prototype with local storage; keep staged objects private until finalization succeeds.",
          "skills": [
            "Storage lifecycle",
            "System boundaries"
          ],
          "fieldMix": [
            {
              "field": "Storage systems",
              "percentage": 50
            },
            {
              "field": "System design",
              "percentage": 30
            },
            {
              "field": "Security",
              "percentage": 20
            }
          ],
          "patterns": []
        },
        {
          "id": "b1c2d8ac-ee40-4ba1-88e8-77c6338b3ad0",
          "key": "AADMIT-108",
          "title": "Calculate burst drain time with fairness and retry reservations",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "EXPERT",
          "estimateMinutes": 300,
          "phaseId": "stress",
          "dependsOn": [
            "AADMIT-101",
            "AADMIT-103",
            "AADMIT-106"
          ],
          "scenario": "Operations wants a queue-age target, but the capacity spreadsheet assumes every slot is always available for first attempts.",
          "acceptanceCriteria": [
            "Model concurrency, service-time classes and reserved retry capacity.",
            "Calculate per-tenant wait under the selected fairness rule.",
            "Show when queue-age targets cannot be met."
          ],
          "implementationNotes": [
            "Use hypothetical durations and an executable deterministic simulation."
          ],
          "verification": [
            "Simulate the declared top-of-hour burst.",
            "Double expensive reports and report target violations without inventing a speedup."
          ],
          "deliverables": [
            "Queue simulation and capacity worksheet"
          ],
          "rollout": "Use the model to propose reviewed limits; validate assumptions with real isolated measurements before deployment.",
          "skills": [
            "Queueing analysis",
            "Capacity planning"
          ],
          "fieldMix": [
            {
              "field": "Performance engineering",
              "percentage": 60
            },
            {
              "field": "System design",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "be761ff0-1cd2-4c43-a5cc-5e27c504bcf4",
          "key": "AADMIT-109",
          "title": "Rehearse scheduler restart while reports are queued and running",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "ADVANCED",
          "estimateMinutes": 240,
          "phaseId": "stress",
          "dependsOn": [
            "AADMIT-104",
            "AADMIT-105",
            "AADMIT-107",
            "AADMIT-108"
          ],
          "scenario": "The scheduling process restarts during a burst, and the design must explain which work is resumed, reconciled or left uncertain.",
          "acceptanceCriteria": [
            "Recover queued ownership from durable identities.",
            "Reconcile running jobs through provider status before retry.",
            "Preserve accepted artifacts and terminal outcomes."
          ],
          "implementationNotes": [
            "Inject failures in a local state model and fake provider."
          ],
          "verification": [
            "Restart with queued and completed synthetic jobs and converge correctly.",
            "Restart with an unknown provider outcome and keep it unresolved instead of duplicating work."
          ],
          "deliverables": [
            "Restart drill and recovery trace"
          ],
          "rollout": "Run before accepting real schedules; pause admissions if recovery cannot establish work ownership.",
          "skills": [
            "Recovery protocols",
            "Fault injection"
          ],
          "fieldMix": [
            {
              "field": "System design",
              "percentage": 40
            },
            {
              "field": "Distributed systems",
              "percentage": 40
            },
            {
              "field": "Site reliability",
              "percentage": 20
            }
          ],
          "patterns": []
        },
        {
          "id": "c141387e-1daa-44c7-8448-1e940e3ede6c",
          "key": "AADMIT-110",
          "title": "Write the report-service operating contract for design approval",
          "type": "CHORE",
          "priority": "MEDIUM",
          "difficulty": "FOUNDATIONAL",
          "estimateMinutes": 90,
          "phaseId": "stress",
          "dependsOn": [
            "AADMIT-102",
            "AADMIT-108",
            "AADMIT-109"
          ],
          "scenario": "A launch checklist says scalable reporting without naming admission limits, cancellation guarantees or unavailable-provider behavior.",
          "acceptanceCriteria": [
            "Summarize admitted workload, fairness and bounded queue behavior.",
            "Link each guarantee to a model or probe.",
            "List deferred execution-provider and production-measurement work."
          ],
          "implementationNotes": [
            "Keep design approval separate from production readiness."
          ],
          "verification": [
            "Trace a queue-age target to its simulation assumptions.",
            "Trace provider unavailability to a documented pending or rejected outcome."
          ],
          "deliverables": [
            "Operating contract and architecture review notes"
          ],
          "rollout": "Review before infrastructure commitment; update limits when measurement evidence replaces assumptions.",
          "skills": [
            "Operational design",
            "Technical communication"
          ],
          "fieldMix": [
            {
              "field": "System design",
              "percentage": 70
            },
            {
              "field": "Site reliability",
              "percentage": 30
            }
          ],
          "patterns": []
        }
      ]
    }
  ]
}
