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
21 changes: 21 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.{py,pyi}]
indent_size = 4

[*.{rs,toml}]
indent_size = 4

[*.md]
trim_trailing_whitespace = false

[Makefile]
indent_style = tab
110 changes: 110 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# Auto-detect text files and normalize line endings to LF on commit.
* text=auto eol=lf

# Shell scripts must keep LF.
*.sh text eol=lf
*.bash text eol=lf
*.zsh text eol=lf

# Windows scripts must keep CRLF.
*.bat text eol=crlf
*.cmd text eol=crlf
*.ps1 text eol=crlf

# Python: enforce LF.
*.py text eol=lf
*.pyi text eol=lf

# JS/TS/Web: enforce LF.
*.js text eol=lf
*.cjs text eol=lf
*.mjs text eol=lf
*.ts text eol=lf
*.tsx text eol=lf
*.jsx text eol=lf
*.vue text eol=lf
*.svelte text eol=lf
*.html text eol=lf
*.css text eol=lf
*.scss text eol=lf
*.less text eol=lf
*.json text eol=lf
*.json5 text eol=lf
*.jsonc text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
*.toml text eol=lf
*.md text eol=lf
*.mdx text eol=lf
*.xml text eol=lf
*.svg text eol=lf

# Rust: enforce LF.
*.rs text eol=lf

# C/C++/Go/Java/Kotlin/Swift: enforce LF.
*.c text eol=lf
*.cc text eol=lf
*.cpp text eol=lf
*.cxx text eol=lf
*.h text eol=lf
*.hpp text eol=lf
*.go text eol=lf
*.java text eol=lf
*.kt text eol=lf
*.kts text eol=lf
*.swift text eol=lf

# Lockfiles: keep as-is, no normalization.
*.lock -text
pnpm-lock.yaml -text
package-lock.json -text
yarn.lock -text
Cargo.lock -text
poetry.lock -text
uv.lock -text
composer.lock -text
Gemfile.lock -text

# Binary files: do not diff.
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.webp binary
*.ico binary
*.pdf binary
*.zip binary
*.tar binary
*.gz binary
*.tgz binary
*.7z binary
*.rar binary
*.woff binary
*.woff2 binary
*.eot binary
*.ttf binary
*.otf binary
*.mp4 binary
*.webm binary
*.mov binary
*.mp3 binary
*.wav binary
*.flac binary
*.ogg binary

# Linguist overrides: mark vendored / generated / docs correctly.
docs/* linguist-documentation
CHANGELOG.md linguist-documentation
CONTRIBUTING.md linguist-documentation
CODE_OF_CONDUCT.md linguist-documentation
SECURITY.md linguist-documentation
LICENSE linguist-vendored
.github/ linguist-documentation
*.min.js linguist-generated
*.min.css linguist-generated
*_pb2.py linguist-generated
*_pb2_grpc.py linguist-generated
/dist/ linguist-generated
/build/ linguist-generated
/node_modules/ linguist-vendored
12 changes: 12 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Code owners: auto-assign reviewers for pull requests.
# https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners

# Default owner for everything in the repo.
* @badhope

# Security-sensitive files get an explicit owner reminder.
/SECURITY.md @badhope
/.github/workflows/ @badhope
/.gitleaks.toml @badhope
/.github/dependabot.yml @badhope
/CODEOWNERS @badhope
89 changes: 89 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
name: Bug Report
description: Something is broken or behaving wrong.
title: "[bug]: "
labels: ["bug", "triage"]
assignees: []

body:
- type: markdown
attributes:
value: |
Thanks for taking the time. The more detail, the faster I can
reproduce and fix this.

- type: textarea
id: what
attributes:
label: What happened?
description: Clear, short description of the bug.
placeholder: "When I run `...`, I get `...` instead of `...`."
validations:
required: true

- type: textarea
id: repro
attributes:
label: Steps to reproduce
description: Numbered. Smallest example you can manage.
placeholder: |
1. Install with `...`
2. Run `...`
3. Open `...`
validations:
required: true

- type: textarea
id: expected
attributes:
label: Expected
validations:
required: true

- type: textarea
id: actual
attributes:
label: Actual (include logs / stack traces)
validations:
required: true

- type: input
id: version
attributes:
label: Version / commit
placeholder: "v1.2.3 or abcdef0"
validations:
required: true

- type: dropdown
id: where
attributes:
label: Where did you run it?
options:
- Local (macOS)
- Local (Linux)
- Local (Windows)
- Docker / container
- CI
- Cloud / VM
- Other
validations:
required: false

- type: dropdown
id: severity
attributes:
label: How bad?
options:
- Low (cosmetic / minor inconvenience)
- Medium (broken feature, workaround exists)
- High (broken feature, no workaround)
- Critical (data loss, security, outage)
validations:
required: false

- type: textarea
id: context
attributes:
label: Anything else
validations:
required: false
55 changes: 55 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Feature Request
description: Suggest a new feature or improvement.
title: "[feat]: "
labels: ["enhancement", "triage"]
assignees: []

body:
- type: markdown
attributes:
value: |
Describe the **problem** first, then the proposed **solution**.
The "why" matters more than the "how".

- type: textarea
id: problem
attributes:
label: The problem
description: What's painful? What can't you do today?
placeholder: "Right now I have to ...; this is annoying because ..."
validations:
required: true

- type: textarea
id: solution
attributes:
label: What I want
description: The feature, change, or improvement.
validations:
required: true

- type: textarea
id: alternatives
attributes:
label: What I tried / considered
validations:
required: false

- type: textarea
id: scope
attributes:
label: Scope
description: Does this change user-facing behavior, the API, the data model, or the build? Any backward-compat risk?
validations:
required: false

- type: dropdown
id: willingness
attributes:
label: My willingness
options:
- I'd send a PR for this
- I can help test / review
- I can only describe the use case
validations:
required: false
65 changes: 16 additions & 49 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,60 +1,27 @@
# Pull Request
## What

感谢你为 TaskFlow 做出贡献!🎉
<!-- One line: what this PR does -->

## 📋 描述
## Why

清晰、简洁地描述这个 PR 做了什么。
<!-- The reason. What problem does this fix / what value does it add? -->

## 🔗 关联 Issue
## How

- 关闭 / 关联: #issue_number
- 关联 Discussion: #discussion_number (如有)
<!-- Approach, breaking changes, anything weird you did -->

## 🧪 测试
## Tested

描述你如何测试这些更改:
<!-- How you tested. If you didn't, say so and tell me why -->

- [ ] 单元测试通过 (`npm test`,如有)
- [ ] 手动测试 Web (`npm run web`)
- [ ] 手动测试 Android (`npm run android`)
- [ ] 手动测试 iOS (`npm run ios`)
- [ ] TypeScript 校验通过 (`npm run typecheck`)
## Checklist

## 📸 截图 / 录屏
- [ ] I have read [`CONTRIBUTING.md`](./CONTRIBUTING.md)
- [ ] Tests pass locally (and CI is green)
- [ ] I didn't add any new linter / typecheck warnings
- [ ] I didn't commit any secrets, build output, or large binaries
- [ ] I added a `CHANGELOG.md` entry under "Unreleased" if it matters

如果 PR 包含 UI 改动,请附上截图或录屏。
## Screenshots / Logs

### Before
(改动前)

### After
(改动后)

## 📋 改动类型

请勾选适用的选项:

- [ ] 🐛 Bug fix (非破坏性修复)
- [ ] ✨ New feature (非破坏性新功能)
- [ ] 💥 Breaking change (会破坏现有功能的修改)
- [ ] 📝 Documentation update
- [ ] 🎨 Style/UI (无功能影响)
- [ ] ♻️ Refactor (无功能影响的代码重构)
- [ ] ⚡ Performance improvement
- [ ] ✅ Test (添加或修改测试)
- [ ] 🔧 Build/CI (构建或 CI 改动)

## 📋 清单

- [ ] 我的代码遵循项目的代码风格
- [ ] 我已经自我审查了代码
- [ ] 我在必要的部分添加了注释(特别是难以理解的代码)
- [ ] 我更新了相关文档
- [ ] 我的改动没有产生新的警告
- [ ] 我添加了测试来证明我的修复/功能有效
- [ ] 新的和现有的单元测试都通过

## 📋 额外说明

任何需要审查者特别关注的地方、设计决策、权衡等。
<!-- Drag in images for UI changes. Paste (redacted) logs for runtime changes. -->
Loading
Loading