codex - added docu
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
# KanbanGit Documentation
|
||||
|
||||
## Current status
|
||||
|
||||
KanbanGit currently starts from a fresh Laravel 13 + Inertia starter application. The product-specific Kanban, ticketing, permission, and Git integration features described in this documentation are not implemented yet.
|
||||
|
||||
## Product summary
|
||||
|
||||
KanbanGit is intended to become a self-hostable project management application with Kanban workflows and Git provider integrations. The long-term product direction is comparable to a lightweight Jira-style workflow system with repository awareness, starting with Gitea and leaving room for future providers such as GitHub and GitLab.
|
||||
|
||||
The product centers around projects. Each project owns its own board configuration, backlog, ticket metadata, ticket hierarchy, and repository connections. The architecture must support application-wide administration plus project-scoped permissions that can be assigned to users and teams.
|
||||
|
||||
## Documentation map
|
||||
|
||||
- [Product Spec](/docs/product-spec.md) describes expected product behavior, user-visible rules, and scope boundaries.
|
||||
- [Domain Model](/docs/domain-model.md) defines the canonical domain concepts, relationships, and invariants that future database tables, Eloquent models, policies, and frontend types should follow.
|
||||
- [Architecture Roadmap](/docs/architecture-roadmap.md) captures the planned architecture direction, permission strategy, integration boundaries, and staged implementation intent.
|
||||
|
||||
## Glossary
|
||||
|
||||
| Term | Meaning |
|
||||
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Project | A workspace with its own settings, board columns, backlog, tickets, and repository connections. |
|
||||
| Project Key | A project-specific uppercase identifier with a maximum length of 5 characters. It prefixes every ticket key. |
|
||||
| Ticket Key | The immutable unique ticket identifier in the format `PROJECTKEY-INDEX`. |
|
||||
| Board | The Kanban view of a project, using configurable project-specific columns. |
|
||||
| Backlog | The default intake area where newly created tickets start before they are moved into a board column. |
|
||||
| Ticket | The core work item with title, description, acceptance criteria, type, priority, status, custom field values, worklog, and links. |
|
||||
| Parent Ticket | A ticket of the dedicated `Parent` type that may contain child tickets. |
|
||||
| Worklog | The audit trail of ticket changes, including what changed and who changed it. |
|
||||
| Team | A group of users that can receive project permissions and pass those permissions to its members. |
|
||||
| Permission | A project-scoped action grant such as `create`, `view`, `edit`, or `delete`, plus application-wide admin access for platform administration. |
|
||||
| Repository Connection | A project-level configuration that links the project to an external Git provider repository. |
|
||||
|
||||
## Product principles
|
||||
|
||||
- Self-hosting is a core requirement.
|
||||
- Projects are the primary boundary for workflow configuration.
|
||||
- Ticket keys are immutable and must remain reliable references across the product and future Git integrations.
|
||||
- Permissions must be designed for both direct user assignment and team inheritance, even before the full permission system is implemented.
|
||||
- External Git providers must be introduced behind a provider abstraction, even if Gitea is the first supported provider.
|
||||
@@ -0,0 +1,221 @@
|
||||
# KanbanGit Architecture Roadmap
|
||||
|
||||
## Purpose
|
||||
|
||||
This document captures the intended architecture direction for KanbanGit so that implementation can start with stable boundaries and without re-deciding the core domain model later.
|
||||
|
||||
## Current state
|
||||
|
||||
The current repository is still a fresh Laravel 13 + Inertia starter application with authentication scaffolding. The architecture described here is target-state guidance and not a description of the current implementation.
|
||||
|
||||
## Architectural goals
|
||||
|
||||
- Keep the product self-hostable and simple to operate.
|
||||
- Preserve a clear separation between platform administration and project-scoped work.
|
||||
- Make project workflow configuration flexible without coupling it to one fixed board model.
|
||||
- Treat ticket keys as first-class stable references across UI, worklog, and future Git integrations.
|
||||
- Introduce Git providers behind a provider abstraction so the product does not become Gitea-specific at the domain level.
|
||||
|
||||
## Recommended domain boundaries
|
||||
|
||||
The application should evolve around these bounded areas:
|
||||
|
||||
- Administration
|
||||
- Identity and access
|
||||
- Projects
|
||||
- Ticketing
|
||||
- Integrations
|
||||
|
||||
### Administration
|
||||
|
||||
Owns:
|
||||
|
||||
- Global settings
|
||||
- User administration
|
||||
- Platform admin capabilities
|
||||
|
||||
### Identity and access
|
||||
|
||||
Owns:
|
||||
|
||||
- Users
|
||||
- Teams
|
||||
- Permission definitions
|
||||
- Direct permission assignments
|
||||
- Team-based permission inheritance
|
||||
|
||||
The permission architecture must support both of these layers:
|
||||
|
||||
- Global admin access
|
||||
- Project-scoped permissions
|
||||
|
||||
### Projects
|
||||
|
||||
Owns:
|
||||
|
||||
- Project creation and lifecycle
|
||||
- Project key rules
|
||||
- Board column configuration
|
||||
- Ticket type configuration
|
||||
- Ticket priority configuration
|
||||
- Ticket field configuration
|
||||
- Ticket link type configuration
|
||||
- Repository connection configuration
|
||||
|
||||
### Ticketing
|
||||
|
||||
Owns:
|
||||
|
||||
- Backlog
|
||||
- Board placement
|
||||
- Ticket creation and editing
|
||||
- Parent-child hierarchy
|
||||
- Blocked state
|
||||
- Worklog
|
||||
- Ticket linking
|
||||
|
||||
### Integrations
|
||||
|
||||
Owns:
|
||||
|
||||
- Git provider abstraction
|
||||
- Provider-specific repository sync or discovery logic
|
||||
- Branch and pull request correlation to tickets
|
||||
|
||||
## Permission architecture direction
|
||||
|
||||
The permission system is intentionally not implemented in this step, but the rest of the application should be designed so it can be introduced without structural rework.
|
||||
|
||||
Key rules:
|
||||
|
||||
- Application-wide admin access is separate from project-scoped permissions.
|
||||
- Project permissions are at least `create`, `view`, `edit`, and `delete`.
|
||||
- Permissions can be granted directly to users.
|
||||
- Permissions can be granted to teams.
|
||||
- Users inherit project permissions through team membership.
|
||||
- Effective permissions are additive.
|
||||
|
||||
Implementation guidance:
|
||||
|
||||
- Avoid hard-coding authorization rules directly into project or ticket records.
|
||||
- Keep permission evaluation as a dedicated capability that can later be expressed through policies or services.
|
||||
- Model team inheritance as a first-class rule, not as a future patch.
|
||||
|
||||
## Project configuration direction
|
||||
|
||||
Projects must be the configuration boundary for workflow behavior.
|
||||
|
||||
Each project should eventually own:
|
||||
|
||||
- A globally unique project key
|
||||
- Board columns
|
||||
- Ticket types
|
||||
- Ticket priorities
|
||||
- Ticket field definitions
|
||||
- Ticket link types
|
||||
- Repository connections
|
||||
|
||||
This allows each project to define its own working style without requiring application-wide workflow rules.
|
||||
|
||||
## Ticket architecture direction
|
||||
|
||||
Ticketing should be designed around a stable core record plus project-configured metadata.
|
||||
|
||||
Stable ticket core:
|
||||
|
||||
- Ticket key
|
||||
- Title
|
||||
- Description
|
||||
- Acceptance criteria
|
||||
- Status context
|
||||
- Type
|
||||
- Priority
|
||||
- Parent reference
|
||||
- Blocked state
|
||||
|
||||
Project-configured metadata:
|
||||
|
||||
- User fields such as assignee, driver, reviewer, and reporter
|
||||
- Numeric fields such as estimated story points
|
||||
- Future additional field types
|
||||
|
||||
History model:
|
||||
|
||||
- Every ticket change writes to a worklog entry stream
|
||||
- Worklog captures actor and change summary
|
||||
- Worklog should be treated as part of the core ticket experience, not an optional add-on
|
||||
|
||||
Hierarchy model:
|
||||
|
||||
- Parent-child relationships are explicit
|
||||
- Only `Parent` tickets can act as parent nodes
|
||||
- Nested parent trees are allowed
|
||||
|
||||
## Git integration direction
|
||||
|
||||
The first planned integration target is Gitea. The architecture should still avoid provider-specific assumptions in core ticketing or project logic.
|
||||
|
||||
Required direction:
|
||||
|
||||
- Repository connections live in project settings
|
||||
- A project may eventually connect multiple repositories
|
||||
- Provider information belongs to the repository connection layer
|
||||
- Ticket views later expose branches and pull requests
|
||||
- Matching is based on branch names that start with the ticket key
|
||||
|
||||
Future providers:
|
||||
|
||||
- GitHub
|
||||
- GitLab
|
||||
|
||||
## Suggested implementation phases
|
||||
|
||||
### Phase 1
|
||||
|
||||
Foundation only:
|
||||
|
||||
- Projects
|
||||
- Project keys
|
||||
- Backlog
|
||||
- Board columns
|
||||
- Tickets
|
||||
- Ticket priorities
|
||||
- Ticket types
|
||||
- Ticket field definitions
|
||||
- Ticket links
|
||||
- Blocked state
|
||||
- Worklog
|
||||
|
||||
### Phase 2
|
||||
|
||||
Access control foundation:
|
||||
|
||||
- Teams
|
||||
- Project permissions
|
||||
- Admin permissions
|
||||
- Effective permission evaluation
|
||||
|
||||
### Phase 3
|
||||
|
||||
Git integration foundation:
|
||||
|
||||
- Gitea repository connections
|
||||
- Branch correlation
|
||||
- Pull request correlation
|
||||
|
||||
### Phase 4
|
||||
|
||||
Later expansion:
|
||||
|
||||
- Additional Git providers
|
||||
- Roadmap
|
||||
- Other planning and reporting capabilities
|
||||
|
||||
## Explicitly not implemented in this step
|
||||
|
||||
- No database schema has been added yet.
|
||||
- No Eloquent models have been added yet.
|
||||
- No policies or permission evaluation logic have been added yet.
|
||||
- No board, backlog, project, or ticket UI has been added yet.
|
||||
- No Git integration has been added yet.
|
||||
- No roadmap feature has been added yet.
|
||||
@@ -0,0 +1,322 @@
|
||||
# KanbanGit Domain Model
|
||||
|
||||
## Purpose
|
||||
|
||||
This document defines the canonical domain concepts, relationships, and invariants for KanbanGit. It is intended to guide future Laravel models, migrations, policies, services, frontend types, and UI behavior.
|
||||
|
||||
## Core entities
|
||||
|
||||
### User
|
||||
|
||||
Represents an authenticated person inside the application.
|
||||
|
||||
Responsibilities:
|
||||
|
||||
- Owns direct project permissions
|
||||
- May belong to one or more teams
|
||||
- May appear in user-type ticket fields
|
||||
- Appears as the actor for worklog entries
|
||||
- May hold application-wide admin access
|
||||
|
||||
### Team
|
||||
|
||||
Represents a named group of users.
|
||||
|
||||
Responsibilities:
|
||||
|
||||
- Groups users for permission assignment
|
||||
- Carries project permissions that are inherited by its members
|
||||
|
||||
### Permission
|
||||
|
||||
Represents an action grant.
|
||||
|
||||
Permission scopes:
|
||||
|
||||
- Global admin access for application-wide administration
|
||||
- Project-scoped `create`
|
||||
- Project-scoped `view`
|
||||
- Project-scoped `edit`
|
||||
- Project-scoped `delete`
|
||||
|
||||
Assignment rules:
|
||||
|
||||
- Permissions may be assigned directly to a user
|
||||
- Permissions may be assigned to a team
|
||||
- A user's effective permissions are the union of direct permissions and team-inherited permissions
|
||||
|
||||
### Project
|
||||
|
||||
Represents the primary organizational boundary for workflow configuration and tickets.
|
||||
|
||||
Required properties:
|
||||
|
||||
- Name
|
||||
- Project key
|
||||
|
||||
Owns:
|
||||
|
||||
- Board columns
|
||||
- Ticket type definitions
|
||||
- Ticket priority definitions
|
||||
- Ticket field definitions
|
||||
- Ticket link type definitions
|
||||
- Tickets
|
||||
- Repository connections
|
||||
|
||||
### BoardColumn
|
||||
|
||||
Represents one configurable column on a project's board.
|
||||
|
||||
Required properties:
|
||||
|
||||
- Project
|
||||
- Label
|
||||
- Position
|
||||
|
||||
Behavior:
|
||||
|
||||
- Defines a valid board status
|
||||
- Controls board ordering through its position
|
||||
|
||||
### Ticket
|
||||
|
||||
Represents a project work item.
|
||||
|
||||
Required properties:
|
||||
|
||||
- Project
|
||||
- Ticket key
|
||||
- Sequence index
|
||||
- Title
|
||||
- Description
|
||||
- Acceptance criteria
|
||||
- Status context
|
||||
- Type
|
||||
- Priority
|
||||
|
||||
Optional properties:
|
||||
|
||||
- Parent ticket
|
||||
- Block comment
|
||||
|
||||
Associated concepts:
|
||||
|
||||
- Custom field values based on project field definitions
|
||||
- Ticket links
|
||||
- Worklog entries
|
||||
- Future branch references
|
||||
- Future pull request references
|
||||
|
||||
### TicketType
|
||||
|
||||
Represents a project-specific ticket type label.
|
||||
|
||||
Required properties:
|
||||
|
||||
- Project
|
||||
- Label
|
||||
- System key
|
||||
- Is built-in
|
||||
|
||||
Rules:
|
||||
|
||||
- Every project has built-in `Task` and `Parent` ticket types
|
||||
- Built-in types cannot be deleted
|
||||
- Built-in types may be renamed for display
|
||||
- Additional custom ticket types may be added per project
|
||||
|
||||
### TicketPriority
|
||||
|
||||
Represents a project-specific priority label.
|
||||
|
||||
Required properties:
|
||||
|
||||
- Project
|
||||
- Label
|
||||
- Position
|
||||
|
||||
### TicketFieldDefinition
|
||||
|
||||
Represents one configurable field definition for tickets in a project.
|
||||
|
||||
Required properties:
|
||||
|
||||
- Project
|
||||
- Label
|
||||
- Field type
|
||||
|
||||
Initial field types:
|
||||
|
||||
- User
|
||||
- Number
|
||||
|
||||
Future-safe expectation:
|
||||
|
||||
- The field type system is extensible
|
||||
|
||||
### TicketLinkType
|
||||
|
||||
Represents a project-specific label for linking tickets.
|
||||
|
||||
Required properties:
|
||||
|
||||
- Project
|
||||
- Label
|
||||
|
||||
### TicketLink
|
||||
|
||||
Represents a relationship between two tickets.
|
||||
|
||||
Required properties:
|
||||
|
||||
- Source ticket
|
||||
- Target ticket
|
||||
- Link type
|
||||
|
||||
Behavior:
|
||||
|
||||
- Tickets expose linked tickets as a list
|
||||
- The first documented product version only requires label-based linking
|
||||
|
||||
### WorklogEntry
|
||||
|
||||
Represents one audit-trail record for a ticket change.
|
||||
|
||||
Required properties:
|
||||
|
||||
- Ticket
|
||||
- Actor user
|
||||
- Change type
|
||||
- Change summary
|
||||
- Timestamp
|
||||
|
||||
### RepositoryConnection
|
||||
|
||||
Represents a project-level external repository configuration.
|
||||
|
||||
Required properties:
|
||||
|
||||
- Project
|
||||
- Provider
|
||||
- Repository identifier
|
||||
|
||||
Initial provider:
|
||||
|
||||
- Gitea
|
||||
|
||||
Future providers:
|
||||
|
||||
- GitHub
|
||||
- GitLab
|
||||
|
||||
### BranchReference
|
||||
|
||||
Represents a branch associated with a ticket through a repository connection.
|
||||
|
||||
Required properties:
|
||||
|
||||
- Ticket
|
||||
- Repository connection
|
||||
- Branch name
|
||||
|
||||
### PullRequestReference
|
||||
|
||||
Represents a pull request associated with a ticket through a repository connection.
|
||||
|
||||
Required properties:
|
||||
|
||||
- Ticket
|
||||
- Repository connection
|
||||
- Pull request identifier
|
||||
- Pull request title
|
||||
|
||||
## Relationships
|
||||
|
||||
- A user may belong to many teams.
|
||||
- A team may contain many users.
|
||||
- A project has many board columns.
|
||||
- A project has many tickets.
|
||||
- A project has many ticket type definitions.
|
||||
- A project has many priority definitions.
|
||||
- A project has many field definitions.
|
||||
- A project has many link type definitions.
|
||||
- A project has many repository connections.
|
||||
- A ticket belongs to exactly one project.
|
||||
- A ticket may have zero or one parent ticket.
|
||||
- A ticket may have many child tickets.
|
||||
- A ticket may have many worklog entries.
|
||||
- A ticket may have many links to other tickets.
|
||||
- A ticket may have many future branch references.
|
||||
- A ticket may have many future pull request references.
|
||||
|
||||
## Invariants
|
||||
|
||||
### Project key and ticket key
|
||||
|
||||
- Project key length must not exceed 5 characters.
|
||||
- Project key is normalized to uppercase.
|
||||
- Project key must be unique across the application.
|
||||
- Ticket key format is `PROJECTKEY-INDEX`.
|
||||
- `INDEX` is unique within a project and increases monotonically.
|
||||
- Ticket key is immutable after creation.
|
||||
|
||||
### Ticket lifecycle
|
||||
|
||||
- Every new ticket starts in the backlog.
|
||||
- A ticket appears on the board only when assigned to a board column.
|
||||
- Board column assignment must belong to the same project as the ticket.
|
||||
|
||||
### Ticket hierarchy
|
||||
|
||||
- A ticket may reference only one parent ticket.
|
||||
- A parent reference is optional.
|
||||
- Only a ticket whose type is `Parent` may be used as a parent target.
|
||||
- A `Task` ticket may have a parent but may not be the parent of another ticket.
|
||||
- Any custom non-`Parent` type may have a parent but may not be the parent of another ticket.
|
||||
- A `Parent` ticket may itself have a parent, enabling nested parent trees.
|
||||
|
||||
### Ticket metadata
|
||||
|
||||
- Title is required and not unique.
|
||||
- Description is part of the ticket record.
|
||||
- Acceptance criteria is part of the ticket record.
|
||||
- Priority must be one of the project's configured priority definitions.
|
||||
- Type must be one of the project's configured ticket type definitions.
|
||||
- Custom field values must conform to the selected field definition type.
|
||||
|
||||
### Blocked state
|
||||
|
||||
- A blocked ticket requires a non-empty comment.
|
||||
- Blocked state must be reflected in board presentation.
|
||||
|
||||
### Worklog
|
||||
|
||||
- Every ticket change creates a corresponding worklog entry.
|
||||
- Every worklog entry records the acting user.
|
||||
|
||||
### Permission inheritance
|
||||
|
||||
- Effective project permissions are evaluated per project.
|
||||
- Direct user permissions and inherited team permissions are cumulative.
|
||||
- Global admin access is evaluated separately from project permissions.
|
||||
|
||||
### Git references
|
||||
|
||||
- Branch and pull request matching is based on ticket-key-prefixed names.
|
||||
- A reference is associated with a ticket when the branch name starts with that ticket's key.
|
||||
|
||||
## Canonical terminology
|
||||
|
||||
Use these terms consistently in future implementation work:
|
||||
|
||||
- `Project`
|
||||
- `Project Key`
|
||||
- `Ticket`
|
||||
- `Ticket Key`
|
||||
- `Board`
|
||||
- `Board Column`
|
||||
- `Backlog`
|
||||
- `Parent Ticket`
|
||||
- `Worklog Entry`
|
||||
- `Repository Connection`
|
||||
@@ -0,0 +1,272 @@
|
||||
# KanbanGit Product Specification
|
||||
|
||||
## Purpose
|
||||
|
||||
KanbanGit is a self-hostable project and workflow management application. Its initial product goal is to support project-based Kanban work management with configurable board structure, configurable ticket metadata, ticket hierarchy, auditability, and a future repository integration workflow.
|
||||
|
||||
This document describes the intended product behavior. It does not claim that these capabilities exist in the current fresh Laravel 13 starter application.
|
||||
|
||||
## Current implementation status
|
||||
|
||||
- The repository currently contains the default Laravel 13 + Inertia starter structure.
|
||||
- No Kanban, ticket, permission, team, project, or Git integration domain has been implemented yet.
|
||||
- This specification is the source of truth for the upcoming product implementation.
|
||||
|
||||
## Product goals
|
||||
|
||||
- Support multiple projects inside one self-hosted installation.
|
||||
- Provide a configurable board and backlog per project.
|
||||
- Support tickets with structured metadata, hierarchy, linking, blockers, and change history.
|
||||
- Support application administration and project-level access control.
|
||||
- Prepare the product for repository-aware workflows, starting with Gitea.
|
||||
|
||||
## Roles
|
||||
|
||||
### Platform admin
|
||||
|
||||
A platform admin can manage application-wide administrative settings and user administration. This role exists above project-level permissions.
|
||||
|
||||
### Project member
|
||||
|
||||
A project member may receive project permissions directly or through one or more teams. Project permissions are scoped to a single project.
|
||||
|
||||
## Project behavior
|
||||
|
||||
Each project must include the following product areas:
|
||||
|
||||
- Board
|
||||
- Backlog
|
||||
- Project settings
|
||||
- Ticket management
|
||||
- Future roadmap support
|
||||
|
||||
### Project creation
|
||||
|
||||
When a project is created, it must define:
|
||||
|
||||
- A project name
|
||||
- A project key
|
||||
|
||||
Project key rules:
|
||||
|
||||
- Maximum length: 5 characters
|
||||
- Automatically stored and displayed in uppercase
|
||||
- Unique across the entire application
|
||||
- Immutable after ticket creation begins, unless a future migration strategy is explicitly designed
|
||||
|
||||
The project key is used as the prefix for all ticket keys in that project.
|
||||
|
||||
## Board and backlog
|
||||
|
||||
Each project has one board and one backlog.
|
||||
|
||||
Board rules:
|
||||
|
||||
- The board supports any number of columns.
|
||||
- Board columns are configured in project settings.
|
||||
- Board columns define the valid in-board statuses for tickets.
|
||||
|
||||
Backlog rules:
|
||||
|
||||
- Every newly created ticket starts in the backlog.
|
||||
- A backlog ticket is not yet visible in the board columns.
|
||||
- When a ticket is assigned to a board column status, it appears on the board.
|
||||
- Tickets may move between backlog and board statuses according to future workflow rules.
|
||||
|
||||
## Roadmap
|
||||
|
||||
Roadmap support belongs to the intended product surface of a project, but it is currently out of scope for the first implementation phases.
|
||||
|
||||
## Ticket behavior
|
||||
|
||||
Tickets are the primary work items inside a project.
|
||||
|
||||
### Required ticket attributes
|
||||
|
||||
Every ticket must support:
|
||||
|
||||
- Immutable ticket key
|
||||
- Title
|
||||
- Description
|
||||
- Acceptance criteria
|
||||
- Status
|
||||
- Type
|
||||
- Priority
|
||||
- Optional parent ticket
|
||||
- Configurable project-defined field values
|
||||
- Links to other tickets
|
||||
- Blocked state with comment
|
||||
- Worklog
|
||||
- Future branch references
|
||||
- Future pull request references
|
||||
|
||||
### Ticket key
|
||||
|
||||
Ticket keys follow the format `PROJECTKEY-INDEX`.
|
||||
|
||||
Rules:
|
||||
|
||||
- `PROJECTKEY` is the uppercase project key.
|
||||
- `INDEX` is a monotonically increasing project-local integer sequence.
|
||||
- The full ticket key is immutable.
|
||||
- Ticket title is not unique.
|
||||
- Multiple tickets may share the same title, even within the same project.
|
||||
- The ticket key is the only guaranteed unique human-readable identifier for a ticket.
|
||||
|
||||
### Ticket status
|
||||
|
||||
Tickets support two status contexts:
|
||||
|
||||
- `Backlog`
|
||||
- One configured board column
|
||||
|
||||
Only tickets assigned to a board column appear on the board.
|
||||
|
||||
### Ticket type
|
||||
|
||||
Each project can configure its own ticket type labels in project settings. Two types must always exist:
|
||||
|
||||
- `Task`
|
||||
- `Parent`
|
||||
|
||||
Rules:
|
||||
|
||||
- `Task` and `Parent` are built-in types.
|
||||
- Built-in types cannot be deleted.
|
||||
- Built-in types may be renamed per project.
|
||||
- Additional custom types may be added per project.
|
||||
- Tickets of any type may have a parent ticket.
|
||||
- Only tickets of type `Parent` may act as the parent of another ticket.
|
||||
|
||||
### Ticket hierarchy
|
||||
|
||||
Hierarchy rules:
|
||||
|
||||
- A ticket may have zero or one parent ticket.
|
||||
- A parent ticket must be a ticket whose type is `Parent`.
|
||||
- A parent ticket may itself have a parent ticket.
|
||||
- This allows nested parent structures.
|
||||
- Parent tickets must show their child tickets in a list.
|
||||
- Nested child structures should be presented with indentation or another clear hierarchy indicator.
|
||||
|
||||
### Ticket priority
|
||||
|
||||
Each project defines its own list of priorities in project settings.
|
||||
|
||||
Rules:
|
||||
|
||||
- The available priority options are project-specific.
|
||||
- A ticket stores one priority value from the project's configured list.
|
||||
|
||||
### Configurable ticket fields
|
||||
|
||||
Each project may define additional ticket field definitions in project settings.
|
||||
|
||||
A field definition includes at least:
|
||||
|
||||
- Label
|
||||
- Type
|
||||
|
||||
Initial supported field-definition types include:
|
||||
|
||||
- User
|
||||
- Number
|
||||
|
||||
Examples:
|
||||
|
||||
- `Assignee` as a user field
|
||||
- `Driver` as a user field
|
||||
- `Reviewer` as a user field
|
||||
- `Reporter` as a user field
|
||||
- `Estimated Story Points` as a number field
|
||||
|
||||
The field system must be designed to support additional field types in the future.
|
||||
|
||||
### Ticket links
|
||||
|
||||
Tickets may be linked to other tickets.
|
||||
|
||||
Rules:
|
||||
|
||||
- Link types are project-configurable labels.
|
||||
- A linked ticket is represented as part of a ticket list on each side of the relationship.
|
||||
- The implementation may later distinguish directionality, but the first documented requirement is label-based ticket linking configured per project.
|
||||
|
||||
### Ticket blockers
|
||||
|
||||
Tickets can be marked as blocked.
|
||||
|
||||
Blocked rules:
|
||||
|
||||
- Blocking requires a comment.
|
||||
- Blocked tickets must be visually distinguished on the board.
|
||||
- The target visual language is a warning or danger style such as orange or red.
|
||||
|
||||
### Ticket worklog
|
||||
|
||||
Each ticket must have a worklog.
|
||||
|
||||
Worklog rules:
|
||||
|
||||
- The worklog records every change to the ticket.
|
||||
- Each worklog entry must record who performed the change.
|
||||
- The worklog is part of the canonical ticket history.
|
||||
|
||||
Expected worklog-triggering changes include:
|
||||
|
||||
- Ticket creation
|
||||
- Title, description, or acceptance criteria edits
|
||||
- Status changes
|
||||
- Type changes
|
||||
- Priority changes
|
||||
- Parent changes
|
||||
- Custom field value changes
|
||||
- Link changes
|
||||
- Blocked or unblocked state changes
|
||||
|
||||
## Permissions
|
||||
|
||||
The product must support both global administration and project-scoped permissions.
|
||||
|
||||
Global permission behavior:
|
||||
|
||||
- Platform admins can manage application-wide administrative settings.
|
||||
- Platform admins can manage users.
|
||||
|
||||
Project permission behavior:
|
||||
|
||||
- Project permissions include `create`, `view`, `edit`, and `delete`.
|
||||
- Project permissions may be assigned directly to users.
|
||||
- Project permissions may be assigned to teams.
|
||||
- Users inherit project permissions from their teams.
|
||||
|
||||
The full permission system is not implemented in this step, but the product must be built with this model in mind.
|
||||
|
||||
## Future Git integration
|
||||
|
||||
The next major feature after the Kanban foundation is Git provider integration.
|
||||
|
||||
Initial expectations:
|
||||
|
||||
- Project settings can store one or more repository connections.
|
||||
- The first supported provider is Gitea.
|
||||
- Later providers should include GitHub and potentially GitLab.
|
||||
- Tickets will later expose branch and pull request sections.
|
||||
|
||||
Ticket-to-Git matching rule:
|
||||
|
||||
- A branch or pull request belongs to a ticket when its branch name starts with the ticket key.
|
||||
|
||||
Example:
|
||||
|
||||
- Ticket key: `AUTH-42`
|
||||
- Matching branch: `AUTH-42-login-form`
|
||||
|
||||
## Explicitly out of scope for now
|
||||
|
||||
- Implementing roadmap features
|
||||
- Supporting GitHub or GitLab in the first Git integration step
|
||||
- Implementing the full permission and team management UI in this documentation step
|
||||
- Finalizing database schema details
|
||||
- Finalizing API contracts
|
||||
- Finalizing automation, notifications, or reporting features
|
||||
Reference in New Issue
Block a user