{
  "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": "fc961195-1ba7-4119-b205-e6722681c911",
      "key": "CCONFIG",
      "title": "Versioned edge configuration with an offline gateway",
      "field": "Embedded and edge",
      "summary": "Deliver and acknowledge bounded synthetic configuration changes through a local gateway emulator.",
      "context": "Fictional information-display gateways receive brightness schedules and cache limits. These settings affect only a software display emulator; no real devices, safety controls or customer data are used.",
      "stack": [
        "TypeScript",
        "Gateway emulator",
        "SQLite adapter",
        "Vitest"
      ],
      "prerequisites": [
        "Define synthetic configuration schema and supported device capabilities.",
        "Implement local control-plane and gateway adapters with delayed messages."
      ],
      "developerValue": "Practice desired/reported state, compatibility and rollback.",
      "companyValue": "Inspect whether remote configuration preserves working settings through offline and partial outcomes.",
      "delivery": "Deliver local simulation changes; hardware validation and external fleet deployment are excluded.",
      "phases": [
        {
          "id": "schema",
          "title": "Specify configuration contracts",
          "goal": "Validate and scope desired settings."
        },
        {
          "id": "apply",
          "title": "Apply settings deliberately",
          "goal": "Handle revisions and partial failures."
        },
        {
          "id": "reconcile",
          "title": "Recover gateway state",
          "goal": "Explain offline drift and bound retries."
        }
      ],
      "tickets": [
        {
          "id": "dc211255-33b3-4696-a153-49d500f51bd6",
          "key": "CCONFIG-101",
          "title": "Validate emulated display brightness and cache-limit settings",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "FOUNDATIONAL",
          "estimateMinutes": 75,
          "phaseId": "schema",
          "dependsOn": [],
          "scenario": "The gateway accepts negative cache capacity and brightness above the declared range. Add a bounded schema.",
          "acceptanceCriteria": [
            "Supported ranges pass",
            "Unknown fields reject",
            "Invalid settings do not alter active state"
          ],
          "implementationNotes": [
            "Schema limits are emulator contracts, not hardware ratings."
          ],
          "verification": [
            "Apply valid fixture values",
            "Reject negative and oversized settings"
          ],
          "deliverables": [
            "Configuration schema and cases"
          ],
          "rollout": "Reject incoming updates if schema validation fails.",
          "skills": [
            "Validation",
            "Configuration"
          ],
          "fieldMix": [
            {
              "field": "Embedded and edge",
              "percentage": 80
            },
            {
              "field": "API design",
              "percentage": 20
            }
          ],
          "patterns": []
        },
        {
          "id": "ce445f01-07d2-45a2-935f-600b848d2c3c",
          "key": "CCONFIG-102",
          "title": "Keep desired and reported edge configuration separate",
          "type": "BUG",
          "priority": "MEDIUM",
          "difficulty": "FOUNDATIONAL",
          "estimateMinutes": 75,
          "phaseId": "schema",
          "dependsOn": [
            "CCONFIG-101"
          ],
          "scenario": "Sending a setting immediately changes the dashboard to Applied before the gateway responds. Store separate desired and reported revisions.",
          "acceptanceCriteria": [
            "Sending changes desired state",
            "Acknowledgement changes reported state",
            "Mismatch appears as pending drift"
          ],
          "implementationNotes": [
            "Delivery is not application acknowledgement."
          ],
          "verification": [
            "Send then acknowledge",
            "Drop delivery and inspect drift"
          ],
          "deliverables": [
            "State model and projection cases"
          ],
          "rollout": "Stop displaying Applied when acknowledgement is absent.",
          "skills": [
            "State modeling",
            "Observability"
          ],
          "fieldMix": [
            {
              "field": "Embedded and edge",
              "percentage": 50
            },
            {
              "field": "Distributed systems",
              "percentage": 30
            },
            {
              "field": "Frontend",
              "percentage": 20
            }
          ],
          "patterns": []
        },
        {
          "id": "0996f722-ed58-4687-9dda-dacdb6027fdf",
          "key": "CCONFIG-103",
          "title": "Scope emulated gateway configuration reads by organization",
          "type": "TASK",
          "priority": "HIGH",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 120,
          "phaseId": "schema",
          "dependsOn": [
            "CCONFIG-101",
            "CCONFIG-102"
          ],
          "scenario": "A guessed gateway ID exposes another organization's desired settings. Enforce tenant scope at repository lookup.",
          "acceptanceCriteria": [
            "Owner reads permitted gateway",
            "Foreign lookup is denied",
            "Denied response omits settings"
          ],
          "implementationNotes": [
            "Synthetic gateway IDs never establish authority alone."
          ],
          "verification": [
            "Read own fixture",
            "Read foreign gateway by known ID"
          ],
          "deliverables": [
            "Scoped repository and denial cases"
          ],
          "rollout": "Disable configuration reads when ownership cannot be verified.",
          "skills": [
            "Authorization",
            "Tenancy"
          ],
          "fieldMix": [
            {
              "field": "Security",
              "percentage": 70
            },
            {
              "field": "Embedded and edge",
              "percentage": 30
            }
          ],
          "patterns": []
        },
        {
          "id": "c8b0ec59-db0c-4020-9f1c-38557fcd0a9f",
          "key": "CCONFIG-104",
          "title": "Reject stale configuration revisions arriving at the edge gateway",
          "type": "BUG",
          "priority": "HIGH",
          "difficulty": "ADVANCED",
          "estimateMinutes": 165,
          "phaseId": "apply",
          "dependsOn": [
            "CCONFIG-102",
            "CCONFIG-103"
          ],
          "scenario": "Delayed delivery overwrites a newer brightness schedule. Compare monotonic desired revisions before applying.",
          "acceptanceCriteria": [
            "Newer revision may apply",
            "Older revision is rejected",
            "Equal matching revision replays safely"
          ],
          "implementationNotes": [
            "Reused revision with different payload is a conflict."
          ],
          "verification": [
            "Deliver increasing revisions",
            "Deliver old or conflicting revision"
          ],
          "deliverables": [
            "Revision guard and ordering cases"
          ],
          "rollout": "Request a fresh authoritative snapshot on conflict.",
          "skills": [
            "Ordering",
            "Idempotency"
          ],
          "fieldMix": [
            {
              "field": "Distributed systems",
              "percentage": 60
            },
            {
              "field": "Embedded and edge",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "ebf7ed24-0496-4538-b4c8-3e18c6f2f134",
          "key": "CCONFIG-105",
          "title": "Stage edge settings before committing a complete configuration",
          "type": "TASK",
          "priority": "HIGH",
          "difficulty": "ADVANCED",
          "estimateMinutes": 180,
          "phaseId": "apply",
          "dependsOn": [
            "CCONFIG-101",
            "CCONFIG-104"
          ],
          "scenario": "Applying brightness succeeds while cache settings fail, leaving an undocumented mixed state. Validate and stage the complete supported configuration.",
          "acceptanceCriteria": [
            "All fields validate before mutation",
            "Commit selects one complete revision",
            "Failure retains prior active revision"
          ],
          "implementationNotes": [
            "This ticket assumes reversible emulator setters; document that boundary."
          ],
          "verification": [
            "Apply valid full revision",
            "Inject failure during staging"
          ],
          "deliverables": [
            "Staged apply protocol and failure cases"
          ],
          "rollout": "Restore previous configuration if staging cannot remain isolated.",
          "skills": [
            "Transactions",
            "State transitions"
          ],
          "fieldMix": [
            {
              "field": "Embedded and edge",
              "percentage": 60
            },
            {
              "field": "Storage systems",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "2fc22cf1-6f8b-4aa3-9b5d-4d57434afc6c",
          "key": "CCONFIG-106",
          "title": "Reject edge settings unsupported by the declared gateway capability version",
          "type": "STORY",
          "priority": "MEDIUM",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 135,
          "phaseId": "apply",
          "dependsOn": [
            "CCONFIG-104",
            "CCONFIG-105"
          ],
          "scenario": "Older gateway emulators silently ignore new settings while reporting success. Check capability compatibility explicitly.",
          "acceptanceCriteria": [
            "Supported configuration applies",
            "Unsupported fields report incompatibility",
            "Reported revision does not advance on rejection"
          ],
          "implementationNotes": [
            "Do not infer capability from device display names."
          ],
          "verification": [
            "Apply to compatible fixture",
            "Apply new field to older capability"
          ],
          "deliverables": [
            "Compatibility check and cases"
          ],
          "rollout": "Keep existing revision on unsupported gateways.",
          "skills": [
            "Compatibility",
            "Versioning"
          ],
          "fieldMix": [
            {
              "field": "Embedded and edge",
              "percentage": 70
            },
            {
              "field": "API design",
              "percentage": 30
            }
          ],
          "patterns": []
        },
        {
          "id": "ca23fbd7-56da-4fa4-9cb4-d75ecf2ac255",
          "key": "CCONFIG-107",
          "title": "Persist edge-configuration acknowledgement after active settings commit",
          "type": "BUG",
          "priority": "HIGH",
          "difficulty": "EXPERT",
          "estimateMinutes": 240,
          "phaseId": "apply",
          "dependsOn": [
            "CCONFIG-105",
            "CCONFIG-106"
          ],
          "scenario": "A crash after applying settings but before reporting leaves the control plane uncertain and repeated applies inconsistent. Reconcile local active revision on restart.",
          "acceptanceCriteria": [
            "Active revision persists with settings",
            "Restart can replay acknowledgement",
            "Uncommitted settings cannot be reported applied"
          ],
          "implementationNotes": [
            "Define commit ordering in the local adapter."
          ],
          "verification": [
            "Crash after settings commit",
            "Crash before commit"
          ],
          "deliverables": [
            "Apply journal and restart cases"
          ],
          "rollout": "Pause new applies until active-state reconciliation completes.",
          "skills": [
            "Crash recovery",
            "Durability"
          ],
          "fieldMix": [
            {
              "field": "Embedded and edge",
              "percentage": 40
            },
            {
              "field": "Storage systems",
              "percentage": 30
            },
            {
              "field": "Distributed systems",
              "percentage": 30
            }
          ],
          "patterns": []
        },
        {
          "id": "991ce377-7274-4bf4-ac0b-2de42fcaded8",
          "key": "CCONFIG-108",
          "title": "Coalesce offline edge configuration deliveries to the latest eligible revision",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "ADVANCED",
          "estimateMinutes": 180,
          "phaseId": "reconcile",
          "dependsOn": [
            "CCONFIG-104",
            "CCONFIG-107"
          ],
          "scenario": "A gateway reconnects to hundreds of obsolete brightness changes. Deliver the latest complete eligible snapshot deliberately.",
          "acceptanceCriteria": [
            "Obsolete pending revisions are superseded",
            "Latest revision remains auditable",
            "Required transition constraints are checked"
          ],
          "implementationNotes": [
            "Coalescing is permitted only for this replaceable configuration contract."
          ],
          "verification": [
            "Reconnect after several revisions",
            "Include incompatible latest revision"
          ],
          "deliverables": [
            "Offline delivery planner and cases"
          ],
          "rollout": "Send an explicit full snapshot if coalescing cannot prove eligibility.",
          "skills": [
            "Reconciliation",
            "Queue design"
          ],
          "fieldMix": [
            {
              "field": "Distributed systems",
              "percentage": 60
            },
            {
              "field": "Embedded and edge",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "ab2219a4-7d12-4ef8-b433-1e17bf62300f",
          "key": "CCONFIG-109",
          "title": "Expose edge-configuration rollback as a new desired revision",
          "type": "STORY",
          "priority": "MEDIUM",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 120,
          "phaseId": "reconcile",
          "dependsOn": [
            "CCONFIG-106",
            "CCONFIG-108"
          ],
          "scenario": "Operators lower the revision number to restore older values and gateways reject it as stale. Create a new revision carrying the prior values.",
          "acceptanceCriteria": [
            "Rollback increments revision",
            "Prior values are copied explicitly",
            "Current capability validation still applies"
          ],
          "implementationNotes": [
            "Preserve original revision history."
          ],
          "verification": [
            "Roll back supported values",
            "Attempt rollback containing now-unsupported field"
          ],
          "deliverables": [
            "Rollback command and history cases"
          ],
          "rollout": "Retain current settings if rollback validation fails.",
          "skills": [
            "Versioning",
            "Recovery"
          ],
          "fieldMix": [
            {
              "field": "Embedded and edge",
              "percentage": 60
            },
            {
              "field": "Distributed systems",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "683cf607-bf31-439e-a0b3-85ec4d097e89",
          "key": "CCONFIG-110",
          "title": "Summarize edge-configuration drift without logging setting payloads",
          "type": "CHORE",
          "priority": "LOW",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 105,
          "phaseId": "reconcile",
          "dependsOn": [
            "CCONFIG-107",
            "CCONFIG-109"
          ],
          "scenario": "Drift diagnosis logs full configuration documents unnecessarily. Report revision gaps and typed rejection reasons.",
          "acceptanceCriteria": [
            "Summary shows desired and reported revisions",
            "Payload values are omitted",
            "Offline uncertainty is explicit"
          ],
          "implementationNotes": [
            "Use aggregate synthetic fleet observations only."
          ],
          "verification": [
            "Inspect converged gateway",
            "Inspect offline and incompatible gateways"
          ],
          "deliverables": [
            "Drift report and data-exclusion cases"
          ],
          "rollout": "Disable detailed diagnostics if configuration values leak.",
          "skills": [
            "Observability",
            "Data minimization"
          ],
          "fieldMix": [
            {
              "field": "Privacy engineering",
              "percentage": 40
            },
            {
              "field": "Embedded and edge",
              "percentage": 30
            },
            {
              "field": "Site reliability",
              "percentage": 30
            }
          ],
          "patterns": []
        }
      ]
    }
  ]
}
