src/contains the extension source (TypeScript). Entry point issrc/extension.ts, with feature areas undersrc/commands/,src/redmine/,src/kanban/,src/timer/, andsrc/webviews/.test/hosts Vitest suites: unit tests intest/unit/, integration tests intest/integration/, and supporting fixtures/mocks intest/fixtures/andtest/mocks/.media/holds walkthrough content and assets used by the extension UI.docs/contains architecture notes, API references, and performance guidance.- Build output lands in
out/(generated byesbuild.cjs).
npm installinstalls dependencies and git hooks (scripts/install-hooks.sh).npm run compilebuilds the extension intoout/(production build).npm run watchruns the incremental build for local dev.npm run lintchecks code style with ESLint.npm run typecheckrunstsc --noEmit.npm testruns the Vitest suite once;npm run test:watchkeeps it running.npm run test:coverageruns tests with coverage;npm run ciruns lint + typecheck + coverage.npm run packagebuilds a VSIX package.npm run create-test-issuesseeds Redmine with test data for manual workflows.
- Formatting is enforced by Prettier (
tabWidth: 2, semicolons, trailing commas, LF line endings). - Linting is enforced by ESLint (
npm run lint). - Use descriptive, feature-based filenames consistent with existing modules (e.g.,
kanban-controller.ts,redmine-server.ts).
- Framework: Vitest (
vitest.config.ts). - Naming convention:
*.test.tsundertest/unit/ortest/integration/. - Add new tests near the related feature area and prefer unit coverage for utilities.
- Commit history favors short, imperative subjects (e.g., “Add …”, “Fix …”, “Move …”), no trailing period.
- Commit messages are validated: subject ≤ 50 chars, body lines ≤ 72 chars, blank line between subject/body.
- CONTRIBUTING expects
Type: descriptionwith types likeAdd,Fix,Feat,Chore,Docs,Test,Refactor,Revert. - PRs should be small and focused; add a
[Unreleased]entry toCHANGELOG.mdfor user-facing changes and discuss new features in GitHub Discussions first.
- The extension requires HTTPS and stores API keys in the OS keychain.
- When debugging API issues, use
Redmine: Show API Outputand include sanitized logs in issues.