Skip to content

Commit c415c37

Browse files
committed
more provider settings
1 parent 9d32003 commit c415c37

File tree

12 files changed

+468
-24
lines changed

12 files changed

+468
-24
lines changed

plugin/providers/ticketing.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ description: Default ticketing provider behavior for AI-DLC
99
- **Epic handling**:
1010
- If `epic` is already set in intent.md frontmatter (provided by product), link all tickets to that existing epic — do NOT create a new one
1111
- If `epic` is empty, create one **epic** per intent (title from intent, description from Problem + Solution) and store the key in intent.md frontmatter: `epic: PROJ-123`
12-
- Create one **ticket** per unit linked to the epic
12+
- **Every unit ticket MUST be linked to the intent epic** — the epic is the single parent that groups all unit work. Without this link, tickets are orphaned and invisible to project tracking. This applies regardless of provider (Jira epic links, Linear parent issues, GitHub milestones/tracked-by, GitLab epic associations). Only skip if `config.epic_link` is explicitly `"none"`.
1313
- Map unit `depends_on` to ticket **blocked-by** relationships:
1414
- If unit-02 depends on unit-01, the ticket for unit-02 is blocked by unit-01's ticket
1515
- Store ticket key in unit frontmatter: `ticket: PROJ-124`
@@ -23,3 +23,19 @@ description: Default ticketing provider behavior for AI-DLC
2323
## Ticket Content
2424
- Include unit success criteria as a checklist in the ticket description
2525
- Link to the `.ai-dlc/` artifact path or branch for developer reference
26+
27+
## Provider Config
28+
29+
Provider-specific configuration lives under `providers.ticketing.config` in `.ai-dlc/settings.yml`.
30+
Schema: `${CLAUDE_PLUGIN_ROOT}/schemas/providers/{type}.schema.json`
31+
32+
**Never create top-level provider keys** (e.g., no top-level `jira:` key). All config goes under `providers.ticketing.config`.
33+
34+
When config fields are present, use them for ticket creation:
35+
- `issue_type` / `issue_type_id` → set on created tickets
36+
- `labels` → apply discipline-mapped labels to each unit ticket
37+
- `story_points: required` → estimate and set story points
38+
- `epic_link: required` → link all tickets to the intent epic
39+
- `issue_links: required` → create Blocks/Blocked-By links from unit `depends_on`
40+
- `link_types` → use configured link type names (defaults: "Blocks" / "Is Blocked By")
41+
- `details` → additional ticket content requirements
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-07/schema#",
3+
"$id": "https://han.guru/schemas/providers/confluence.schema.json",
4+
"title": "Confluence Provider Config",
5+
"description": "Provider-specific configuration for Confluence spec provider",
6+
"type": "object",
7+
"properties": {
8+
"space_key": {
9+
"type": "string",
10+
"description": "Confluence space key"
11+
},
12+
"cloud_id": {
13+
"type": "string",
14+
"description": "Atlassian site URL or cloud ID"
15+
},
16+
"parent_page_id": {
17+
"type": "string",
18+
"description": "Parent page ID under which spec pages are created"
19+
},
20+
"template_id": {
21+
"type": "string",
22+
"description": "Confluence page template ID for new spec pages"
23+
}
24+
},
25+
"additionalProperties": false
26+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-07/schema#",
3+
"$id": "https://han.guru/schemas/providers/figma.schema.json",
4+
"title": "Figma Provider Config",
5+
"description": "Provider-specific configuration for Figma design provider",
6+
"type": "object",
7+
"properties": {
8+
"project_id": {
9+
"type": "string",
10+
"description": "Figma project ID"
11+
},
12+
"team_id": {
13+
"type": "string",
14+
"description": "Figma team ID"
15+
},
16+
"file_key": {
17+
"type": "string",
18+
"description": "Figma file key for the primary design file"
19+
}
20+
},
21+
"additionalProperties": false
22+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-07/schema#",
3+
"$id": "https://han.guru/schemas/providers/github-issues.schema.json",
4+
"title": "GitHub Issues Provider Config",
5+
"description": "Provider-specific configuration for GitHub Issues ticketing",
6+
"type": "object",
7+
"properties": {
8+
"labels": {
9+
"type": "object",
10+
"description": "Map of unit discipline to GitHub label arrays",
11+
"additionalProperties": {
12+
"type": "array",
13+
"items": { "type": "string" }
14+
}
15+
},
16+
"story_points": {
17+
"type": "string",
18+
"enum": ["required", "optional", "none"],
19+
"default": "none",
20+
"description": "Whether to set story point estimates (requires GitHub Projects custom field)"
21+
},
22+
"epic_link": {
23+
"type": "string",
24+
"enum": ["required", "optional", "none"],
25+
"default": "required",
26+
"description": "Whether to link unit issues to a milestone or tracked-by parent issue"
27+
},
28+
"issue_links": {
29+
"type": "string",
30+
"enum": ["required", "optional", "none"],
31+
"default": "required",
32+
"description": "Whether to create task list references from unit depends_on DAG"
33+
},
34+
"milestone": {
35+
"type": "string",
36+
"description": "GitHub milestone name or number to use as the epic equivalent"
37+
},
38+
"project_number": {
39+
"type": "integer",
40+
"description": "GitHub Projects (v2) board number to add issues to"
41+
},
42+
"details": {
43+
"type": "object",
44+
"description": "Additional issue content requirements (field name to requirement level)",
45+
"additionalProperties": {
46+
"type": "string",
47+
"enum": ["required", "optional", "none"]
48+
}
49+
}
50+
},
51+
"additionalProperties": false
52+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-07/schema#",
3+
"$id": "https://han.guru/schemas/providers/gitlab-issues.schema.json",
4+
"title": "GitLab Issues Provider Config",
5+
"description": "Provider-specific configuration for GitLab Issues ticketing",
6+
"type": "object",
7+
"properties": {
8+
"project_id": {
9+
"type": "string",
10+
"description": "GitLab project ID or path (e.g., 'my-group/my-project')"
11+
},
12+
"issue_type": {
13+
"type": "string",
14+
"default": "issue",
15+
"enum": ["issue", "incident", "test_case"],
16+
"description": "Default GitLab issue type for unit tickets"
17+
},
18+
"labels": {
19+
"type": "object",
20+
"description": "Map of unit discipline to GitLab label arrays",
21+
"additionalProperties": {
22+
"type": "array",
23+
"items": { "type": "string" }
24+
}
25+
},
26+
"story_points": {
27+
"type": "string",
28+
"enum": ["required", "optional", "none"],
29+
"default": "none",
30+
"description": "Whether to set weight on unit issues"
31+
},
32+
"epic_link": {
33+
"type": "string",
34+
"enum": ["required", "optional", "none"],
35+
"default": "required",
36+
"description": "Whether to link unit issues to a GitLab epic"
37+
},
38+
"issue_links": {
39+
"type": "string",
40+
"enum": ["required", "optional", "none"],
41+
"default": "required",
42+
"description": "Whether to create blocking relationships from unit depends_on DAG"
43+
},
44+
"link_types": {
45+
"type": "object",
46+
"description": "GitLab link type names for DAG relationships",
47+
"properties": {
48+
"blocks": {
49+
"type": "string",
50+
"default": "blocks",
51+
"description": "Link type for 'blocks' direction"
52+
},
53+
"blocked_by": {
54+
"type": "string",
55+
"default": "is_blocked_by",
56+
"description": "Link type for 'blocked by' direction"
57+
}
58+
},
59+
"additionalProperties": false
60+
},
61+
"milestone": {
62+
"type": "string",
63+
"description": "GitLab milestone title to assign unit issues to"
64+
},
65+
"details": {
66+
"type": "object",
67+
"description": "Additional issue content requirements (field name to requirement level)",
68+
"additionalProperties": {
69+
"type": "string",
70+
"enum": ["required", "optional", "none"]
71+
}
72+
}
73+
},
74+
"required": ["project_id"],
75+
"additionalProperties": false
76+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-07/schema#",
3+
"$id": "https://han.guru/schemas/providers/jira.schema.json",
4+
"title": "Jira Provider Config",
5+
"description": "Provider-specific configuration for Jira ticketing",
6+
"type": "object",
7+
"properties": {
8+
"project_key": {
9+
"type": "string",
10+
"description": "Jira project key (e.g., PROJ)"
11+
},
12+
"cloud_id": {
13+
"type": "string",
14+
"description": "Atlassian site URL or cloud ID"
15+
},
16+
"issue_type": {
17+
"type": "string",
18+
"default": "Task",
19+
"description": "Default issue type name for unit tickets"
20+
},
21+
"issue_type_id": {
22+
"type": "string",
23+
"description": "Jira issue type ID (overrides issue_type name lookup)"
24+
},
25+
"labels": {
26+
"type": "object",
27+
"description": "Map of unit discipline to Jira label arrays",
28+
"additionalProperties": {
29+
"type": "array",
30+
"items": { "type": "string" }
31+
},
32+
"examples": [{ "backend": ["Elixir"], "frontend": ["React", "TypeScript"] }]
33+
},
34+
"story_points": {
35+
"type": "string",
36+
"enum": ["required", "optional", "none"],
37+
"default": "none",
38+
"description": "Whether to estimate and set story points on unit tickets"
39+
},
40+
"story_points_field": {
41+
"type": "string",
42+
"default": "story_points",
43+
"description": "Jira field ID for story points (e.g., 'customfield_10014'). Varies per Jira instance."
44+
},
45+
"epic_link": {
46+
"type": "string",
47+
"enum": ["required", "optional", "none"],
48+
"default": "required",
49+
"description": "Whether to link all unit tickets to the intent epic"
50+
},
51+
"issue_links": {
52+
"type": "string",
53+
"enum": ["required", "optional", "none"],
54+
"default": "required",
55+
"description": "Whether to create Blocks/Blocked-By links from unit depends_on DAG"
56+
},
57+
"link_types": {
58+
"type": "object",
59+
"description": "Jira link type names for DAG relationships",
60+
"properties": {
61+
"blocks": {
62+
"type": "string",
63+
"default": "Blocks",
64+
"description": "Link type name for 'blocks' direction"
65+
},
66+
"blocked_by": {
67+
"type": "string",
68+
"default": "Is Blocked By",
69+
"description": "Link type name for 'blocked by' direction"
70+
}
71+
},
72+
"additionalProperties": false
73+
},
74+
"details": {
75+
"type": "object",
76+
"description": "Additional ticket content requirements (field name to requirement level)",
77+
"additionalProperties": {
78+
"type": "string",
79+
"enum": ["required", "optional", "none"]
80+
}
81+
}
82+
},
83+
"required": ["project_key"],
84+
"additionalProperties": false
85+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-07/schema#",
3+
"$id": "https://han.guru/schemas/providers/linear.schema.json",
4+
"title": "Linear Provider Config",
5+
"description": "Provider-specific configuration for Linear ticketing",
6+
"type": "object",
7+
"properties": {
8+
"project_key": {
9+
"type": "string",
10+
"description": "Linear project identifier"
11+
},
12+
"team_id": {
13+
"type": "string",
14+
"description": "Linear team ID"
15+
},
16+
"issue_type": {
17+
"type": "string",
18+
"default": "Issue",
19+
"description": "Default Linear issue type for unit tickets"
20+
},
21+
"labels": {
22+
"type": "object",
23+
"description": "Map of unit discipline to Linear label arrays",
24+
"additionalProperties": {
25+
"type": "array",
26+
"items": { "type": "string" }
27+
}
28+
},
29+
"story_points": {
30+
"type": "string",
31+
"enum": ["required", "optional", "none"],
32+
"default": "none",
33+
"description": "Whether to set estimate points on unit tickets"
34+
},
35+
"epic_link": {
36+
"type": "string",
37+
"enum": ["required", "optional", "none"],
38+
"default": "required",
39+
"description": "Whether to link unit tickets to the intent project/parent issue"
40+
},
41+
"issue_links": {
42+
"type": "string",
43+
"enum": ["required", "optional", "none"],
44+
"default": "required",
45+
"description": "Whether to create blocks/blocked-by relations from unit depends_on DAG"
46+
},
47+
"cycle_id": {
48+
"type": "string",
49+
"description": "Linear cycle ID to assign tickets to"
50+
},
51+
"details": {
52+
"type": "object",
53+
"description": "Additional ticket content requirements (field name to requirement level)",
54+
"additionalProperties": {
55+
"type": "string",
56+
"enum": ["required", "optional", "none"]
57+
}
58+
}
59+
},
60+
"required": ["project_key"],
61+
"additionalProperties": false
62+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-07/schema#",
3+
"$id": "https://han.guru/schemas/providers/notion.schema.json",
4+
"title": "Notion Provider Config",
5+
"description": "Provider-specific configuration for Notion spec provider",
6+
"type": "object",
7+
"properties": {
8+
"workspace_id": {
9+
"type": "string",
10+
"description": "Notion workspace ID"
11+
},
12+
"database_id": {
13+
"type": "string",
14+
"description": "Notion database ID for specs"
15+
},
16+
"parent_page_id": {
17+
"type": "string",
18+
"description": "Parent page ID under which spec pages are created (alternative to database_id)"
19+
}
20+
},
21+
"additionalProperties": false
22+
}

0 commit comments

Comments
 (0)