timsquad 2.1.0 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +288 -0
- package/README.md +170 -763
- package/dist/commands/compile.d.ts +3 -0
- package/dist/commands/compile.d.ts.map +1 -0
- package/dist/commands/compile.js +170 -0
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/daemon.d.ts +7 -0
- package/dist/commands/daemon.d.ts.map +1 -0
- package/dist/commands/daemon.js +229 -0
- package/dist/commands/daemon.js.map +1 -0
- package/dist/commands/feedback.d.ts +9 -0
- package/dist/commands/feedback.d.ts.map +1 -1
- package/dist/commands/feedback.js +235 -14
- package/dist/commands/feedback.js.map +1 -1
- package/dist/commands/full.js +2 -2
- package/dist/commands/full.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +118 -22
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/knowledge.d.ts +3 -0
- package/dist/commands/knowledge.d.ts.map +1 -0
- package/dist/commands/knowledge.js +316 -0
- package/dist/commands/knowledge.js.map +1 -0
- package/dist/commands/log.d.ts +27 -0
- package/dist/commands/log.d.ts.map +1 -1
- package/dist/commands/log.js +965 -0
- package/dist/commands/log.js.map +1 -1
- package/dist/commands/meta-index.d.ts +3 -0
- package/dist/commands/meta-index.d.ts.map +1 -0
- package/dist/commands/meta-index.js +401 -0
- package/dist/commands/meta-index.js.map +1 -0
- package/dist/commands/metrics.d.ts.map +1 -1
- package/dist/commands/metrics.js +239 -4
- package/dist/commands/metrics.js.map +1 -1
- package/dist/commands/retro.js +154 -6
- package/dist/commands/retro.js.map +1 -1
- package/dist/commands/skills.d.ts +12 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +231 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/upgrade.d.ts +8 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +292 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/workflow.d.ts +3 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/commands/workflow.js +607 -0
- package/dist/commands/workflow.js.map +1 -0
- package/dist/daemon/context-writer.d.ts +16 -0
- package/dist/daemon/context-writer.d.ts.map +1 -0
- package/dist/daemon/context-writer.js +35 -0
- package/dist/daemon/context-writer.js.map +1 -0
- package/dist/daemon/entry.d.ts +7 -0
- package/dist/daemon/entry.d.ts.map +1 -0
- package/dist/daemon/entry.js +17 -0
- package/dist/daemon/entry.js.map +1 -0
- package/dist/daemon/event-queue.d.ts +52 -0
- package/dist/daemon/event-queue.d.ts.map +1 -0
- package/dist/daemon/event-queue.js +255 -0
- package/dist/daemon/event-queue.js.map +1 -0
- package/dist/daemon/file-watcher.d.ts +19 -0
- package/dist/daemon/file-watcher.d.ts.map +1 -0
- package/dist/daemon/file-watcher.js +87 -0
- package/dist/daemon/file-watcher.js.map +1 -0
- package/dist/daemon/index.d.ts +29 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +296 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/jsonl-watcher.d.ts +49 -0
- package/dist/daemon/jsonl-watcher.d.ts.map +1 -0
- package/dist/daemon/jsonl-watcher.js +258 -0
- package/dist/daemon/jsonl-watcher.js.map +1 -0
- package/dist/daemon/meta-cache.d.ts +63 -0
- package/dist/daemon/meta-cache.d.ts.map +1 -0
- package/dist/daemon/meta-cache.js +249 -0
- package/dist/daemon/meta-cache.js.map +1 -0
- package/dist/daemon/session-state.d.ts +19 -0
- package/dist/daemon/session-state.d.ts.map +1 -0
- package/dist/daemon/session-state.js +132 -0
- package/dist/daemon/session-state.js.map +1 -0
- package/dist/daemon/shutdown.d.ts +21 -0
- package/dist/daemon/shutdown.d.ts.map +1 -0
- package/dist/daemon/shutdown.js +164 -0
- package/dist/daemon/shutdown.js.map +1 -0
- package/dist/index.js +24 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-composer.d.ts +38 -0
- package/dist/lib/agent-composer.d.ts.map +1 -0
- package/dist/lib/agent-composer.js +128 -0
- package/dist/lib/agent-composer.js.map +1 -0
- package/dist/lib/agent-generator.d.ts +22 -0
- package/dist/lib/agent-generator.d.ts.map +1 -0
- package/dist/lib/agent-generator.js +150 -0
- package/dist/lib/agent-generator.js.map +1 -0
- package/dist/lib/ast-parser.d.ts +11 -0
- package/dist/lib/ast-parser.d.ts.map +1 -0
- package/dist/lib/ast-parser.js +282 -0
- package/dist/lib/ast-parser.js.map +1 -0
- package/dist/lib/compile-rules.d.ts +66 -0
- package/dist/lib/compile-rules.d.ts.map +1 -0
- package/dist/lib/compile-rules.js +114 -0
- package/dist/lib/compile-rules.js.map +1 -0
- package/dist/lib/compiler.d.ts +105 -0
- package/dist/lib/compiler.d.ts.map +1 -0
- package/dist/lib/compiler.js +368 -0
- package/dist/lib/compiler.js.map +1 -0
- package/dist/lib/config.d.ts +7 -2
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +34 -3
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/meta-index.d.ts +19 -0
- package/dist/lib/meta-index.d.ts.map +1 -0
- package/dist/lib/meta-index.js +573 -0
- package/dist/lib/meta-index.js.map +1 -0
- package/dist/lib/project.js +1 -1
- package/dist/lib/project.js.map +1 -1
- package/dist/lib/skill-generator.d.ts +32 -0
- package/dist/lib/skill-generator.d.ts.map +1 -0
- package/dist/lib/skill-generator.js +187 -0
- package/dist/lib/skill-generator.js.map +1 -0
- package/dist/lib/template.d.ts +16 -2
- package/dist/lib/template.d.ts.map +1 -1
- package/dist/lib/template.js +115 -20
- package/dist/lib/template.js.map +1 -1
- package/dist/lib/ui-index.d.ts +12 -0
- package/dist/lib/ui-index.d.ts.map +1 -0
- package/dist/lib/ui-index.js +239 -0
- package/dist/lib/ui-index.js.map +1 -0
- package/dist/lib/ui-parser.d.ts +12 -0
- package/dist/lib/ui-parser.d.ts.map +1 -0
- package/dist/lib/ui-parser.js +472 -0
- package/dist/lib/ui-parser.js.map +1 -0
- package/dist/lib/update-check.d.ts +6 -0
- package/dist/lib/update-check.d.ts.map +1 -0
- package/dist/lib/update-check.js +121 -0
- package/dist/lib/update-check.js.map +1 -0
- package/dist/lib/upgrade-backup.d.ts +33 -0
- package/dist/lib/upgrade-backup.d.ts.map +1 -0
- package/dist/lib/upgrade-backup.js +101 -0
- package/dist/lib/upgrade-backup.js.map +1 -0
- package/dist/lib/version.d.ts +19 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +35 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/lib/workflow-state.d.ts +48 -0
- package/dist/lib/workflow-state.d.ts.map +1 -0
- package/dist/lib/workflow-state.js +67 -0
- package/dist/lib/workflow-state.js.map +1 -0
- package/dist/types/config.d.ts +103 -2
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +184 -9
- package/dist/types/config.js.map +1 -1
- package/dist/types/feedback.d.ts +7 -0
- package/dist/types/feedback.d.ts.map +1 -1
- package/dist/types/feedback.js +1 -1
- package/dist/types/feedback.js.map +1 -1
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/meta-index.d.ts +146 -0
- package/dist/types/meta-index.d.ts.map +1 -0
- package/dist/types/meta-index.js +7 -0
- package/dist/types/meta-index.js.map +1 -0
- package/dist/types/project.d.ts +19 -3
- package/dist/types/project.d.ts.map +1 -1
- package/dist/types/project.js +23 -0
- package/dist/types/project.js.map +1 -1
- package/dist/types/task-log.d.ts +208 -0
- package/dist/types/task-log.d.ts.map +1 -0
- package/dist/types/task-log.js +6 -0
- package/dist/types/task-log.js.map +1 -0
- package/dist/types/ui-meta.d.ts +118 -0
- package/dist/types/ui-meta.d.ts.map +1 -0
- package/dist/types/ui-meta.js +7 -0
- package/dist/types/ui-meta.js.map +1 -0
- package/package.json +12 -4
- package/templates/base/agents/base/tsq-architect.md +68 -0
- package/templates/base/agents/base/tsq-dba.md +56 -0
- package/templates/base/agents/base/tsq-designer.md +72 -0
- package/templates/base/agents/base/tsq-developer.md +67 -0
- package/templates/base/agents/base/tsq-qa.md +55 -0
- package/templates/base/agents/base/tsq-security.md +65 -0
- package/templates/base/agents/overlays/domain/general-web/_common.md +11 -0
- package/templates/base/agents/overlays/domain/mobile/_common.md +13 -0
- package/templates/base/agents/overlays/platform/claude-code.md +12 -0
- package/templates/base/config.template.yaml +213 -0
- package/templates/base/knowledge/checklists/accessibility.md +37 -0
- package/templates/base/knowledge/checklists/architecture-review.md +28 -0
- package/templates/base/knowledge/checklists/database-standards.md +84 -0
- package/templates/base/knowledge/checklists/design-reference.md +97 -0
- package/templates/base/knowledge/checklists/security.md +50 -0
- package/templates/base/knowledge/checklists/ssot-validation.md +19 -0
- package/templates/base/knowledge/domains/_template.md +16 -0
- package/templates/base/knowledge/platforms/_template.md +16 -0
- package/templates/base/knowledge/templates/sequence-report.md +44 -0
- package/templates/base/knowledge/templates/task-result.md +105 -0
- package/templates/base/skills/_template/SKILL.md +59 -0
- package/templates/base/skills/_template/references/_template.md +35 -0
- package/templates/base/skills/_template/rules/_sections.md +34 -0
- package/templates/base/skills/_template/rules/_template.md +32 -0
- package/templates/base/skills/_template/scripts/_template.sh +31 -0
- package/templates/base/skills/architecture/SKILL.md +54 -0
- package/templates/base/skills/architecture/references/adr-template.md +50 -0
- package/templates/base/skills/architecture/references/api-design.md +64 -0
- package/templates/base/skills/backend/node/SKILL.md +81 -0
- package/templates/base/skills/backend/node/rules/async-patterns.md +81 -0
- package/templates/base/skills/backend/node/rules/deployment.md +33 -0
- package/templates/base/skills/backend/node/rules/env-config.md +41 -0
- package/templates/base/skills/backend/node/rules/error-handling.md +83 -0
- package/templates/base/skills/backend/node/rules/hono-app-setup.md +98 -0
- package/templates/base/skills/backend/node/rules/jwt-auth.md +76 -0
- package/templates/base/skills/backend/node/rules/middleware.md +56 -0
- package/templates/base/skills/backend/node/rules/testing.md +82 -0
- package/templates/base/skills/coding/SKILL.md +47 -0
- package/templates/base/skills/coding/rules/patterns.md +81 -0
- package/templates/base/skills/controller/SKILL.md +111 -0
- package/templates/base/skills/controller/references/README.md +35 -0
- package/templates/base/skills/controller/rules/README.md +18 -0
- package/templates/base/skills/database/SKILL.md +98 -0
- package/templates/base/skills/database/prisma/SKILL.md +57 -0
- package/templates/base/skills/database/prisma/rules/queries.md +133 -0
- package/templates/base/skills/database/prisma/rules/schema-design.md +80 -0
- package/templates/base/skills/frontend/nextjs/SKILL.md +59 -0
- package/templates/base/skills/frontend/nextjs/rules/app-router.md +138 -0
- package/templates/base/skills/frontend/react/SKILL.md +86 -0
- package/templates/base/skills/frontend/react/rules/_sections.md +88 -0
- package/templates/base/skills/frontend/react/rules/anti-patterns.md +67 -0
- package/templates/base/skills/frontend/react/rules/async-api-routes.md +38 -0
- package/templates/base/skills/frontend/react/rules/async-defer-await.md +80 -0
- package/templates/base/skills/frontend/react/rules/async-dependencies.md +36 -0
- package/templates/base/skills/frontend/react/rules/async-parallel.md +28 -0
- package/templates/base/skills/frontend/react/rules/async-suspense-boundaries.md +99 -0
- package/templates/base/skills/frontend/react/rules/bundle-barrel-imports.md +59 -0
- package/templates/base/skills/frontend/react/rules/bundle-defer-third-party.md +49 -0
- package/templates/base/skills/frontend/react/rules/bundle-dynamic-imports.md +35 -0
- package/templates/base/skills/frontend/react/rules/component-conventions.md +74 -0
- package/templates/base/skills/frontend/react/rules/js-combine-iterations.md +32 -0
- package/templates/base/skills/frontend/react/rules/js-early-exit.md +50 -0
- package/templates/base/skills/frontend/react/rules/js-index-maps.md +37 -0
- package/templates/base/skills/frontend/react/rules/js-set-map-lookups.md +24 -0
- package/templates/base/skills/frontend/react/rules/rendering-conditional-render.md +40 -0
- package/templates/base/skills/frontend/react/rules/rendering-content-visibility.md +38 -0
- package/templates/base/skills/frontend/react/rules/rendering-hoist-jsx.md +46 -0
- package/templates/base/skills/frontend/react/rules/rerender-defer-reads.md +39 -0
- package/templates/base/skills/frontend/react/rules/rerender-derived-state.md +29 -0
- package/templates/base/skills/frontend/react/rules/rerender-memo.md +44 -0
- package/templates/base/skills/frontend/react/rules/rerender-transitions.md +40 -0
- package/templates/base/skills/frontend/react/rules/server-after-nonblocking.md +73 -0
- package/templates/base/skills/frontend/react/rules/server-cache-react.md +26 -0
- package/templates/base/skills/frontend/react/rules/server-parallel-fetching.md +79 -0
- package/templates/base/skills/frontend/react/rules/state-location.md +55 -0
- package/templates/base/skills/methodology/bdd/SKILL.md +69 -0
- package/templates/base/skills/methodology/bdd/rules/gherkin-patterns.md +113 -0
- package/templates/base/skills/methodology/ddd/SKILL.md +74 -0
- package/templates/base/skills/methodology/ddd/rules/strategic-patterns.md +98 -0
- package/templates/base/skills/methodology/debugging/SKILL.md +60 -0
- package/templates/base/skills/methodology/debugging/references/root-cause-tracing.md +84 -0
- package/templates/base/skills/methodology/tdd/SKILL.md +66 -0
- package/templates/base/skills/methodology/tdd/rules/real-world-example.md +88 -0
- package/templates/base/skills/methodology/tdd/rules/techniques.md +185 -0
- package/templates/base/skills/mobile/dart/SKILL.md +69 -0
- package/templates/base/skills/mobile/dart/rules/async-patterns.md +112 -0
- package/templates/base/skills/mobile/dart/rules/code-style.md +96 -0
- package/templates/base/skills/mobile/dart/rules/null-safety.md +84 -0
- package/templates/base/skills/mobile/dart/rules/type-system.md +111 -0
- package/templates/base/skills/mobile/flutter/SKILL.md +89 -0
- package/templates/base/skills/mobile/flutter/ci-cd/SKILL.md +82 -0
- package/templates/base/skills/mobile/flutter/ci-cd/references/ci-cd-pipeline.md +314 -0
- package/templates/base/skills/mobile/flutter/ci-cd/rules/code-signing.md +106 -0
- package/templates/base/skills/mobile/flutter/ci-cd/rules/codemagic-setup.md +116 -0
- package/templates/base/skills/mobile/flutter/ci-cd/rules/fastlane-setup.md +105 -0
- package/templates/base/skills/mobile/flutter/ci-cd/rules/github-actions.md +112 -0
- package/templates/base/skills/mobile/flutter/ci-cd/rules/store-deployment.md +106 -0
- package/templates/base/skills/mobile/flutter/ci-cd/rules/versioning.md +107 -0
- package/templates/base/skills/mobile/flutter/i18n/SKILL.md +78 -0
- package/templates/base/skills/mobile/flutter/i18n/references/i18n-architecture.md +225 -0
- package/templates/base/skills/mobile/flutter/i18n/rules/arb-files.md +182 -0
- package/templates/base/skills/mobile/flutter/i18n/rules/locale-switching.md +226 -0
- package/templates/base/skills/mobile/flutter/i18n/rules/localization-setup.md +137 -0
- package/templates/base/skills/mobile/flutter/i18n/rules/plural-gender.md +159 -0
- package/templates/base/skills/mobile/flutter/i18n/rules/text-direction.md +199 -0
- package/templates/base/skills/mobile/flutter/monitoring/SKILL.md +81 -0
- package/templates/base/skills/mobile/flutter/monitoring/references/monitoring-architecture.md +269 -0
- package/templates/base/skills/mobile/flutter/monitoring/rules/analytics.md +227 -0
- package/templates/base/skills/mobile/flutter/monitoring/rules/crashlytics-setup.md +195 -0
- package/templates/base/skills/mobile/flutter/monitoring/rules/logging.md +258 -0
- package/templates/base/skills/mobile/flutter/monitoring/rules/performance-monitoring.md +248 -0
- package/templates/base/skills/mobile/flutter/monitoring/rules/sentry-integration.md +249 -0
- package/templates/base/skills/mobile/flutter/networking/SKILL.md +88 -0
- package/templates/base/skills/mobile/flutter/networking/references/api-client-architecture.md +305 -0
- package/templates/base/skills/mobile/flutter/networking/rules/caching.md +212 -0
- package/templates/base/skills/mobile/flutter/networking/rules/connectivity.md +213 -0
- package/templates/base/skills/mobile/flutter/networking/rules/dio-setup.md +159 -0
- package/templates/base/skills/mobile/flutter/networking/rules/error-handling.md +209 -0
- package/templates/base/skills/mobile/flutter/networking/rules/interceptors.md +205 -0
- package/templates/base/skills/mobile/flutter/networking/rules/retrofit-patterns.md +194 -0
- package/templates/base/skills/mobile/flutter/push-notifications/SKILL.md +87 -0
- package/templates/base/skills/mobile/flutter/push-notifications/references/notification-architecture.md +340 -0
- package/templates/base/skills/mobile/flutter/push-notifications/references/platform-setup.md +286 -0
- package/templates/base/skills/mobile/flutter/push-notifications/rules/background-processing.md +308 -0
- package/templates/base/skills/mobile/flutter/push-notifications/rules/deep-linking.md +217 -0
- package/templates/base/skills/mobile/flutter/push-notifications/rules/fcm-setup.md +164 -0
- package/templates/base/skills/mobile/flutter/push-notifications/rules/local-notifications.md +262 -0
- package/templates/base/skills/mobile/flutter/push-notifications/rules/notification-handling.md +210 -0
- package/templates/base/skills/mobile/flutter/push-notifications/rules/notification-permissions.md +246 -0
- package/templates/base/skills/mobile/flutter/push-notifications/rules/rich-notifications.md +320 -0
- package/templates/base/skills/mobile/flutter/references/freezed-patterns.md +162 -0
- package/templates/base/skills/mobile/flutter/references/project-structure.md +170 -0
- package/templates/base/skills/mobile/flutter/rules/animations.md +112 -0
- package/templates/base/skills/mobile/flutter/rules/architecture.md +121 -0
- package/templates/base/skills/mobile/flutter/rules/navigation-routing.md +117 -0
- package/templates/base/skills/mobile/flutter/rules/performance.md +112 -0
- package/templates/base/skills/mobile/flutter/rules/platform-adaptive.md +126 -0
- package/templates/base/skills/mobile/flutter/rules/state-management.md +110 -0
- package/templates/base/skills/mobile/flutter/rules/testing.md +131 -0
- package/templates/base/skills/mobile/flutter/rules/widget-conventions.md +122 -0
- package/templates/base/skills/mobile/flutter/security/SKILL.md +86 -0
- package/templates/base/skills/mobile/flutter/security/references/mobile-security-checklist.md +168 -0
- package/templates/base/skills/mobile/flutter/security/rules/api-key-protection.md +206 -0
- package/templates/base/skills/mobile/flutter/security/rules/authentication.md +248 -0
- package/templates/base/skills/mobile/flutter/security/rules/data-protection.md +271 -0
- package/templates/base/skills/mobile/flutter/security/rules/obfuscation.md +213 -0
- package/templates/base/skills/mobile/flutter/security/rules/secure-storage.md +171 -0
- package/templates/base/skills/mobile/flutter/security/rules/ssl-pinning.md +197 -0
- package/templates/base/skills/planning/SKILL.md +58 -0
- package/templates/base/skills/planning/references/prd-guide.md +47 -0
- package/templates/base/skills/planning/references/requirements-guide.md +46 -0
- package/templates/base/skills/prompt-engineering/SKILL.md +103 -0
- package/templates/base/skills/retrospective/SKILL.md +102 -0
- package/templates/base/skills/security/SKILL.md +55 -0
- package/templates/base/skills/security/rules/owasp-examples.md +119 -0
- package/templates/base/skills/security/scripts/check-secrets.sh +55 -0
- package/templates/base/skills/testing/SKILL.md +63 -0
- package/templates/base/skills/testing/references/testing-patterns.md +103 -0
- package/templates/base/skills/tsq-protocol/SKILL.md +51 -0
- package/templates/base/skills/typescript/SKILL.md +67 -0
- package/templates/base/skills/typescript/rules/type-patterns.md +135 -0
- package/templates/base/skills/typescript/rules/utility-types.md +76 -0
- package/templates/base/skills/ui-design/SKILL.md +70 -0
- package/templates/{common → base}/timsquad/feedback/routing-rules.yaml +1 -1
- package/templates/{common → base}/timsquad/retrospective/metrics/metrics-schema.json +46 -1
- package/templates/platforms/claude-code/CLAUDE.md.template +89 -0
- package/templates/platforms/claude-code/rules/adr-rules.md +32 -0
- package/templates/platforms/claude-code/rules/feedback-routing.md +18 -0
- package/templates/platforms/claude-code/rules/phase-management.md +23 -0
- package/templates/platforms/claude-code/rules/reporting-format.md +26 -0
- package/templates/platforms/claude-code/rules/sequence-management.md +72 -0
- package/templates/platforms/claude-code/rules/workspace-sync.md +33 -0
- package/templates/platforms/claude-code/scripts/completion-guard.sh +57 -0
- package/templates/platforms/claude-code/scripts/phase-guard.sh +79 -0
- package/templates/platforms/claude-code/settings.json +98 -0
- package/templates/project-types/api-backend/config.yaml +227 -0
- package/templates/project-types/api-backend/process/workflow.xml +214 -0
- package/templates/project-types/fintech/config.yaml +151 -0
- package/templates/project-types/fintech/process/workflow.xml +316 -0
- package/templates/project-types/infra/config.yaml +327 -0
- package/templates/project-types/infra/process/workflow.xml +296 -0
- package/templates/project-types/mobile-app/config.yaml +123 -0
- package/templates/project-types/mobile-app/process/workflow.xml +191 -0
- package/templates/project-types/platform/config.yaml +254 -0
- package/templates/project-types/platform/process/workflow.xml +254 -0
- package/templates/project-types/web-app/config.yaml +198 -0
- package/templates/project-types/web-app/process/workflow.xml +210 -0
- package/templates/project-types/web-service/config.yaml +136 -0
- package/templates/project-types/web-service/process/workflow.xml +184 -0
- package/templates/common/CLAUDE.md.template +0 -254
- package/templates/common/claude/agents/tsq-dba.md +0 -311
- package/templates/common/claude/agents/tsq-designer.md +0 -323
- package/templates/common/claude/agents/tsq-developer.md +0 -177
- package/templates/common/claude/agents/tsq-planner.md +0 -190
- package/templates/common/claude/agents/tsq-prompter.md +0 -356
- package/templates/common/claude/agents/tsq-qa.md +0 -168
- package/templates/common/claude/agents/tsq-retro.md +0 -193
- package/templates/common/claude/agents/tsq-security.md +0 -221
- package/templates/common/claude/hooks/auto-metrics.sh +0 -165
- package/templates/common/claude/hooks/auto-worklog.sh +0 -245
- package/templates/common/claude/hooks/event-logger.sh +0 -208
- package/templates/common/claude/settings.json +0 -86
- package/templates/common/claude/skills/architecture/SKILL.md +0 -123
- package/templates/common/claude/skills/backend/node/SKILL.md +0 -1015
- package/templates/common/claude/skills/coding/SKILL.md +0 -171
- package/templates/common/claude/skills/database/prisma/SKILL.md +0 -357
- package/templates/common/claude/skills/frontend/nextjs/SKILL.md +0 -279
- package/templates/common/claude/skills/frontend/react/SKILL.md +0 -1729
- package/templates/common/claude/skills/methodology/bdd/SKILL.md +0 -234
- package/templates/common/claude/skills/methodology/ddd/SKILL.md +0 -311
- package/templates/common/claude/skills/methodology/tdd/SKILL.md +0 -512
- package/templates/common/claude/skills/planning/SKILL.md +0 -90
- package/templates/common/claude/skills/security/SKILL.md +0 -234
- package/templates/common/claude/skills/testing/SKILL.md +0 -146
- package/templates/common/claude/skills/typescript/SKILL.md +0 -435
- package/templates/common/config.template.yaml +0 -132
- /package/templates/{common → base}/timsquad/architectures/clean/ARCHITECTURE.md +0 -0
- /package/templates/{common → base}/timsquad/architectures/clean/backend.xml +0 -0
- /package/templates/{common → base}/timsquad/architectures/clean/frontend.xml +0 -0
- /package/templates/{common → base}/timsquad/architectures/fsd/ARCHITECTURE.md +0 -0
- /package/templates/{common → base}/timsquad/architectures/fsd/frontend.xml +0 -0
- /package/templates/{common → base}/timsquad/architectures/hexagonal/ARCHITECTURE.md +0 -0
- /package/templates/{common → base}/timsquad/architectures/hexagonal/backend.xml +0 -0
- /package/templates/{common → base}/timsquad/constraints/competency-framework.xml +0 -0
- /package/templates/{common → base}/timsquad/constraints/ssot-schema.xml +0 -0
- /package/templates/{common → base}/timsquad/feedback/feedback-router.sh +0 -0
- /package/templates/{common → base}/timsquad/generators/data-design.xml +0 -0
- /package/templates/{common → base}/timsquad/generators/prd.xml +0 -0
- /package/templates/{common → base}/timsquad/generators/requirements.xml +0 -0
- /package/templates/{common → base}/timsquad/generators/service-spec.xml +0 -0
- /package/templates/{common → base}/timsquad/logs/_example.md +0 -0
- /package/templates/{common → base}/timsquad/logs/_template.md +0 -0
- /package/templates/{common → base}/timsquad/patterns/cqrs.xml +0 -0
- /package/templates/{common → base}/timsquad/patterns/event-sourcing.xml +0 -0
- /package/templates/{common → base}/timsquad/patterns/repository.xml +0 -0
- /package/templates/{common → base}/timsquad/process/phase-checklist.yaml +0 -0
- /package/templates/{common → base}/timsquad/process/state-machine.xml +0 -0
- /package/templates/{common → base}/timsquad/process/validation-rules.xml +0 -0
- /package/templates/{common → base}/timsquad/process/workflow-base.xml +0 -0
- /package/templates/{common → base}/timsquad/retrospective/cycle-report.template.md +0 -0
- /package/templates/{common → base}/timsquad/retrospective/patterns/failure-patterns.md +0 -0
- /package/templates/{common → base}/timsquad/retrospective/patterns/success-patterns.md +0 -0
- /package/templates/{common → base}/timsquad/retrospective/retrospective-config.xml +0 -0
- /package/templates/{common → base}/timsquad/retrospective/retrospective-state.xml +0 -0
- /package/templates/{common → base}/timsquad/ssot/adr/ADR-000-template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/adr/ADR-001-example.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/data-design.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/deployment-spec.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/env-config.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/error-codes.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/functional-spec.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/glossary.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/integration-spec.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/planning.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/prd.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/requirements.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/security-spec.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/service-spec.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/test-spec.template.md +0 -0
- /package/templates/{common → base}/timsquad/ssot/ui-ux-spec.template.md +0 -0
- /package/templates/{common → base}/timsquad/state/workspace.xml +0 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Task Result Template
|
|
2
|
+
|
|
3
|
+
모든 에이전트가 태스크 완료 시 사용하는 공통 리턴 형식.
|
|
4
|
+
|
|
5
|
+
## TASK-{id} Result
|
|
6
|
+
|
|
7
|
+
### Summary
|
|
8
|
+
{1줄 요약}
|
|
9
|
+
|
|
10
|
+
### Changes
|
|
11
|
+
| File | Lines | Action | Description |
|
|
12
|
+
|------|-------|--------|-------------|
|
|
13
|
+
|
|
14
|
+
### Techniques Applied
|
|
15
|
+
- {패턴/기법}: {적용 이유}
|
|
16
|
+
|
|
17
|
+
### SSOT Alignment
|
|
18
|
+
- {ssot-문서}#{섹션}: {구현 상태}
|
|
19
|
+
|
|
20
|
+
### Decisions
|
|
21
|
+
- {결정}: {근거}
|
|
22
|
+
|
|
23
|
+
### Issues / Handoff Notes
|
|
24
|
+
- {전달 사항} 또는 "없음"
|
|
25
|
+
|
|
26
|
+
### UI Meta Index Updates (컴포넌트 작업 시, 선택)
|
|
27
|
+
| component | layout | colorScheme | spacing | states | responsive |
|
|
28
|
+
|-----------|--------|-------------|---------|--------|------------|
|
|
29
|
+
|
|
30
|
+
### TSQ Log Enrich (필수)
|
|
31
|
+
위 내용을 기반으로 반드시 tsq log enrich를 호출하세요:
|
|
32
|
+
```bash
|
|
33
|
+
tsq log enrich {agent} --json '{"summary":"...", "techniques":[...], "ssot_refs":[...], "decisions":[...], "issues":[...]}'
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Few-shot 예제
|
|
39
|
+
|
|
40
|
+
### 예제 1: Developer — API 엔드포인트 구현
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
## P3-S001-T001 Result
|
|
44
|
+
|
|
45
|
+
### Summary
|
|
46
|
+
POST /auth/login 엔드포인트 구현 + 단위 테스트 3개 작성
|
|
47
|
+
|
|
48
|
+
### Changes
|
|
49
|
+
| File | Lines | Action | Description |
|
|
50
|
+
|------|-------|--------|-------------|
|
|
51
|
+
| src/routes/auth/login.ts | 1-45 | created | 로그인 핸들러 (Zod 검증 + Supabase Auth) |
|
|
52
|
+
| src/routes/auth/login.test.ts | 1-62 | created | 성공/실패/입력검증 3 케이스 |
|
|
53
|
+
| src/types/auth.ts | 12-18 | modified | LoginRequest/Response 타입 추가 |
|
|
54
|
+
|
|
55
|
+
### Techniques Applied
|
|
56
|
+
- Zod validation: 런타임 입력 검증으로 타입 안전성 확보
|
|
57
|
+
- Repository pattern: Supabase 직접 호출 대신 AuthRepository 추상화
|
|
58
|
+
|
|
59
|
+
### SSOT Alignment
|
|
60
|
+
- service-spec.md#POST-auth-login: aligned (명세대로 구현)
|
|
61
|
+
- data-design.md#users-table: aligned (email + hashed_password 컬럼 활용)
|
|
62
|
+
- error-codes.md#AUTH-001: aligned (잘못된 자격증명 에러 코드 적용)
|
|
63
|
+
|
|
64
|
+
### Decisions
|
|
65
|
+
- session-based auth 선택: Supabase RLS와의 호환성 (JWT는 RLS 정책과 충돌)
|
|
66
|
+
|
|
67
|
+
### Issues / Handoff Notes
|
|
68
|
+
- 없음
|
|
69
|
+
|
|
70
|
+
### TSQ Log Enrich
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
tsq log enrich developer --json '{"summary":"POST /auth/login 엔드포인트 구현 + 단위 테스트 3개","techniques":[{"name":"Zod validation","reason":"런타임 입력 검증"},{"name":"Repository pattern","reason":"Supabase 추상화"}],"ssot_refs":[{"doc":"service-spec.md","section":"POST-auth-login","status":"aligned"},{"doc":"data-design.md","section":"users-table","status":"aligned"}],"decisions":[{"decision":"session-based auth","rationale":"Supabase RLS 호환성"}],"issues":[]}'
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 예제 2: QA — 리뷰 결과
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
## P3-S001-T003 Result
|
|
81
|
+
|
|
82
|
+
### Summary
|
|
83
|
+
인증 시퀀스 코드 리뷰 — Level 1 이슈 2건, Level 2 이슈 1건 발견
|
|
84
|
+
|
|
85
|
+
### Changes
|
|
86
|
+
| File | Lines | Action | Description |
|
|
87
|
+
|------|-------|--------|-------------|
|
|
88
|
+
| (리뷰 대상) src/routes/auth/ | - | reviewed | 3개 파일 검토 |
|
|
89
|
+
|
|
90
|
+
### Techniques Applied
|
|
91
|
+
- SSOT 교차 검증: service-spec.md vs 실제 응답 형식 대조
|
|
92
|
+
- 경계값 분석: 비밀번호 길이 제한 미검증 발견
|
|
93
|
+
|
|
94
|
+
### SSOT Alignment
|
|
95
|
+
- service-spec.md#POST-auth-login: partial (응답의 token 필드명이 access_token으로 불일치)
|
|
96
|
+
- error-codes.md#AUTH-002: misaligned (계정 잠금 에러코드 미구현)
|
|
97
|
+
|
|
98
|
+
### Decisions
|
|
99
|
+
- 없음 (리뷰 역할)
|
|
100
|
+
|
|
101
|
+
### Issues / Handoff Notes
|
|
102
|
+
- Level 1: 비밀번호 최소 길이 검증 누락 (src/routes/auth/login.ts:23) → @developer 수정 요청
|
|
103
|
+
- Level 1: 로그인 실패 시 응답에 email 노출 (src/routes/auth/login.ts:38) → @developer 수정 요청
|
|
104
|
+
- Level 2: token → access_token 필드명 SSOT 불일치 → PM 보고 (명세 vs 구현 어느 쪽이 정확한지 확인 필요)
|
|
105
|
+
```
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: {skill-name}
|
|
3
|
+
description: |
|
|
4
|
+
{무엇을 하는지 + 언제 사용하는지, 1024자 이하.}
|
|
5
|
+
{에이전트가 이 description만 보고 스킬 필요 여부를 판단함.}
|
|
6
|
+
version: "1.0.0"
|
|
7
|
+
tags: [{tag1}, {tag2}]
|
|
8
|
+
user-invocable: false
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# {Skill Title}
|
|
12
|
+
|
|
13
|
+
{1~2줄 목적 설명}
|
|
14
|
+
|
|
15
|
+
## Philosophy
|
|
16
|
+
|
|
17
|
+
- {핵심 원칙 1}
|
|
18
|
+
- {핵심 원칙 2}
|
|
19
|
+
- {핵심 원칙 3}
|
|
20
|
+
|
|
21
|
+
## Resources
|
|
22
|
+
|
|
23
|
+
| Priority | Type | Resource | Description |
|
|
24
|
+
|----------|------|----------|-------------|
|
|
25
|
+
| CRITICAL | rule | [{rule-name}](rules/{rule-name}.md) | {1줄 설명} |
|
|
26
|
+
| HIGH | rule | [{rule-name}](rules/{rule-name}.md) | {1줄 설명} |
|
|
27
|
+
| HIGH | ref | [{topic}](references/{topic}.md) | {1줄 설명} |
|
|
28
|
+
| MEDIUM | script | [{script}](scripts/{script}.sh) | {1줄 설명} |
|
|
29
|
+
|
|
30
|
+
## Quick Rules
|
|
31
|
+
|
|
32
|
+
### {카테고리 1}
|
|
33
|
+
- {규칙}
|
|
34
|
+
- {규칙}
|
|
35
|
+
|
|
36
|
+
### {카테고리 2}
|
|
37
|
+
- {규칙}
|
|
38
|
+
- {규칙}
|
|
39
|
+
|
|
40
|
+
## Checklist
|
|
41
|
+
|
|
42
|
+
| Priority | Item |
|
|
43
|
+
|----------|------|
|
|
44
|
+
| CRITICAL | {필수 확인 항목} |
|
|
45
|
+
| HIGH | {중요 확인 항목} |
|
|
46
|
+
| MEDIUM | {권장 확인 항목} |
|
|
47
|
+
|
|
48
|
+
<!--
|
|
49
|
+
스킬 작성 가이드:
|
|
50
|
+
- SKILL.md는 120줄 이하 인덱스 (항상 로드됨 → 컨텍스트 절약)
|
|
51
|
+
- 하위 디렉토리 3종:
|
|
52
|
+
- rules/ → "이렇게 해라/하지 마라" (Incorrect/Correct 패턴, impact 레벨)
|
|
53
|
+
- references/ → "이것을 알아라" (심층 가이드, 외부 문서)
|
|
54
|
+
- scripts/ → "이것을 실행해라" (자동화, 검증, 생성)
|
|
55
|
+
- rules/는 Read로 온디맨드 로드, scripts/는 Bash로 실행 (토큰 0)
|
|
56
|
+
- "Claude가 이미 아는 것"은 넣지 말 것 → 프로젝트 컨벤션만
|
|
57
|
+
- description은 PRIMARY trigger — 1024자 이하
|
|
58
|
+
- 참조 모델: vercel-react-best-practices (SKILL.md 인덱스 + 45 rules 파일)
|
|
59
|
+
-->
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: {Reference Title}
|
|
3
|
+
category: guide # guide | api | migration | external
|
|
4
|
+
source: internal # URL (외부) 또는 "internal" (자체 작성)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# {Reference Title}
|
|
8
|
+
|
|
9
|
+
{이 레퍼런스가 다루는 주제 1~2줄 설명}
|
|
10
|
+
|
|
11
|
+
## Key Concepts
|
|
12
|
+
|
|
13
|
+
{에이전트가 알아야 할 핵심 개념}
|
|
14
|
+
|
|
15
|
+
## Detailed Guide
|
|
16
|
+
|
|
17
|
+
{상세 가이드 내용}
|
|
18
|
+
|
|
19
|
+
## Common Pitfalls
|
|
20
|
+
|
|
21
|
+
{에이전트가 흔히 하는 실수}
|
|
22
|
+
|
|
23
|
+
## Examples
|
|
24
|
+
|
|
25
|
+
{구체적인 코드/설정 예시}
|
|
26
|
+
|
|
27
|
+
<!--
|
|
28
|
+
레퍼런스 파일 작성 가이드:
|
|
29
|
+
- 50~200줄 (심층 가이드)
|
|
30
|
+
- frontmatter 필수: title, category
|
|
31
|
+
- source 권장: 외부 자료 기반이면 URL 기록
|
|
32
|
+
- rules/와 차이: 규칙이 아닌 "알아야 할 지식"
|
|
33
|
+
- 에이전트가 Read로 필요할 때만 로드 (온디맨드)
|
|
34
|
+
- 파일명: kebab-case.md (예: nextjs-migration.md)
|
|
35
|
+
-->
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Rule Categories
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Rule Categories
|
|
6
|
+
|
|
7
|
+
규칙 파일을 카테고리별로 그룹화하는 인덱스.
|
|
8
|
+
SKILL.md의 Resources 테이블과 함께 에이전트의 규칙 탐색을 돕습니다.
|
|
9
|
+
|
|
10
|
+
## {Category 1} ({prefix-})
|
|
11
|
+
|
|
12
|
+
**Impact:** CRITICAL
|
|
13
|
+
**Description:** {이 카테고리의 규칙이 왜 중요한지}
|
|
14
|
+
|
|
15
|
+
| Rule | Description |
|
|
16
|
+
|------|-------------|
|
|
17
|
+
| [{prefix}-{name}]({prefix}-{name}.md) | {1줄 설명} |
|
|
18
|
+
|
|
19
|
+
## {Category 2} ({prefix-})
|
|
20
|
+
|
|
21
|
+
**Impact:** HIGH
|
|
22
|
+
**Description:** {이 카테고리의 규칙이 왜 중요한지}
|
|
23
|
+
|
|
24
|
+
| Rule | Description |
|
|
25
|
+
|------|-------------|
|
|
26
|
+
| [{prefix}-{name}]({prefix}-{name}.md) | {1줄 설명} |
|
|
27
|
+
|
|
28
|
+
<!--
|
|
29
|
+
_sections.md 작성 가이드:
|
|
30
|
+
- 5개 이상 규칙이 있는 스킬에서 사용
|
|
31
|
+
- Impact 순으로 카테고리 정렬 (CRITICAL → LOW)
|
|
32
|
+
- 파일명 prefix로 규칙 자동 분류 (예: async-, bundle-, server-)
|
|
33
|
+
- 참조: vercel-react-best-practices/rules/_sections.md
|
|
34
|
+
-->
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: {Rule Title}
|
|
3
|
+
impact: HIGH # CRITICAL | HIGH | MEDIUM | LOW
|
|
4
|
+
impactDescription: {영향도 수치} # 예: "2-10× improvement", "200-800ms 감소"
|
|
5
|
+
tags: {tag1}, {tag2}
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## {Rule Title}
|
|
9
|
+
|
|
10
|
+
**Impact: {LEVEL} ({영향도 수치})**
|
|
11
|
+
|
|
12
|
+
{왜 이 규칙이 필요한지 1~2줄 설명}
|
|
13
|
+
|
|
14
|
+
**Incorrect ({무엇이 잘못됐는지}):**
|
|
15
|
+
```{lang}
|
|
16
|
+
// 잘못된 패턴
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Correct ({무엇이 올바른지}):**
|
|
20
|
+
```{lang}
|
|
21
|
+
// 올바른 패턴
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
<!--
|
|
25
|
+
규칙 파일 작성 가이드:
|
|
26
|
+
- 20~80줄 (간결하게)
|
|
27
|
+
- frontmatter 필수: title, impact, tags
|
|
28
|
+
- impactDescription 권장: 수치화된 영향도
|
|
29
|
+
- Incorrect/Correct 코드 예시 필수
|
|
30
|
+
- "Claude가 이미 아는 것"은 생략, 프로젝트 고유 패턴만
|
|
31
|
+
- 파일명: kebab-case.md (예: async-parallel.md)
|
|
32
|
+
-->
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# @name {script-name}
|
|
3
|
+
# @description {이 스크립트가 하는 일 1줄}
|
|
4
|
+
# @args {필요한 인자 설명}
|
|
5
|
+
# @output {출력 형식 (text | json | exit-code)}
|
|
6
|
+
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
# ─────────────────────────────────────
|
|
10
|
+
# 설정
|
|
11
|
+
# ─────────────────────────────────────
|
|
12
|
+
PROJECT_ROOT="${1:-.}"
|
|
13
|
+
|
|
14
|
+
# ─────────────────────────────────────
|
|
15
|
+
# 실행
|
|
16
|
+
# ─────────────────────────────────────
|
|
17
|
+
|
|
18
|
+
echo "Running {script-name}..."
|
|
19
|
+
|
|
20
|
+
# TODO: 스크립트 로직 작성
|
|
21
|
+
|
|
22
|
+
echo "Done."
|
|
23
|
+
|
|
24
|
+
# ─────────────────────────────────────
|
|
25
|
+
# 스크립트 작성 가이드:
|
|
26
|
+
# - set -euo pipefail 필수 (안전 실행)
|
|
27
|
+
# - 외부 URL 호출 금지 (보안)
|
|
28
|
+
# - 헤더 메타데이터 필수: @name, @description, @args, @output
|
|
29
|
+
# - 에이전트가 Bash로 실행 (컨텍스트에 로드하지 않음 → 토큰 0)
|
|
30
|
+
# - 파일명: {verb}-{noun}.sh (예: check-secrets.sh, validate-schema.sh)
|
|
31
|
+
# ─────────────────────────────────────
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: architecture
|
|
3
|
+
description: |
|
|
4
|
+
아키텍처 설계 및 API 명세 가이드라인.
|
|
5
|
+
Clean Architecture, RESTful API 설계, ADR, 데이터 모델링을 다룸.
|
|
6
|
+
Use when: "아키텍처 설계, API 설계, ADR, 레이어 구조, 데이터 모델"
|
|
7
|
+
version: "1.0.0"
|
|
8
|
+
tags: [architecture, api, design]
|
|
9
|
+
user-invocable: false
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Architecture
|
|
13
|
+
|
|
14
|
+
시스템 아키텍처 설계 및 API 명세를 위한 가이드라인.
|
|
15
|
+
|
|
16
|
+
## Philosophy
|
|
17
|
+
|
|
18
|
+
- 의존성 규칙: 안쪽 레이어는 바깥쪽을 모름
|
|
19
|
+
- 추상화: 인터페이스를 통한 의존성 역전
|
|
20
|
+
- 단일 책임: 각 컴포넌트는 하나의 역할
|
|
21
|
+
|
|
22
|
+
## Resources
|
|
23
|
+
|
|
24
|
+
| Priority | Type | Resource | Description |
|
|
25
|
+
|----------|------|----------|-------------|
|
|
26
|
+
| HIGH | ref | [api-design](references/api-design.md) | RESTful API URL 패턴, 응답 형식 |
|
|
27
|
+
| HIGH | ref | [adr-template](references/adr-template.md) | ADR 작성 가이드 + 템플릿 |
|
|
28
|
+
|
|
29
|
+
## Quick Rules
|
|
30
|
+
|
|
31
|
+
### Clean Architecture Layers
|
|
32
|
+
| Layer | Level | 역할 |
|
|
33
|
+
|-------|-------|------|
|
|
34
|
+
| Entities | core | 핵심 비즈니스 로직 |
|
|
35
|
+
| Use Cases | application | 애플리케이션 로직 |
|
|
36
|
+
| Interface Adapters | adapter | 컨트롤러, 프레젠터 |
|
|
37
|
+
| Frameworks & Drivers | external | DB, Web, 외부 시스템 |
|
|
38
|
+
|
|
39
|
+
### Data Design
|
|
40
|
+
- 정규화: 1NF(원자값) → 2NF(부분 함수 종속 제거) → 3NF(이행 함수 종속 제거)
|
|
41
|
+
- 인덱스: 자주 조회되는 컬럼, WHERE/JOIN/ORDER BY 대상, 카디널리티 고려
|
|
42
|
+
|
|
43
|
+
### ADR
|
|
44
|
+
트레이드오프가 있는 기술 결정 시 반드시 ADR 작성. 상세 템플릿은 references/adr-template.md 참조.
|
|
45
|
+
|
|
46
|
+
## Checklist
|
|
47
|
+
|
|
48
|
+
| Priority | Item |
|
|
49
|
+
|----------|------|
|
|
50
|
+
| CRITICAL | 레이어 간 의존성이 올바른가 (안→밖만 허용) |
|
|
51
|
+
| CRITICAL | API 응답 형식이 일관적인가 |
|
|
52
|
+
| HIGH | 에러 코드가 문서화되었는가 |
|
|
53
|
+
| HIGH | 주요 결정에 ADR이 있는가 |
|
|
54
|
+
| MEDIUM | 데이터 모델이 정규화되었는가 |
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Architecture Decision Record Template
|
|
3
|
+
category: guide
|
|
4
|
+
source: internal
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Architecture Decision Record (ADR)
|
|
8
|
+
|
|
9
|
+
아키텍처 결정을 문서화하는 ADR 작성 가이드.
|
|
10
|
+
|
|
11
|
+
## When to Write ADR
|
|
12
|
+
|
|
13
|
+
- 기술 스택 선정
|
|
14
|
+
- 아키텍처 패턴 결정
|
|
15
|
+
- 트레이드오프가 있는 결정
|
|
16
|
+
|
|
17
|
+
## Template
|
|
18
|
+
|
|
19
|
+
```markdown
|
|
20
|
+
# ADR-XXX: {제목}
|
|
21
|
+
|
|
22
|
+
## Status
|
|
23
|
+
Proposed / Accepted / Deprecated / Superseded
|
|
24
|
+
|
|
25
|
+
## Context
|
|
26
|
+
결정이 필요한 배경과 상황
|
|
27
|
+
|
|
28
|
+
## Decision
|
|
29
|
+
내린 결정과 선택한 옵션
|
|
30
|
+
|
|
31
|
+
## Consequences
|
|
32
|
+
### Positive
|
|
33
|
+
- 장점 1
|
|
34
|
+
- 장점 2
|
|
35
|
+
|
|
36
|
+
### Negative
|
|
37
|
+
- 단점 1 (완화 방안)
|
|
38
|
+
|
|
39
|
+
## Alternatives Considered
|
|
40
|
+
| 옵션 | 장점 | 단점 |
|
|
41
|
+
|-----|-----|-----|
|
|
42
|
+
| A | ... | ... |
|
|
43
|
+
| B | ... | ... |
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Common Pitfalls
|
|
47
|
+
|
|
48
|
+
- Status를 업데이트하지 않아 현재 유효한지 모호
|
|
49
|
+
- Context 없이 Decision만 기록 → 나중에 "왜 이렇게 했지?" 불명확
|
|
50
|
+
- Alternatives를 기록하지 않으면 나중에 같은 논의 반복
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: RESTful API Design Guide
|
|
3
|
+
category: guide
|
|
4
|
+
source: internal
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# RESTful API Design Guide
|
|
8
|
+
|
|
9
|
+
REST API URL 패턴, 응답 형식, 에러 코드 설계 가이드.
|
|
10
|
+
|
|
11
|
+
## URL Patterns
|
|
12
|
+
|
|
13
|
+
| Method | Path | 용도 |
|
|
14
|
+
|--------|------|------|
|
|
15
|
+
| GET | `/api/v1/{resource}` | 목록 조회 |
|
|
16
|
+
| GET | `/api/v1/{resource}/:id` | 단일 조회 |
|
|
17
|
+
| POST | `/api/v1/{resource}` | 생성 |
|
|
18
|
+
| PUT | `/api/v1/{resource}/:id` | 전체 수정 |
|
|
19
|
+
| PATCH | `/api/v1/{resource}/:id` | 부분 수정 |
|
|
20
|
+
| DELETE | `/api/v1/{resource}/:id` | 삭제 |
|
|
21
|
+
|
|
22
|
+
## Response Format
|
|
23
|
+
|
|
24
|
+
### Success
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"success": true,
|
|
28
|
+
"data": { ... },
|
|
29
|
+
"error": null,
|
|
30
|
+
"meta": {
|
|
31
|
+
"page": 1,
|
|
32
|
+
"limit": 20,
|
|
33
|
+
"total": 100
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Error
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"success": false,
|
|
42
|
+
"data": null,
|
|
43
|
+
"error": {
|
|
44
|
+
"code": "AUTH_001",
|
|
45
|
+
"message": "Invalid credentials",
|
|
46
|
+
"details": { ... }
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Key Principles
|
|
52
|
+
|
|
53
|
+
- 리소스 중심 URL 설계 (동사 X, 명사 O)
|
|
54
|
+
- HTTP 메서드로 동작 표현 (GET=조회, POST=생성, PUT/PATCH=수정, DELETE=삭제)
|
|
55
|
+
- 일관된 응답 형식 (success/data/error 구조)
|
|
56
|
+
- 버전 관리 (`/api/v1/`)
|
|
57
|
+
- 적절한 HTTP 상태 코드 사용
|
|
58
|
+
|
|
59
|
+
## Common Pitfalls
|
|
60
|
+
|
|
61
|
+
- URL에 동사 사용 (`/api/getUsers` → `/api/v1/users`)
|
|
62
|
+
- 일관성 없는 에러 응답 형식
|
|
63
|
+
- 페이지네이션 미구현 (대량 데이터 성능 이슈)
|
|
64
|
+
- 버전 없는 API → 하위 호환성 깨짐
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: node
|
|
3
|
+
description: Node.js 백엔드 개발 가이드라인 (Hono Framework). 비동기 우선, Zod 타입 안전, Clean Architecture 레이어 분리.
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
tags: [nodejs, hono, backend]
|
|
6
|
+
user-invocable: false
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Node.js Backend Guidelines (Hono)
|
|
10
|
+
|
|
11
|
+
Node.js 기반 백엔드 서비스 개발 가이드라인 (Hono 프레임워크 중심).
|
|
12
|
+
|
|
13
|
+
## Philosophy
|
|
14
|
+
|
|
15
|
+
- 비동기 우선 - 블로킹 작업 피하기
|
|
16
|
+
- 에러는 명시적으로 처리
|
|
17
|
+
- 환경 분리 - 설정은 환경변수로
|
|
18
|
+
- 타입 안전한 API - Zod로 검증
|
|
19
|
+
- 레이어 분리 - Clean Architecture
|
|
20
|
+
|
|
21
|
+
## Project Structure
|
|
22
|
+
|
|
23
|
+
아키텍처 설정에 따라 결정:
|
|
24
|
+
- Clean Architecture: `architectures/clean/backend.xml`
|
|
25
|
+
- Hexagonal Architecture: `architectures/hexagonal/backend.xml`
|
|
26
|
+
|
|
27
|
+
## Rules
|
|
28
|
+
|
|
29
|
+
| Priority | Rule | Description |
|
|
30
|
+
|----------|------|-------------|
|
|
31
|
+
| CRITICAL | [hono-app-setup](rules/hono-app-setup.md) | Hono 앱 설정, 미들웨어, 라우트, Zod 검증 |
|
|
32
|
+
| CRITICAL | [error-handling](rules/error-handling.md) | AppError 계층 + 글로벌 에러 핸들러 |
|
|
33
|
+
| CRITICAL | [async-patterns](rules/async-patterns.md) | Promise.all, waterfall 방지, 트랜잭션 |
|
|
34
|
+
| HIGH | [jwt-auth](rules/jwt-auth.md) | JWT 미들웨어, RBAC, 토큰 생성/갱신 |
|
|
35
|
+
| HIGH | [env-config](rules/env-config.md) | Zod 환경변수 검증 |
|
|
36
|
+
| MEDIUM | [middleware](rules/middleware.md) | Rate Limiting, Request Logging |
|
|
37
|
+
| MEDIUM | [testing](rules/testing.md) | Hono API 테스트 + Service 유닛 테스트 |
|
|
38
|
+
| LOW | [deployment](rules/deployment.md) | Graceful Shutdown |
|
|
39
|
+
|
|
40
|
+
## Quick Rules
|
|
41
|
+
|
|
42
|
+
### 비동기
|
|
43
|
+
- async/await 사용, 콜백 금지
|
|
44
|
+
- 독립 작업은 Promise.all로 병렬
|
|
45
|
+
- Waterfall 방지 (Promise 먼저 시작, 나중에 await)
|
|
46
|
+
- 동기 파일 I/O 금지 (fs.readFileSync)
|
|
47
|
+
|
|
48
|
+
### 보안
|
|
49
|
+
- 환경변수 Zod 검증 (앱 시작 시 실패)
|
|
50
|
+
- 입력 검증 (zValidator)
|
|
51
|
+
- JWT HttpOnly 쿠키로 Refresh Token 관리
|
|
52
|
+
- Rate Limiting 적용
|
|
53
|
+
- 에러 메시지에 민감 정보 제외
|
|
54
|
+
- 하드코딩된 시크릿 금지
|
|
55
|
+
|
|
56
|
+
### 구조
|
|
57
|
+
- Clean Architecture 레이어 분리
|
|
58
|
+
- Repository 패턴 (DI)
|
|
59
|
+
- 글로벌 에러 핸들러
|
|
60
|
+
- 커스텀 에러 클래스 계층
|
|
61
|
+
|
|
62
|
+
### Hono
|
|
63
|
+
- 타입 안전한 라우트 정의
|
|
64
|
+
- zValidator로 요청 검증
|
|
65
|
+
- 미들웨어로 공통 로직 처리
|
|
66
|
+
- 일관된 응답 형식 `{ success, data, error }`
|
|
67
|
+
|
|
68
|
+
## Checklist
|
|
69
|
+
|
|
70
|
+
| Priority | Item |
|
|
71
|
+
|----------|------|
|
|
72
|
+
| CRITICAL | Zod 입력 검증 (zValidator) |
|
|
73
|
+
| CRITICAL | 글로벌 에러 핸들러 |
|
|
74
|
+
| CRITICAL | 환경변수 Zod 검증 |
|
|
75
|
+
| CRITICAL | Waterfall 제거 (Promise.all) |
|
|
76
|
+
| HIGH | Clean Architecture 레이어 분리 |
|
|
77
|
+
| HIGH | 커스텀 에러 클래스 |
|
|
78
|
+
| HIGH | JWT 인증 (HttpOnly Refresh Token) |
|
|
79
|
+
| HIGH | Rate Limiting |
|
|
80
|
+
| MEDIUM | Request Logging (구조화 로그) |
|
|
81
|
+
| MEDIUM | Graceful Shutdown |
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Async Patterns
|
|
3
|
+
impact: CRITICAL
|
|
4
|
+
tags: async, promise, waterfall, transaction
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Async Patterns
|
|
8
|
+
|
|
9
|
+
### Promise.all for Independent Operations
|
|
10
|
+
|
|
11
|
+
**Incorrect:**
|
|
12
|
+
```typescript
|
|
13
|
+
// Sequential - 3 round trips
|
|
14
|
+
const user = await userService.findById(userId);
|
|
15
|
+
const orders = await orderService.findByUserId(userId);
|
|
16
|
+
const notifications = await notificationService.getUnread(userId);
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Correct:**
|
|
20
|
+
```typescript
|
|
21
|
+
// Parallel - 1 round trip
|
|
22
|
+
const [user, orders, notifications] = await Promise.all([
|
|
23
|
+
userService.findById(userId),
|
|
24
|
+
orderService.findByUserId(userId),
|
|
25
|
+
notificationService.getUnread(userId),
|
|
26
|
+
]);
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### API Route Waterfall Prevention
|
|
30
|
+
|
|
31
|
+
**Incorrect:**
|
|
32
|
+
```typescript
|
|
33
|
+
app.get('/dashboard', async (c) => {
|
|
34
|
+
const session = await auth();
|
|
35
|
+
const config = await fetchConfig(); // config는 session 불필요
|
|
36
|
+
const data = await fetchData(session.user.id);
|
|
37
|
+
return c.json({ data, config });
|
|
38
|
+
});
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
**Correct:**
|
|
42
|
+
```typescript
|
|
43
|
+
app.get('/dashboard', async (c) => {
|
|
44
|
+
const sessionPromise = auth();
|
|
45
|
+
const configPromise = fetchConfig(); // 즉시 시작
|
|
46
|
+
|
|
47
|
+
const session = await sessionPromise;
|
|
48
|
+
const [config, data] = await Promise.all([
|
|
49
|
+
configPromise,
|
|
50
|
+
fetchData(session.user.id), // session에 의존
|
|
51
|
+
]);
|
|
52
|
+
return c.json({ data, config });
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Prisma Transaction
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
export async function createOrder(input: CreateOrderInput) {
|
|
60
|
+
return prisma.$transaction(async (tx) => {
|
|
61
|
+
const user = await tx.user.findUnique({ where: { id: input.userId } });
|
|
62
|
+
if (!user) throw new AppError('USER_NOT_FOUND', 'User not found', 404);
|
|
63
|
+
|
|
64
|
+
let totalAmount = 0;
|
|
65
|
+
for (const item of input.items) {
|
|
66
|
+
const product = await tx.product.findUnique({ where: { id: item.productId } });
|
|
67
|
+
if (!product || product.stock < item.quantity) {
|
|
68
|
+
throw new AppError('INSUFFICIENT_STOCK', `Insufficient stock for ${item.productId}`, 400);
|
|
69
|
+
}
|
|
70
|
+
await tx.product.update({ where: { id: item.productId }, data: { stock: { decrement: item.quantity } } });
|
|
71
|
+
totalAmount += product.price * item.quantity;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return tx.order.create({
|
|
75
|
+
data: { userId: input.userId, totalAmount, status: 'PENDING',
|
|
76
|
+
items: { create: input.items.map(i => ({ productId: i.productId, quantity: i.quantity })) } },
|
|
77
|
+
include: { items: true },
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
```
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Deployment
|
|
3
|
+
impact: LOW
|
|
4
|
+
tags: deployment, graceful-shutdown
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Graceful Shutdown
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
// src/index.ts
|
|
11
|
+
import { serve } from '@hono/node-server';
|
|
12
|
+
import app from './app';
|
|
13
|
+
import { config } from './config';
|
|
14
|
+
import { prisma } from './infrastructure/database/prisma';
|
|
15
|
+
|
|
16
|
+
const server = serve({
|
|
17
|
+
fetch: app.fetch,
|
|
18
|
+
port: config.PORT,
|
|
19
|
+
hostname: config.HOST,
|
|
20
|
+
}, (info) => {
|
|
21
|
+
console.log(`Server running at http://${info.address}:${info.port}`);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
async function shutdown(signal: string) {
|
|
25
|
+
console.log(`${signal} received. Shutting down...`);
|
|
26
|
+
server.close(() => console.log('HTTP server closed'));
|
|
27
|
+
await prisma.$disconnect();
|
|
28
|
+
process.exit(0);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
32
|
+
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
33
|
+
```
|