{
  "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": "628e43ab-fe14-4972-af76-e17a61493695",
      "key": "CCAL",
      "title": "An accessible staffing calendar",
      "field": "Accessibility",
      "summary": "Make scheduling interactions operable with keyboard, magnification and assistive technology.",
      "context": "Fictional studio Loom assigns editorial shifts. Build synthetic shifts and a local scheduling adapter; no real staff records are used.",
      "stack": [
        "React",
        "TypeScript",
        "CSS Modules",
        "Playwright"
      ],
      "prerequisites": [
        "Create synthetic shifts including overlaps and daylight-saving boundaries.",
        "Implement a local schedule revision adapter."
      ],
      "developerValue": "Practice focus models and accessible alternatives for spatial interfaces.",
      "companyValue": "Inspect whether scheduling remains usable across input methods and failure states.",
      "delivery": "Record automated checks and a manual protocol; do not claim accessibility certification.",
      "phases": [
        {
          "id": "reading",
          "title": "Read the schedule",
          "goal": "Provide meaningful structure and labels."
        },
        {
          "id": "editing",
          "title": "Operate shifts",
          "goal": "Support alternatives and stable focus."
        },
        {
          "id": "review",
          "title": "Verify adaptive use",
          "goal": "Handle zoom, motion and assistive feedback."
        }
      ],
      "tickets": [
        {
          "id": "b4ac3526-4e47-4fdb-a7e4-51710ec81c1e",
          "key": "CCAL-101",
          "title": "Name staffing shifts independently of calendar color",
          "type": "BUG",
          "priority": "HIGH",
          "difficulty": "FOUNDATIONAL",
          "estimateMinutes": 60,
          "phaseId": "reading",
          "dependsOn": [],
          "scenario": "Shift type is conveyed only by blue or green blocks. Add visible labels and complete accessible names.",
          "acceptanceCriteria": [
            "Type appears as text",
            "Names include date and duration",
            "Color remains optional reinforcement"
          ],
          "implementationNotes": [
            "Do not concatenate decorative icon names."
          ],
          "verification": [
            "Inspect two shift types",
            "Disable color and distinguish them"
          ],
          "deliverables": [
            "Shift label component and checks"
          ],
          "rollout": "Restore text-only blocks if labels become ambiguous.",
          "skills": [
            "Semantics",
            "Accessible names"
          ],
          "fieldMix": [
            {
              "field": "Accessibility",
              "percentage": 80
            },
            {
              "field": "Frontend",
              "percentage": 20
            }
          ],
          "patterns": []
        },
        {
          "id": "ad818a2e-4906-4a2e-a1aa-df37445a6808",
          "key": "CCAL-102",
          "title": "Provide a chronological agenda beside the staffing grid",
          "type": "STORY",
          "priority": "MEDIUM",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 120,
          "phaseId": "reading",
          "dependsOn": [
            "CCAL-101"
          ],
          "scenario": "Screen-reader users must traverse many empty calendar cells to find shifts. Offer an equivalent agenda view.",
          "acceptanceCriteria": [
            "Agenda lists all visible shifts",
            "Dates are headings",
            "View switch retains selected date"
          ],
          "implementationNotes": [
            "Both views use one data projection."
          ],
          "verification": [
            "Compare grid and agenda identities",
            "Render an empty week"
          ],
          "deliverables": [
            "Agenda view and equivalence checks"
          ],
          "rollout": "Keep agenda available if grid navigation is withdrawn.",
          "skills": [
            "Information architecture",
            "Accessibility"
          ],
          "fieldMix": [
            {
              "field": "Accessibility",
              "percentage": 70
            },
            {
              "field": "Frontend",
              "percentage": 30
            }
          ],
          "patterns": []
        },
        {
          "id": "0f8e3896-3137-436f-947f-7dcb03af8f98",
          "key": "CCAL-103",
          "title": "Describe staffing time-zone changes explicitly",
          "type": "TASK",
          "priority": "MEDIUM",
          "difficulty": "FOUNDATIONAL",
          "estimateMinutes": 75,
          "phaseId": "reading",
          "dependsOn": [
            "CCAL-101"
          ],
          "scenario": "The calendar silently changes times when the display zone changes. Show zone context without announcing every cell.",
          "acceptanceCriteria": [
            "Header identifies display zone",
            "Shift detail exposes full date/time",
            "Zone change has one status announcement"
          ],
          "implementationNotes": [
            "Store instants independently from labels."
          ],
          "verification": [
            "Change zone and inspect detail",
            "Use ambiguous clock time fixture"
          ],
          "deliverables": [
            "Zone labels and manual reading protocol"
          ],
          "rollout": "Fix display to documented UTC if conversion fails.",
          "skills": [
            "Time",
            "Live regions"
          ],
          "fieldMix": [
            {
              "field": "Accessibility",
              "percentage": 70
            },
            {
              "field": "Frontend",
              "percentage": 30
            }
          ],
          "patterns": []
        },
        {
          "id": "6b6aa958-5a50-439e-8524-2655136de1e0",
          "key": "CCAL-104",
          "title": "Move staffing shifts through a keyboard form",
          "type": "STORY",
          "priority": "HIGH",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 150,
          "phaseId": "editing",
          "dependsOn": [
            "CCAL-102",
            "CCAL-103"
          ],
          "scenario": "Dragging is the only way to move a shift. Add date/time controls with equivalent validation.",
          "acceptanceCriteria": [
            "Every draggable shift has Move action",
            "Form and drag share validation",
            "Cancel preserves the shift"
          ],
          "implementationNotes": [
            "The form must not require pointer gestures."
          ],
          "verification": [
            "Move using keyboard",
            "Submit overlapping invalid shift"
          ],
          "deliverables": [
            "Move form and equivalence cases"
          ],
          "rollout": "Disable dragging if it diverges from the form contract.",
          "skills": [
            "Keyboard",
            "Forms"
          ],
          "fieldMix": [
            {
              "field": "Accessibility",
              "percentage": 60
            },
            {
              "field": "Frontend",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "43ef9cfd-783b-4937-8469-9aaab5dc73c9",
          "key": "CCAL-105",
          "title": "Restore staffing focus after a shift is deleted",
          "type": "BUG",
          "priority": "HIGH",
          "difficulty": "ADVANCED",
          "estimateMinutes": 165,
          "phaseId": "editing",
          "dependsOn": [
            "CCAL-104"
          ],
          "scenario": "Deleting a selected block sends focus to the document body. Choose a predictable surviving target.",
          "acceptanceCriteria": [
            "Next chronological shift receives focus",
            "Empty day focuses its heading control",
            "Failed deletion retains original focus"
          ],
          "implementationNotes": [
            "Resolve targets after committed DOM updates."
          ],
          "verification": [
            "Delete middle shift",
            "Reject deletion and inspect focus"
          ],
          "deliverables": [
            "Focus resolver and deletion checks"
          ],
          "rollout": "Keep deleted-row placeholder temporarily if focus restoration fails.",
          "skills": [
            "Focus management",
            "Async UI"
          ],
          "fieldMix": [
            {
              "field": "Accessibility",
              "percentage": 70
            },
            {
              "field": "Frontend",
              "percentage": 30
            }
          ],
          "patterns": []
        },
        {
          "id": "d77ad343-de27-4799-bd8d-f441ce4c84aa",
          "key": "CCAL-106",
          "title": "Announce staffing conflicts without repeating the entire calendar",
          "type": "BUG",
          "priority": "MEDIUM",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 120,
          "phaseId": "editing",
          "dependsOn": [
            "CCAL-104"
          ],
          "scenario": "A revision conflict rerenders the grid and reads dozens of cells. Isolate a concise conflict message and resolution controls.",
          "acceptanceCriteria": [
            "Conflict identifies affected shift",
            "Draft remains available",
            "Calendar content is not a live region"
          ],
          "implementationNotes": [
            "Announcements must not reveal unrelated staff data."
          ],
          "verification": [
            "Trigger one conflict",
            "Retry failure and check announcement count"
          ],
          "deliverables": [
            "Conflict status region"
          ],
          "rollout": "Disable auto-refresh announcements if they repeat.",
          "skills": [
            "Live regions",
            "Error handling"
          ],
          "fieldMix": [
            {
              "field": "Accessibility",
              "percentage": 60
            },
            {
              "field": "Frontend",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "61498424-8b97-4400-b6da-2b4f4017da3a",
          "key": "CCAL-107",
          "title": "Support calendar navigation across removed and disabled shifts",
          "type": "TASK",
          "priority": "HIGH",
          "difficulty": "EXPERT",
          "estimateMinutes": 240,
          "phaseId": "editing",
          "dependsOn": [
            "CCAL-105",
            "CCAL-106"
          ],
          "scenario": "Roving focus points at a disabled shift after refresh. Define deterministic navigation across changing eligible targets.",
          "acceptanceCriteria": [
            "Only one navigation tab stop exists",
            "Disabled targets are skipped",
            "Removed focus resolves predictably"
          ],
          "implementationNotes": [
            "Document arrow-key behavior without overriding text inputs."
          ],
          "verification": [
            "Navigate mixed availability",
            "Remove current target during refresh"
          ],
          "deliverables": [
            "Navigation model and transition cases"
          ],
          "rollout": "Switch to ordinary tab stops while repairing the model.",
          "skills": [
            "Keyboard",
            "State machines"
          ],
          "fieldMix": [
            {
              "field": "Accessibility",
              "percentage": 70
            },
            {
              "field": "Frontend",
              "percentage": 30
            }
          ],
          "patterns": []
        },
        {
          "id": "49af2492-d237-49ea-96c6-89321122a5d4",
          "key": "CCAL-108",
          "title": "Reflow staffing controls at high text zoom",
          "type": "BUG",
          "priority": "MEDIUM",
          "difficulty": "INTERMEDIATE",
          "estimateMinutes": 120,
          "phaseId": "review",
          "dependsOn": [
            "CCAL-102",
            "CCAL-107"
          ],
          "scenario": "At 200 percent text size the week selector hides Add shift. Reflow controls while keeping date context.",
          "acceptanceCriteria": [
            "Controls wrap without clipping",
            "Agenda avoids horizontal document overflow",
            "Focus remains visible"
          ],
          "implementationNotes": [
            "Horizontal grid scrolling may remain within a labeled region."
          ],
          "verification": [
            "Check enlarged text in agenda",
            "Check long synthetic shift labels"
          ],
          "deliverables": [
            "CSS changes and viewport evidence"
          ],
          "rollout": "Prefer agenda on constrained layouts if grid controls fail.",
          "skills": [
            "Responsive design",
            "CSS"
          ],
          "fieldMix": [
            {
              "field": "Accessibility",
              "percentage": 60
            },
            {
              "field": "Frontend",
              "percentage": 40
            }
          ],
          "patterns": []
        },
        {
          "id": "d8b5212f-a49a-4886-aeb9-5c9b6a522778",
          "key": "CCAL-109",
          "title": "Remove nonessential motion from staffing date transitions",
          "type": "CHORE",
          "priority": "LOW",
          "difficulty": "FOUNDATIONAL",
          "estimateMinutes": 60,
          "phaseId": "review",
          "dependsOn": [
            "CCAL-103"
          ],
          "scenario": "Animated week slides make date navigation uncomfortable for some users. Respect reduced motion while preserving orientation.",
          "acceptanceCriteria": [
            "Reduced motion skips sliding",
            "Date heading still updates",
            "Focus and selection remain stable"
          ],
          "implementationNotes": [
            "Do not use animation completion as business logic."
          ],
          "verification": [
            "Toggle reduced-motion preference",
            "Navigate rapidly during transition"
          ],
          "deliverables": [
            "Motion styles and interaction case"
          ],
          "rollout": "Disable transitions globally if state depends on them.",
          "skills": [
            "Reduced motion",
            "CSS"
          ],
          "fieldMix": [
            {
              "field": "Accessibility",
              "percentage": 70
            },
            {
              "field": "Frontend",
              "percentage": 30
            }
          ],
          "patterns": []
        },
        {
          "id": "447e7e78-9f3d-4bcb-ae97-030dfe52c4b0",
          "key": "CCAL-110",
          "title": "Audit staffing calendar semantics in a reproducible manual walkthrough",
          "type": "CHORE",
          "priority": "MEDIUM",
          "difficulty": "ADVANCED",
          "estimateMinutes": 180,
          "phaseId": "review",
          "dependsOn": [
            "CCAL-107",
            "CCAL-108",
            "CCAL-109"
          ],
          "scenario": "Automated checks pass but the team lacks a repeatable reading and editing protocol. Write and execute a bounded walkthrough.",
          "acceptanceCriteria": [
            "Protocol covers agenda and grid",
            "Keyboard outcomes are recorded",
            "Failures include concrete reproduction steps"
          ],
          "implementationNotes": [
            "Report tested browser and assistive tool versions, not certification."
          ],
          "verification": [
            "Complete one shift move",
            "Exercise conflict and empty-week paths"
          ],
          "deliverables": [
            "Manual audit record with unresolved findings"
          ],
          "rollout": "Reopen failed behaviors before widening the calendar pilot.",
          "skills": [
            "Accessibility testing",
            "Documentation"
          ],
          "fieldMix": [
            {
              "field": "Accessibility",
              "percentage": 60
            },
            {
              "field": "Quality engineering",
              "percentage": 40
            }
          ],
          "patterns": []
        }
      ]
    }
  ]
}
