Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
153 changes: 153 additions & 0 deletions linear/contracts/linear_type_classifier_v1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
{
"version": "linear_type_classifier_v1",
"status": "active",
"owner": "Product Development",
"supersedes": [
"linear/docs/process/linear_issue_type_decision_guide_v1.md prose-only decision flow"
],
"purpose": "Deterministic issue type classifier and advisory default QA/PM routing recommendation source for Linear ticket creation, triage, and hygiene automation.",
"required_intake_block": "Linear Classification",
"required_intake_fields": [
"Output",
"Behavior change",
"Broken existing behavior",
"Evidence",
"Children expected",
"PM-testable"
],
"output_values": [
"code",
"docs/process",
"design artifact",
"design approval",
"release coordination",
"plan container"
],
"output_aliases": {
"implementation": "code",
"docs": "docs/process",
"process": "docs/process"
},
"strict_boolean_fields": [
"Behavior change",
"Broken existing behavior",
"Children expected",
"PM-testable"
],
"boolean_values": [
"yes",
"no"
],
"canonical_types": [
"Bug",
"Feature",
"Chore",
"Design",
"Plan",
"Release"
],
"type_decision_order": [
{
"type": "Bug",
"when": {
"broken_existing_behavior": true,
"evidence_required": true
},
"reason": "Expected behavior did not work and evidence exists. This remains Bug even if the implementation fix is refactor, cleanup, or hardening."
},
{
"type": "Design",
"when": {
"output_any_of": [
"design artifact",
"design approval"
]
},
"reason": "Ticket output is serious design artifact or design approval, usually Figma/mockup/design-system evidence."
},
{
"type": "Release",
"when": {
"output_any_of": [
"release coordination"
]
},
"reason": "Ticket is a real release coordination container with release mechanics."
},
{
"type": "Plan",
"when": {
"output_any_of": [
"plan container"
],
"children_expected": true
},
"reason": "Ticket is a mini-project/epic container with real subtickets toward one precise goal."
},
{
"type": "Feature",
"when": {
"behavior_change": true
},
"reason": "Ticket adds or upgrades functionality with real value to people or agents."
},
{
"type": "Chore",
"when": {
"default": true
},
"reason": "Maintenance, docs/process, cleanup, refactor, upgrade, or hygiene work without new user/agent-facing functionality."
}
],
"routing_defaults_status": "advisory_until_wired_to_label_automation",
"routing_defaults": [
{
"type": "Design",
"qa": "skip",
"pm": "required",
"reason": "Design acceptance is PM/design review; QA does not validate design artifacts."
},
{
"type": "Chore",
"condition": {
"pm_testable": false
},
"qa": "required",
"pm": "skip_allowed",
"reason": "Highly technical chores with no PM-testable behavior change can be accepted by QA evidence."
},
{
"type": "Bug",
"condition": {
"pm_testable": false
},
"qa": "required",
"pm": "skip_allowed",
"reason": "Tiny/narrow bugs can skip PM when QA evidence is enough."
},
{
"type_any_of": [
"Plan",
"Release"
],
"qa": "subissues_decide",
"pm": "subissues_decide",
"reason": "Plan and Release are coordinating containers; real subtickets carry type and route."
},
{
"type_any_of": [
"Feature",
"Bug",
"Chore"
],
"qa": "required",
"pm": "required",
"reason": "Default implementation route unless a skip condition above applies."
}
],
"learning_loop": {
"human_correction_log": "linear/docs/process/linear_type_classifier_corrections_v1.md",
"rule": "When CJ corrects a hygiene audit classification, record one short correction in the markdown log, then convert it into this JSON classifier or a classifier test fixture in the same PR/run.",
"no_hidden_memory": true
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,18 @@ Every "Done" claim must include:
- Label check: finalized labels applied only to finalized items; future items do not receive completion labels.
- Bidirectional linking check: PR comment plus Linear issue comment/link verified, with no duplicate link-spam.

7. `Issue Type check` (required when creating, triaging, or normalizing issue type)
- Exactly one canonical issue type is set, or `needs-type` is present with a note naming the missing evidence.
- Type choice follows `linear/contracts/linear_type_classifier_v1.json` and `linear_issue_type_decision_guide_v1.md`.
- Type is not inferred from title alone.
- Include the compact `Linear Classification` intake block when moving an issue to `Ready`:
- `Output`
- `Behavior change`
- `Broken existing behavior`
- `Evidence`
- `Children expected`
- `PM-testable`

## Taylor01 Portability Check (required when relevant)

For issues touching agents, workflows, process docs, workspace policy, or tool integrations, also include:
Expand Down Expand Up @@ -77,7 +89,7 @@ Commands/UI checks:
- GitHub UI: Org Settings -> Security -> Require 2FA = enabled

Artifacts:
- `/Users/cjarguello/bitpod-app/bitpod-tools/linear/docs/process/github_org_baseline_evidence_2026-03-06.md`
- `/Users/taylor01/BitPod-App/bitpod-tools/linear/docs/process/github_org_baseline_evidence_2026-03-06.md`
- [PR #6](https://github.com/BitPod-App/bitpod-tools/pull/6)

Pass/Fail:
Expand All @@ -100,6 +112,11 @@ PR-to-Linear closeout check:
- Labels: domain label + qa/pm result labels verified where finalized
- Bidirectional links: PR comment verified; Linear attachment/comment verified; no duplicate retroactive comments

Issue Type check:
- Type: Feature / Bug / Chore / Design / Plan / Release / blocked by `needs-type`
- Evidence basis: acceptance criteria, defect evidence, design artifact, parent rollout scope, release checklist, or other current issue evidence
- Decision guide: `linear/contracts/linear_type_classifier_v1.json` and `linear_issue_type_decision_guide_v1.md`

Risk / follow-up:
- `code_security` feature is plan-gated; tracked separately and not blocking this issue.
```
Expand All @@ -121,3 +138,4 @@ Risk / follow-up:
- If a meaningful temporary bypass is used, add or update the active bypass register entry instead of silently relying on memory.
- If a PR-to-Linear closeout check is required and missing, do not claim the issue/project/PR history is normalized.
- If project membership cannot be corrected through available tooling, record that as an explicit blocker rather than marking the project cleanup fully complete.
- If issue type evidence is missing or ambiguous, keep or add `needs-type` rather than guessing.
Loading
Loading