Skip to content

Configuration

spectryn supports multiple configuration sources with clear precedence rules.

Configuration Precedence

Configuration is loaded in this order (highest priority first):

  1. CLI arguments - Command line flags override all other sources
  2. Environment variables - JIRA_URL, JIRA_EMAIL, JIRA_API_TOKEN
  3. .env file - In current directory or package directory
  4. Config files - .spectryn.yaml, .spectryn.toml, or pyproject.toml

Config File Locations

spectryn searches for config files in this order:

  1. Explicit path via --config flag
  2. Current working directory
  3. User home directory (~)

Config File Formats

Create .spectryn.yaml or .spectryn.yml:

yaml
# Jira connection settings (required)
jira:
  url: https://your-company.atlassian.net
  email: your-email@company.com
  api_token: your-api-token
  project: PROJ  # Optional: default project key
  story_points_field: customfield_10014  # Optional: custom field ID

# Sync settings (optional)
sync:
  verbose: false
  execute: false  # Set to true for live mode (default: dry-run)
  no_confirm: false  # Set to true to skip confirmation prompts
  descriptions: true
  subtasks: true
  comments: true
  statuses: true

# Default paths (optional)
markdown: ./epics/my-epic.md
epic: PROJ-123

TOML

Create .spectryn.toml:

toml
# Default paths
markdown = "./epics/my-epic.md"
epic = "PROJ-123"

# Jira connection settings
[jira]
url = "https://your-company.atlassian.net"
email = "your-email@company.com"
api_token = "your-api-token"
project = "PROJ"
story_points_field = "customfield_10014"

# Sync settings
[sync]
verbose = false
execute = false
no_confirm = false
descriptions = true
subtasks = true
comments = true
statuses = true

pyproject.toml

Add a [tool.spectryn] section to your project's pyproject.toml:

toml
[tool.spectryn]
epic = "PROJ-123"

[tool.spectryn.jira]
url = "https://your-company.atlassian.net"
email = "your-email@company.com"
api_token = "your-api-token"
project = "PROJ"

[tool.spectryn.sync]
verbose = true

Environment Variables

VariableDescription
JIRA_URLJira instance URL (e.g., https://company.atlassian.net)
JIRA_EMAILJira account email
JIRA_API_TOKENJira API token (generate here)
JIRA_PROJECTDefault project key
GITLAB_TOKENGitLab Personal Access Token
GITLAB_PROJECT_IDGitLab project ID (numeric or group/project path)
GITLAB_BASE_URLGitLab API base URL (default: https://gitlab.com/api/v4)
GITLAB_GROUP_IDGitLab group ID for epics (optional)
GITLAB_USE_SDKUse python-gitlab SDK (true/false)
MONDAY_API_TOKENMonday.com API token (v2)
MONDAY_BOARD_IDMonday.com board ID (numeric)
MONDAY_WORKSPACE_IDMonday.com workspace ID (optional)
MONDAY_API_URLMonday.com API endpoint (default: https://api.monday.com/v2)
MONDAY_STATUS_COLUMN_IDStatus column ID (optional, auto-detected)
MONDAY_PRIORITY_COLUMN_IDPriority column ID (optional, auto-detected)
MONDAY_STORY_POINTS_COLUMN_IDStory points column ID (optional, auto-detected)
TRELLO_API_KEYTrello API key (get here)
TRELLO_API_TOKENTrello API token (generate here)
TRELLO_BOARD_IDTrello board ID (alphanumeric, from board URL)
TRELLO_API_URLTrello API endpoint (default: https://api.trello.com/1)
TRELLO_SUBTASK_MODESubtask mode: checklist (default) or linked_card
SHORTCUT_API_TOKENShortcut API token (generate here)
SHORTCUT_WORKSPACE_IDShortcut workspace ID (UUID or slug)
SHORTCUT_API_URLShortcut API endpoint (default: https://api.app.shortcut.com/api/v3)
PLANE_API_TOKENPlane.so API token (generate here)
PLANE_WORKSPACE_SLUGPlane.so workspace slug (from URL)
PLANE_PROJECT_IDPlane.so project ID (UUID)
PLANE_API_URLPlane.so API endpoint (default: https://app.plane.so/api/v1)
CLICKUP_API_TOKENClickUp API token (generate here)
CLICKUP_SPACE_IDClickUp space ID (optional, for scoping operations)
CLICKUP_FOLDER_IDClickUp folder ID (optional, for scoping operations)
CLICKUP_LIST_IDClickUp list ID (optional, for scoping operations)
CLICKUP_API_URLClickUp API endpoint (default: https://api.clickup.com/api/v2)
BITBUCKET_USERNAMEBitbucket username
BITBUCKET_APP_PASSWORDApp Password (Cloud) or PAT (Server)
BITBUCKET_WORKSPACEWorkspace slug (Cloud) or project key (Server)
BITBUCKET_REPORepository slug
BITBUCKET_BASE_URLAPI base URL (default: https://api.bitbucket.org/2.0)
SPECTRA_VERBOSEEnable verbose output (true/false)

.env File

Create a .env file in your project root:

bash
# .env
JIRA_URL=https://your-company.atlassian.net
JIRA_EMAIL=your-email@company.com
JIRA_API_TOKEN=your-api-token
JIRA_PROJECT=PROJ

Security

Add .env to your .gitignore!

CLI Override Examples

bash
# Override Jira URL
spectryn --markdown epic.md --epic PROJ-123 --jira-url https://other.atlassian.net

# Specify config file
spectryn --markdown epic.md --epic PROJ-123 --config ~/configs/spectryn-prod.yaml

# Override project
spectryn --markdown epic.md --epic PROJ-123 --project OTHER

Security Best Practices

Security Recommendations

  1. Never commit secrets - Add .env and config files with tokens to .gitignore
  2. Use environment variables - For CI/CD, use environment variables instead of files
  3. Rotate tokens regularly - Regenerate API tokens periodically
  4. Limit token scope - Use tokens with minimal required permissions

Example .gitignore entries

bash
# spectryn config with secrets
.env
.spectryn.yaml
.spectryn.yml
.spectryn.toml

Configuration Reference

Jira Settings

SettingTypeDescription
jira.urlstringJira instance URL
jira.emailstringAccount email for authentication
jira.api_tokenstringAPI token
jira.projectstringDefault project key
jira.story_points_fieldstringCustom field ID for story points

GitLab Settings

SettingTypeDescription
gitlab.tokenstringGitLab Personal Access Token
gitlab.project_idstringProject ID (numeric or group/project path)
gitlab.base_urlstringGitLab API base URL (default: https://gitlab.com/api/v4)
gitlab.group_idstringGroup ID for epics (Premium/Ultimate, optional)
gitlab.use_epicsbooleanUse Epics instead of Milestones (default: false)
gitlab.use_sdkbooleanUse python-gitlab SDK (default: false)
gitlab.epic_labelstringLabel for epic issues (default: "epic")
gitlab.story_labelstringLabel for story issues (default: "story")
gitlab.subtask_labelstringLabel for subtask issues (default: "subtask")
gitlab.status_labelsdictStatus to label mapping (optional)

See GitLab Integration Guide for detailed configuration examples.

Monday.com Settings

SettingTypeDescription
monday.api_tokenstringMonday.com API token (v2)
monday.board_idstringBoard ID (numeric)
monday.workspace_idstringWorkspace ID (optional)
monday.api_urlstringAPI endpoint (default: https://api.monday.com/v2)
monday.status_column_idstringStatus column ID (auto-detected if not specified)
monday.priority_column_idstringPriority column ID (auto-detected if not specified)
monday.story_points_column_idstringStory points column ID (auto-detected if not specified)

See Monday.com Integration Guide for detailed configuration examples.

Shortcut Settings

SettingTypeDescription
shortcut.api_tokenstringShortcut API token (required)
shortcut.workspace_idstringShortcut workspace ID (UUID or slug, required)
shortcut.api_urlstringAPI endpoint (default: https://api.app.shortcut.com/api/v3)

See Shortcut Integration Guide for detailed configuration examples.

GitHub Settings

SettingTypeDescription
github.tokenstringGitHub Personal Access Token (required)
github.ownerstringRepository owner (user or org, required)
github.repostringRepository name (required)
github.base_urlstringAPI base URL (default: https://api.github.com)
github.project_numbernumberGitHub Projects v2 number (optional)
github.epic_labelstringLabel for epics (default: "epic")
github.story_labelstringLabel for stories (default: "user-story")
github.priority_labelsdictPriority to label mapping (optional)
github.status_labelsdictStatus to label mapping (optional)

See GitHub Integration Guide for detailed configuration examples.

Azure DevOps Settings

SettingTypeDescription
azure_devops.organizationstringAzure DevOps organization (required)
azure_devops.projectstringProject name (required)
azure_devops.patstringPersonal Access Token (required)
azure_devops.base_urlstringBase URL (default: https://dev.azure.com)
azure_devops.area_pathstringArea path for work items (optional)
azure_devops.iteration_pathstringIteration/sprint path (optional)
azure_devops.work_item_typesdictType mapping (epic, story, subtask)
azure_devops.state_mappingdictStatus to state mapping (optional)

See Azure DevOps Integration Guide for detailed configuration examples.

Linear Settings

SettingTypeDescription
linear.api_keystringLinear API key (required)
linear.team_idstringTeam key or UUID (required)
linear.project_idstringProject UUID (optional)
linear.cycle_idstringCycle/sprint UUID (optional)
linear.state_mappingdictStatus to state mapping (optional)
linear.priority_mappingdictPriority mapping (1-4, optional)
linear.estimate_scalestringEstimate type: linear, exponential

See Linear Integration Guide for detailed configuration examples.

Asana Settings

SettingTypeDescription
asana.access_tokenstringAsana Personal Access Token (required)
asana.workspace_idstringWorkspace GID (required)
asana.project_idstringProject GID (required)
asana.team_idstringTeam GID (optional)
asana.sectionsdictStatus to section mapping (optional)
asana.custom_fieldsdictCustom field GID mapping (optional)
asana.priority_mappingdictPriority to enum value mapping (optional)

See Asana Integration Guide for detailed configuration examples.

Pivotal Tracker Settings

SettingTypeDescription
pivotal.api_tokenstringPivotal API token (required)
pivotal.project_idnumberProject ID (required)
pivotal.story_typesdictType mapping (story, bug, chore)
pivotal.state_mappingdictStatus to state mapping (optional)
pivotal.create_epicsbooleanCreate epics from markdown (default: true)

See Pivotal Tracker Integration Guide for detailed configuration examples.

ClickUp Settings

SettingTypeDescription
clickup.api_tokenstringClickUp API token (required)
clickup.space_idstringSpace ID (optional, for scoping operations)
clickup.folder_idstringFolder ID (optional, for scoping operations)
clickup.list_idstringList ID (optional, for scoping operations)
clickup.api_urlstringAPI endpoint (default: https://api.clickup.com/api/v2)

See ClickUp Integration Guide for detailed configuration examples.

Bitbucket Settings

SettingTypeDescription
bitbucket.usernamestringBitbucket username (required)
bitbucket.app_passwordstringApp Password (Cloud) or PAT (Server, required)
bitbucket.workspacestringWorkspace slug (Cloud) or project key (Server, required)
bitbucket.repostringRepository slug (required)
bitbucket.base_urlstringAPI base URL (default: https://api.bitbucket.org/2.0)
bitbucket.epic_labelstringLabel for epic issues (default: "epic")
bitbucket.story_labelstringLabel for story issues (default: "story")
bitbucket.subtask_labelstringLabel for subtask issues (default: "subtask")
bitbucket.status_mappingdictStatus to state mapping (optional)
bitbucket.priority_mappingdictPriority mapping (optional)

See Bitbucket Integration Guide for detailed configuration examples.

Sync Settings

SettingTypeDefaultDescription
sync.verbosebooleanfalseEnable verbose output
sync.executebooleanfalseExecute changes (vs dry-run)
sync.no_confirmbooleanfalseSkip confirmation prompts
sync.descriptionsbooleantrueSync story descriptions
sync.subtasksbooleantrueSync subtasks
sync.commentsbooleantrueSync comments
sync.statusesbooleantrueSync status transitions

Validation Settings

Configure constraints and guards for your documents and sync operations. All settings are optional - if not specified, defaults are used.

The validation configuration is organized into logical sections:

Issue Types (validation.issue_types)

SettingTypeDefaultDescription
allowedlist["Story", "User Story"]Issue types allowed when syncing/creating
defaultstring"User Story"Default type for new stories
aliasesdict(see below)Map alternative names to canonical types

Naming Conventions (validation.naming)

SettingTypeDefaultDescription
allowed_id_prefixeslist[]Allowed story ID prefixes (empty = all)
id_patternstring""Regex pattern for story IDs
require_sequential_idsbooleanfalseIDs must be sequential
normalize_ids_uppercasebooleantrueConvert IDs to uppercase
epic_id_patternstring""Pattern for epic IDs
title_casestring""Enforce title case: "title", "sentence", "upper"

Content Requirements (validation.content)

SettingTypeDefaultDescription
require_descriptionbooleanfalseStory must have description
description_min_lengthinteger0Minimum description length
description_max_lengthinteger0Maximum description length (0 = unlimited)
require_user_story_formatbooleanfalseRequire "As a...I want...So that" format
title_min_lengthinteger1Minimum title length
title_max_lengthinteger0Maximum title length (0 = unlimited)
title_patternstring""Regex pattern title must match
require_acceptance_criteriabooleanfalseMust have acceptance criteria
min_acceptance_criteriainteger0Minimum AC items
max_acceptance_criteriainteger0Maximum AC items
require_technical_notesbooleanfalseRequire technical notes
require_dependenciesbooleanfalseRequire dependencies section
require_linksbooleanfalseRequire at least one link
require_related_commitsbooleanfalseRequire related commits

Estimation (validation.estimation)

SettingTypeDefaultDescription
require_story_pointsbooleanfalseStory points must be set
min_story_pointsinteger0Minimum story points
max_story_pointsinteger0Maximum story points (0 = unlimited)
allowed_story_pointslist[]Allowed values (e.g., [1, 2, 3, 5, 8, 13, 21])
fibonacci_onlybooleanfalseOnly allow Fibonacci values
default_story_pointsinteger0Default story points
require_time_estimatebooleanfalseRequire time estimate

Subtasks (validation.subtasks)

SettingTypeDefaultDescription
require_subtasksbooleanfalseMust have at least one subtask
min_subtasksinteger0Minimum subtasks per story
max_subtasksinteger0Maximum subtasks (0 = unlimited)
subtask_title_patternstring""Regex for subtask titles
require_subtask_estimatesbooleanfalseSubtasks must have estimates
require_subtask_assigneebooleanfalseSubtasks must have assignees

Statuses (validation.statuses)

SettingTypeDefaultDescription
allowedlist[]Allowed status values (empty = all)
defaultstring"Planned"Default status for new stories
require_statusbooleanfalseStatus must be explicitly set
aliasesdict(see below)Map alternative names to canonical statuses
allowed_transitionsdict{}Workflow constraints: status -> allowed targets
require_status_emojibooleanfalseRequire emoji in status

Priorities (validation.priorities)

SettingTypeDefaultDescription
allowedlist[]Allowed priority values (empty = all)
defaultstring"Medium"Default priority
require_prioritybooleanfalsePriority must be set
aliasesdict(see below)Map P0/P1/etc to canonical names

Labels (validation.labels)

SettingTypeDefaultDescription
requiredlist[]Labels that must be present
allowedlist[]Whitelist of allowed labels
forbiddenlist[]Labels that are not allowed
min_labelsinteger0Minimum number of labels
max_labelsinteger0Maximum labels (0 = unlimited)
label_patternstring""Regex pattern for labels

Components (validation.components)

SettingTypeDefaultDescription
requiredlist[]Components that must be present
allowedlist[]Whitelist of allowed components
require_componentbooleanfalseAt least one component required

Assignees (validation.assignees)

SettingTypeDefaultDescription
require_assigneebooleanfalseStories must have an assignee
allowedlist[]Whitelist of allowed assignees
defaultstring""Default assignee
max_assigneesinteger1Maximum assignees per story

Sprints (validation.sprints)

SettingTypeDefaultDescription
require_sprintbooleanfalseMust be assigned to sprint
allowedlist[]Allowed sprint names
sprint_patternstring""Regex for sprint names

Versions (validation.versions)

SettingTypeDefaultDescription
require_versionbooleanfalseMust have fix version
allowedlist[]Allowed version values
version_patternstring""Regex for versions

Due Dates (validation.due_dates)

SettingTypeDefaultDescription
require_due_datebooleanfalseMust have due date
max_days_in_futureinteger0Max days in future (0 = unlimited)
min_days_in_futureinteger0Min days (prevent past dates)
date_formatstring"YYYY-MM-DD"Expected date format

Epic Constraints (validation.epic)

SettingTypeDefaultDescription
max_storiesinteger0Maximum stories per epic
min_storiesinteger0Minimum stories per epic
require_summarybooleanfalseEpic must have summary
require_descriptionbooleanfalseEpic must have description
max_total_story_pointsinteger0Max total points in epic
require_epic_ownerbooleanfalseEpic must have owner
max_in_progress_storiesinteger0Max stories in progress at once

Custom Fields (validation.custom_fields)

SettingTypeDefaultDescription
mappingsdict{}Map field names to tracker field IDs
requiredlist[]Custom fields that must be present
aliasesdict(see below)Alternative names for fields

Formatting (validation.formatting)

SettingTypeDefaultDescription
require_status_emojibooleanfalseRequire status emoji in headers
require_priority_emojibooleanfalseRequire priority emoji
allowed_header_levelslist[1, 2, 3]Allowed header levels
require_metadata_tablebooleanfalseRequire table format metadata
max_heading_depthinteger4Maximum heading depth
SettingTypeDefaultDescription
require_external_linksbooleanfalseRequire external links
allowed_domainslist[]Allowed domains (empty = all)
forbidden_domainslist[]Blocked domains
require_httpsbooleantrueLinks must use HTTPS

Behavior (validation.behavior)

SettingTypeDefaultDescription
strictbooleanfalseTreat warnings as errors
fail_fastbooleanfalseStop on first error
ignore_ruleslist[]Rule codes to ignore
auto_fix_idsbooleanfalseAuto-correct ID formatting
auto_fix_statusesbooleanfalseAuto-map status aliases
auto_fix_prioritiesbooleanfalseAuto-map priority aliases
show_suggestionsbooleantrueShow fix suggestions
max_errors_showninteger50Max errors to display

Extended Validation Settings

The following sections provide additional constraints for advanced workflows.

Workflow (validation.workflow)

SettingTypeDefaultDescription
definition_of_donelist[]Checklist items for "done" status
ready_for_dev_criterialist[]Required before story can start
require_reviewbooleanfalseMust be reviewed before done
require_qa_signoffbooleanfalseQA approval required
blocked_by_typeslist[]Issue types that can block
max_blocked_daysinteger0Alert if blocked longer
require_parentbooleanfalseMust have parent issue
require_epic_linkbooleanfalseMust link to epic
allowed_parent_typeslist[]Allowed parent issue types

Scheduling (validation.scheduling)

SettingTypeDefaultDescription
max_story_age_daysinteger0Max age for open stories
stale_after_daysinteger0Days until story is stale
require_start_datebooleanfalseMust have start date
max_duration_daysinteger0Max days for story duration
work_days_onlybooleanfalseExclude weekends from calculations
sla_daysinteger0SLA target in days
warn_approaching_sla_daysinteger0Warn N days before SLA
require_end_datebooleanfalseMust have end/target date

Development (validation.development)

SettingTypeDefaultDescription
branch_naming_patternstring""Regex for branch names
require_branch_linkbooleanfalseMust link to branch
require_pr_linkbooleanfalseMust link to PR
commit_message_patternstring""Regex for commit messages
require_code_reviewbooleanfalseCode review required
allowed_branch_prefixeslist[]Allowed prefixes (feature/, bugfix/, etc.)
require_merge_before_donebooleanfalsePR must be merged before done

Quality (validation.quality)

SettingTypeDefaultDescription
require_test_casesbooleanfalseMust have test cases
min_test_casesinteger0Minimum test cases
require_test_planbooleanfalseTest plan required
bug_severity_levelslist[]Valid severity levels for bugs
require_reproduction_stepsbooleanfalseBugs must have repro steps
require_expected_behaviorbooleanfalseBugs must describe expected
require_actual_behaviorbooleanfalseBugs must describe actual
require_environment_infobooleanfalseBugs must have env info
require_screenshotsbooleanfalseBugs must have screenshots

Documentation (validation.documentation)

SettingTypeDefaultDescription
require_api_docsbooleanfalseAPI documentation required
require_changelog_entrybooleanfalseMust update changelog
require_release_notesbooleanfalseRelease notes required
documentation_link_requiredbooleanfalseMust link to docs
readme_update_requiredbooleanfalseREADME update required
require_user_docsbooleanfalseUser-facing docs required
docs_location_patternstring""Regex for docs file paths

Security (validation.security)

SettingTypeDefaultDescription
require_security_reviewbooleanfalseSecurity review required
confidentiality_levelslist[]Valid confidentiality levels
require_data_classificationbooleanfalseData classification required
pii_handling_requiredbooleanfalsePII handling docs required
require_threat_modelbooleanfalseThreat model required
compliance_tagslist[]Required compliance tags
require_vulnerability_scanbooleanfalseVuln scan required
security_labelslist[]Valid security labels

Templates (validation.templates)

SettingTypeDefaultDescription
story_templatestring""Path to story template
bug_templatestring""Path to bug template
epic_templatestring""Path to epic template
task_templatestring""Path to task template
enforce_templatebooleanfalseStrictly enforce templates
allowed_sectionslist[]Allowed markdown sections
required_sectionslist[]Required markdown sections
section_orderlist[]Enforced section order

Alerts (validation.alerts)

SettingTypeDefaultDescription
alert_on_blockedbooleanfalseAlert when story blocked
alert_on_stalebooleanfalseAlert on stale stories
alert_threshold_daysinteger0Days before alert
alert_on_over_estimatebooleanfalseAlert on large estimates
watcherslist[]Default watchers to notify
alert_on_unassignedbooleanfalseAlert on unassigned stories
alert_on_no_estimatebooleanfalseAlert on missing estimates
notification_channelslist[]Notification channels (slack, email)

Dependencies (validation.dependencies)

SettingTypeDefaultDescription
require_dependency_checkbooleanfalseCheck dependencies
max_dependenciesinteger0Max dependencies per story
allow_circular_dependenciesbooleanfalseAllow circular deps
dependency_typeslist[]Valid dependency types
cross_project_deps_allowedbooleantrueAllow cross-project deps
require_dependency_approvalbooleanfalseApprove new deps
blocked_dependency_typeslist[]Disallowed dep types

Archival (validation.archival)

SettingTypeDefaultDescription
auto_archive_after_daysinteger0Days after done to archive
archive_cancelledbooleanfalseAuto-archive cancelled
retention_daysinteger0Keep archived for N days
exclude_from_archivelist[]Labels/types to exclude
archive_on_donebooleanfalseArchive when done
cleanup_stale_branchesbooleanfalseClean up stale branches

Capacity (validation.capacity)

SettingTypeDefaultDescription
max_stories_per_assigneeinteger0Max stories per person
max_points_per_sprintinteger0Max points per sprint
warn_overload_thresholdinteger0Warn at N% capacity
require_capacity_checkbooleanfalseCheck capacity limits
max_parallel_storiesinteger0Max in-progress per person
points_per_dayfloat0.0Team velocity (pts/day)

Environments (validation.environments)

SettingTypeDefaultDescription
allowed_environmentslist[]Valid environment names
require_environmentbooleanfalseEnvironment required
environment_orderlist[]Deployment order (dev->staging->prod)
require_rollback_planbooleanfalseRollback plan required
require_deployment_notesbooleanfalseDeployment notes required
production_approval_requiredbooleanfalseProd deploy needs approval

Complete Example

yaml
# .spectryn.yaml - Complete Validation Configuration Example
validation:
  # Issue Types - Guard against "Story" vs "User Story" confusion
  issue_types:
    allowed:
      - "User Story"
      - "Bug"
      - "Task"
    default: "User Story"
    aliases:
      "story": "User Story"
      "defect": "Bug"

  # Naming Conventions
  naming:
    allowed_id_prefixes:
      - "US"
      - "BUG"
      - "TASK"
    normalize_ids_uppercase: true

  # Content Requirements
  content:
    require_description: true
    require_acceptance_criteria: true
    min_acceptance_criteria: 1
    title_max_length: 100

  # Estimation - Fibonacci story points
  estimation:
    require_story_points: true
    allowed_story_points: [1, 2, 3, 5, 8, 13, 21]
    fibonacci_only: true

  # Subtasks
  subtasks:
    max_subtasks: 10

  # Status Workflow
  statuses:
    allowed:
      - "Planned"
      - "In Progress"
      - "In Review"
      - "Done"
      - "Blocked"
    default: "Planned"
    aliases:
      "todo": "Planned"
      "wip": "In Progress"

  # Priorities
  priorities:
    allowed:
      - "Critical"
      - "High"
      - "Medium"
      - "Low"
    default: "Medium"

  # Labels
  labels:
    required:
      - "team:backend"
    max_labels: 5

  # Epic Constraints
  epic:
    max_stories: 50
    require_summary: true

  # Behavior
  behavior:
    strict: false
    auto_fix_statuses: true
    auto_fix_priorities: true

  # Workflow constraints
  workflow:
    definition_of_done:
      - "Code reviewed"
      - "Tests passing"
      - "Documentation updated"
    require_review: true
    require_epic_link: true

  # Scheduling
  scheduling:
    stale_after_days: 14
    sla_days: 30
    warn_approaching_sla_days: 7

  # Development workflow
  development:
    branch_naming_pattern: "^(feature|bugfix|hotfix)/[A-Z]+-\\d+-.+"
    require_pr_link: true
    allowed_branch_prefixes:
      - "feature/"
      - "bugfix/"
      - "hotfix/"
    require_merge_before_done: true

  # Quality requirements
  quality:
    require_test_cases: true
    min_test_cases: 1
    require_reproduction_steps: true  # For bugs

  # Documentation
  documentation:
    require_changelog_entry: true

  # Security
  security:
    confidentiality_levels:
      - "public"
      - "internal"
      - "confidential"
    compliance_tags:
      - "GDPR"
      - "SOC2"

  # Templates
  templates:
    required_sections:
      - "User Story"
      - "Acceptance Criteria"
    enforce_template: false

  # Alerts
  alerts:
    alert_on_blocked: true
    alert_on_stale: true
    alert_threshold_days: 7

  # Dependencies
  dependencies:
    max_dependencies: 5
    allow_circular_dependencies: false

  # Capacity management
  capacity:
    max_stories_per_assignee: 5
    max_points_per_sprint: 40
    max_parallel_stories: 3

  # Environments
  environments:
    allowed_environments:
      - "development"
      - "staging"
      - "production"
    environment_order:
      - "development"
      - "staging"
      - "production"
    production_approval_required: true

Released under the MIT License.