{
  "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": "3ca4922d-a6d3-4d7b-880d-85ebffbd7f85",
      "key": "ABATCH",
      "title": "Aggregate parallel risk checks without losing partial outcomes",
      "field": "Distributed systems",
      "summary": "Coordinate independent document checks into a bounded, reproducible aggregate result.",
      "context": "A fictional vendor portal runs format, policy and duplicate checks in parallel. A slow checker blocks completion, while duplicate callbacks can produce contradictory final summaries.",
      "stack": [
        "TypeScript",
        "PostgreSQL",
        "Provider interfaces"
      ],
      "prerequisites": [
        "Create synthetic document identities and three fake check providers.",
        "No real risk scoring, hiring decisions or candidate execution is included."
      ],
      "developerValue": "Practice fan-out/fan-in, deadline policies and immutable aggregation.",
      "companyValue": "Review trustworthy partial-result handling and controllable parallel work.",
      "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": "contract",
          "title": "Define independent check facts",
          "goal": "Specify input identity, required checks and result states."
        },
        {
          "id": "aggregate",
          "title": "Coordinate parallel outcomes",
          "goal": "Dispatch, deduplicate and finalize with explicit deadlines."
        },
        {
          "id": "recover",
          "title": "Recover incomplete runs",
          "goal": "Replay work and explain aggregate provenance."
        }
      ],
      "tickets": [
        {
          "id": "f59d8645-6321-475b-8dc1-1425d0c1e432",
          "key": "ABATCH-101",
          "title": "Freeze the required check set when a document review run starts",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "FOUNDATIONAL",
          "estimateMinutes": 90,
          "phaseId": "contract",
          "dependsOn": [],
          "scenario": "A configuration change adds a checker while a run is in progress, so the completion predicate changes halfway through.",
          "acceptanceCriteria": [
            "Record exact checker identities and versions per run.",
            "Bind the set to immutable document input identity.",
            "New configuration affects only new runs."
          ],
          "implementationNotes": [
            "Use three deterministic fake checks with no capability scoring."
          ],
          "verification": [
            "Start runs before and after a check-set change.",
            "Finish the older run using its original required set."
          ],
          "deliverables": [
            "Review-run manifest"
          ],
          "rollout": "Publish frozen manifests before parallel dispatch; retain prior checker versions for replay.",
          "skills": [
            "Immutability",
            "Workflow contracts"
          ],
          "fieldMix": [
            {
              "field": "Distributed systems",
              "percentage": 60
            },
            {
              "field": "Backend",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "a4876a91-5370-4caf-971c-8a022482ef24",
          "key": "ABATCH-102",
          "title": "Define pass, fail, unavailable and not-applicable check outcomes",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 150,
          "phaseId": "contract",
          "dependsOn": [
            "ABATCH-101"
          ],
          "scenario": "A timed-out policy checker returns an empty findings list, which the aggregator interprets as passed.",
          "acceptanceCriteria": [
            "Use explicit outcome states with bounded structured details.",
            "Require justification for not-applicable under the declared contract.",
            "Keep unavailable distinct from an empty successful result."
          ],
          "implementationNotes": [
            "Reject unsupported fields and prohibit demographic or personality inferences."
          ],
          "verification": [
            "Accept a valid empty successful check.",
            "Timeout a checker and retain unavailable rather than pass."
          ],
          "deliverables": [
            "Check-result schema and semantic cases"
          ],
          "rollout": "Deploy result validation before aggregate updates; quarantine incompatible provider output.",
          "skills": [
            "Structured validation",
            "Uncertainty"
          ],
          "fieldMix": [
            {
              "field": "Distributed systems",
              "percentage": 60
            },
            {
              "field": "API design",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "857f056b-1cea-4504-9955-31fa5d39657b",
          "key": "ABATCH-103",
          "title": "Bound parallel check fan-out per organization and run",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "FOUNDATIONAL",
          "estimateMinutes": 90,
          "phaseId": "contract",
          "dependsOn": [
            "ABATCH-101",
            "ABATCH-102"
          ],
          "scenario": "One tenant submits many documents and the coordinator starts every check immediately, exhausting provider slots.",
          "acceptanceCriteria": [
            "Set explicit per-run and per-tenant in-flight limits.",
            "Persist queued attempts instead of dropping them.",
            "Return admission status separate from check completion."
          ],
          "implementationNotes": [
            "Use documented synthetic limits and a fake provider counter."
          ],
          "verification": [
            "Dispatch a permitted number of synthetic checks.",
            "Exceed the tenant limit and verify excess work remains queued without provider calls."
          ],
          "deliverables": [
            "Fan-out admission guard"
          ],
          "rollout": "Canary conservative limits; pause admission when provider capacity is unknown.",
          "skills": [
            "Concurrency budgets",
            "Admission control"
          ],
          "fieldMix": [
            {
              "field": "Distributed systems",
              "percentage": 50
            },
            {
              "field": "Performance engineering",
              "percentage": 30
            },
            {
              "field": "Platform engineering",
              "percentage": 20
            }
          ],
          "patterns": []
        },
        {
          "id": "097f7552-8b65-4d3e-9704-273063d6eb46",
          "key": "ABATCH-104",
          "title": "Dispatch each check through a durable deterministic attempt identity",
          "type": "STORY",
          "priority": "MEDIUM",
          "difficulty": "ADVANCED",
          "estimateMinutes": 240,
          "phaseId": "aggregate",
          "dependsOn": [
            "ABATCH-101",
            "ABATCH-103"
          ],
          "scenario": "The coordinator crashes after dispatching one checker and cannot tell which of the three still needs to start.",
          "acceptanceCriteria": [
            "Persist check-attempt identity and outbox dispatch per required checker.",
            "Keep dispatch retries bound to the same input and checker version.",
            "Reject contradictory reuse of an attempt identity."
          ],
          "implementationNotes": [
            "Call providers outside the database transaction."
          ],
          "verification": [
            "Crash after one dispatched check and resume remaining work.",
            "Replay an outbox fact and keep one logical provider attempt."
          ],
          "deliverables": [
            "Check dispatch transaction and crash probe"
          ],
          "rollout": "Prototype with fake providers; stop new runs if attempt identity cannot be persisted.",
          "skills": [
            "Outbox",
            "Idempotency"
          ],
          "fieldMix": [
            {
              "field": "Distributed systems",
              "percentage": 60
            },
            {
              "field": "Database engineering",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "62416955-f6e2-4604-95e7-cd775dee0e35",
          "key": "ABATCH-105",
          "title": "Deduplicate callbacks without accepting contradictory check results",
          "type": "TASK",
          "priority": "HIGH",
          "difficulty": "ADVANCED",
          "estimateMinutes": 210,
          "phaseId": "aggregate",
          "dependsOn": [
            "ABATCH-102",
            "ABATCH-104"
          ],
          "scenario": "A provider retries its callback and later sends a changed result for the same attempt ID.",
          "acceptanceCriteria": [
            "Identical callback retries resolve one recorded result.",
            "Different terminal content for the same attempt creates a conflict.",
            "Validate run, input and checker identities before recording."
          ],
          "implementationNotes": [
            "Use canonical result hashes and authenticated fixture callbacks."
          ],
          "verification": [
            "Deliver the same terminal callback twice.",
            "Alter a terminal result or input hash and keep the accepted result plus a visible conflict."
          ],
          "deliverables": [
            "Callback ingestion guard"
          ],
          "rollout": "Canary callback handling; quarantine contradictory provider output without rewriting terminal facts.",
          "skills": [
            "Deduplication",
            "Integrity"
          ],
          "fieldMix": [
            {
              "field": "Distributed systems",
              "percentage": 60
            },
            {
              "field": "Integrations",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "3cc493da-b992-4048-b617-2c9aa3b66538",
          "key": "ABATCH-106",
          "title": "Finalize aggregates only from the frozen required check set",
          "type": "TASK",
          "priority": "HIGH",
          "difficulty": "EXPERT",
          "estimateMinutes": 300,
          "phaseId": "aggregate",
          "dependsOn": [
            "ABATCH-101",
            "ABATCH-102",
            "ABATCH-105"
          ],
          "scenario": "An optional checker finishes quickly and accidentally satisfies a counter-based completion condition while a required checker is missing.",
          "acceptanceCriteria": [
            "Evaluate completeness by exact required identities.",
            "Compute aggregate state from validated immutable check facts.",
            "Reject finalization when required results are missing or conflicting."
          ],
          "implementationNotes": [
            "Define aggregate output as review status, never an opaque hire/reject score."
          ],
          "verification": [
            "Finish all required checks and produce the expected status.",
            "Complete extra optional checks while omitting one required check and block completion."
          ],
          "deliverables": [
            "Aggregate reducer and completeness tests"
          ],
          "rollout": "Enable guarded finalization before publishing results; retain pending state on missing authority.",
          "skills": [
            "Aggregation",
            "Set invariants"
          ],
          "fieldMix": [
            {
              "field": "Distributed systems",
              "percentage": 60
            },
            {
              "field": "Backend",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "bc74ab32-c7a1-4bf4-ae2a-eef6c6c91bb1",
          "key": "ABATCH-107",
          "title": "Apply a run deadline without rewriting late check facts",
          "type": "STORY",
          "priority": "MEDIUM",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 180,
          "phaseId": "aggregate",
          "dependsOn": [
            "ABATCH-102",
            "ABATCH-106"
          ],
          "scenario": "A slow checker returns after the review deadline and overwrites a summary already shown to the user.",
          "acceptanceCriteria": [
            "Define a deadline terminal state with explicit incomplete checks.",
            "Preserve late results as appended facts without mutating the frozen summary.",
            "Allow a new run or reviewed amendment under an explicit policy."
          ],
          "implementationNotes": [
            "Use an injected clock and exact boundary cases."
          ],
          "verification": [
            "Complete required checks before deadline.",
            "Return one check after deadline and retain the original summary plus late-result visibility."
          ],
          "deliverables": [
            "Deadline finalization and late-result cases"
          ],
          "rollout": "Canary synthetic short deadlines; create new runs when a policy change requires reevaluation.",
          "skills": [
            "Temporal workflows",
            "Append-only results"
          ],
          "fieldMix": [
            {
              "field": "Distributed systems",
              "percentage": 60
            },
            {
              "field": "Backend",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "d0fa630d-ba3f-430d-8f49-47d7310f2fca",
          "key": "ABATCH-108",
          "title": "Recover outstanding checks by querying provider attempt identity",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "EXPERT",
          "estimateMinutes": 300,
          "phaseId": "recover",
          "dependsOn": [
            "ABATCH-104",
            "ABATCH-105",
            "ABATCH-107"
          ],
          "scenario": "After a restart, several attempts are marked dispatched but have no callback; immediate resubmission may duplicate costly work.",
          "acceptanceCriteria": [
            "Reconcile each unresolved attempt through its provider identity.",
            "Redispatch only under the adapter's declared idempotency contract.",
            "Keep unknown provider state visible and bounded."
          ],
          "implementationNotes": [
            "Use fake providers that model lost callbacks and unavailable lookup."
          ],
          "verification": [
            "Recover a completed check whose callback was lost.",
            "Make provider lookup unavailable and verify no unsupported success or duplicate attempt."
          ],
          "deliverables": [
            "Outstanding-attempt reconciler"
          ],
          "rollout": "Start recovery with bounded batches; suspend affected adapters when identity guarantees fail.",
          "skills": [
            "Reconciliation",
            "Distributed failure"
          ],
          "fieldMix": [
            {
              "field": "Distributed systems",
              "percentage": 60
            },
            {
              "field": "Integrations",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "3b6351c0-e4f7-4c2b-9259-9fdfc004e827",
          "key": "ABATCH-109",
          "title": "Produce a result provenance view that names missing and conflicting checks",
          "type": "STORY",
          "priority": "MEDIUM",
          "difficulty": "FOUNDATIONAL",
          "estimateMinutes": 90,
          "phaseId": "recover",
          "dependsOn": [
            "ABATCH-105",
            "ABATCH-106",
            "ABATCH-107",
            "ABATCH-108"
          ],
          "scenario": "Users receive only a summary label and cannot inspect whether every required checker actually ran.",
          "acceptanceCriteria": [
            "List frozen checker versions and input identity.",
            "Show outcome, unavailable and conflict states separately.",
            "Keep internal prompts, secrets and raw provider traces out of the view."
          ],
          "implementationNotes": [
            "Use public practice facts only; this is not noCV assessment evidence."
          ],
          "verification": [
            "Inspect a complete synthetic aggregate.",
            "Inspect a deadline result and clearly identify the missing checker."
          ],
          "deliverables": [
            "Safe provenance projection"
          ],
          "rollout": "Publish read-only provenance with aggregate status; hide fields that fail schema review.",
          "skills": [
            "Provenance",
            "Transparency"
          ],
          "fieldMix": [
            {
              "field": "Distributed systems",
              "percentage": 40
            },
            {
              "field": "API design",
              "percentage": 30
            },
            {
              "field": "Privacy engineering",
              "percentage": 30
            }
          ],
          "patterns": []
        },
        {
          "id": "f338a38a-afb2-4ec7-ae22-c806b4968617",
          "key": "ABATCH-110",
          "title": "Exercise the parallel-check coordinator under reordered failures",
          "type": "CHORE",
          "priority": "MEDIUM",
          "difficulty": "ADVANCED",
          "estimateMinutes": 240,
          "phaseId": "recover",
          "dependsOn": [
            "ABATCH-105",
            "ABATCH-106",
            "ABATCH-107",
            "ABATCH-108",
            "ABATCH-109"
          ],
          "scenario": "Happy-path tests always complete checks in the same order and miss a race between deadline finalization and the last callback.",
          "acceptanceCriteria": [
            "Run permutations of declared completion, timeout and conflict events.",
            "Assert one immutable summary and complete retained check history.",
            "Record any unsupported adapter guarantee as a failing readiness condition."
          ],
          "implementationNotes": [
            "Use a deterministic event scheduler; no arbitrary sleeps."
          ],
          "verification": [
            "Run all required checks in several completion orders with equal final semantics.",
            "Race final callback with deadline and verify the declared single outcome."
          ],
          "deliverables": [
            "Deterministic coordinator fault harness"
          ],
          "rollout": "Require the harness before adapter changes; retain the prior coordinator version if invariants fail.",
          "skills": [
            "Concurrency testing",
            "Fault injection"
          ],
          "fieldMix": [
            {
              "field": "Quality engineering",
              "percentage": 50
            },
            {
              "field": "Distributed systems",
              "percentage": 50
            }
          ],
          "patterns": []
        }
      ]
    }
  ]
}
