timsquad 3.5.0 → 3.7.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 +103 -107
- package/README.md +100 -104
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +48 -2
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/init.js +46 -14
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/{upgrade.d.ts → update.d.ts} +3 -3
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/{upgrade.js → update.js} +12 -17
- package/dist/commands/update.js.map +1 -0
- package/dist/daemon/context-writer.d.ts +14 -0
- package/dist/daemon/context-writer.d.ts.map +1 -1
- package/dist/daemon/context-writer.js +29 -0
- package/dist/daemon/context-writer.js.map +1 -1
- package/dist/daemon/event-queue.d.ts +7 -11
- package/dist/daemon/event-queue.d.ts.map +1 -1
- package/dist/daemon/event-queue.js +78 -118
- package/dist/daemon/event-queue.js.map +1 -1
- package/dist/daemon/file-watcher.d.ts +14 -8
- package/dist/daemon/file-watcher.d.ts.map +1 -1
- package/dist/daemon/file-watcher.js +78 -41
- package/dist/daemon/file-watcher.js.map +1 -1
- package/dist/daemon/index.d.ts +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +54 -47
- package/dist/daemon/index.js.map +1 -1
- package/dist/index.js +3 -41
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-generator.d.ts.map +1 -1
- package/dist/lib/agent-generator.js +21 -10
- package/dist/lib/agent-generator.js.map +1 -1
- package/dist/lib/compile-rules.d.ts +2 -0
- package/dist/lib/compile-rules.d.ts.map +1 -1
- package/dist/lib/compile-rules.js +39 -4
- package/dist/lib/compile-rules.js.map +1 -1
- package/dist/lib/compiler.d.ts +22 -1
- package/dist/lib/compiler.d.ts.map +1 -1
- package/dist/lib/compiler.js +178 -12
- package/dist/lib/compiler.js.map +1 -1
- package/dist/lib/config.d.ts +3 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +17 -2
- package/dist/lib/config.js.map +1 -1
- package/dist/{commands/log.d.ts → lib/log-utils.d.ts} +7 -15
- package/dist/lib/log-utils.d.ts.map +1 -0
- package/dist/lib/log-utils.js +347 -0
- package/dist/lib/log-utils.js.map +1 -0
- package/dist/lib/skill-generator.d.ts +1 -1
- package/dist/lib/skill-generator.d.ts.map +1 -1
- package/dist/lib/skill-generator.js +19 -44
- package/dist/lib/skill-generator.js.map +1 -1
- package/dist/lib/ssot-map.d.ts +31 -0
- package/dist/lib/ssot-map.d.ts.map +1 -0
- package/dist/lib/ssot-map.js +79 -0
- package/dist/lib/ssot-map.js.map +1 -0
- package/dist/lib/template.d.ts +10 -3
- package/dist/lib/template.d.ts.map +1 -1
- package/dist/lib/template.js +137 -22
- package/dist/lib/template.js.map +1 -1
- package/dist/lib/upgrade-backup.js +1 -1
- package/dist/lib/upgrade-backup.js.map +1 -1
- package/dist/lib/workflow-state.d.ts +1 -1
- package/dist/lib/workflow-state.d.ts.map +1 -1
- package/dist/lib/workflow-state.js +1 -1
- package/dist/lib/workflow-state.js.map +1 -1
- package/dist/types/config.d.ts +10 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +46 -41
- package/dist/types/config.js.map +1 -1
- package/dist/types/feedback.d.ts +1 -54
- package/dist/types/feedback.d.ts.map +1 -1
- package/dist/types/feedback.js +1 -22
- package/dist/types/feedback.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/meta-index.d.ts +8 -0
- package/dist/types/meta-index.d.ts.map +1 -1
- package/dist/types/project.d.ts +6 -1
- package/dist/types/project.d.ts.map +1 -1
- package/dist/types/project.js +15 -0
- package/dist/types/project.js.map +1 -1
- package/dist/types/ssot-map.d.ts +30 -0
- package/dist/types/ssot-map.d.ts.map +1 -0
- package/dist/types/ssot-map.js +6 -0
- package/dist/types/ssot-map.js.map +1 -0
- package/package.json +1 -1
- package/templates/base/agents/base/tsq-architect.md +1 -1
- package/templates/base/agents/base/tsq-dba.md +3 -1
- package/templates/base/agents/base/tsq-designer.md +3 -1
- package/templates/base/agents/base/tsq-developer.md +3 -1
- package/templates/base/agents/base/tsq-librarian.md +45 -0
- package/templates/base/agents/base/tsq-qa.md +3 -1
- package/templates/base/agents/base/tsq-security.md +3 -1
- package/templates/base/agents/overlays/platform/claude-code.md +2 -2
- package/templates/base/config.template.yaml +17 -28
- package/templates/base/knowledge/templates/task-result.md +5 -10
- package/templates/base/skills/_shared/naming-conventions.md +49 -0
- package/templates/base/skills/_template/SKILL.md +31 -17
- package/templates/base/skills/{architecture → tsq-architecture}/SKILL.md +2 -2
- package/templates/base/skills/tsq-audit/SKILL.md +74 -0
- package/templates/base/skills/{methodology/bdd → tsq-bdd}/SKILL.md +14 -9
- package/templates/base/skills/tsq-coding/SKILL.md +65 -0
- package/templates/base/skills/tsq-coding/rules/async-patterns.md +81 -0
- package/templates/base/skills/tsq-coding/rules/code-organization.md +80 -0
- package/templates/base/skills/tsq-coding/rules/error-handling.md +76 -0
- package/templates/base/skills/tsq-coding/rules/type-safety.md +85 -0
- package/templates/base/skills/tsq-controller/SKILL.md +81 -0
- package/templates/base/skills/tsq-controller/memory/.gitkeep +0 -0
- package/templates/base/skills/{mobile/dart → tsq-dart}/SKILL.md +5 -3
- package/templates/base/skills/{database → tsq-database}/SKILL.md +13 -27
- package/templates/base/skills/tsq-database/rules/query-optimization.md +32 -0
- package/templates/base/skills/tsq-database/rules/supabase-patterns.md +94 -0
- package/templates/base/skills/{methodology/ddd → tsq-ddd}/SKILL.md +15 -10
- package/templates/base/skills/{methodology/debugging → tsq-debugging}/SKILL.md +2 -2
- package/templates/base/skills/tsq-decompose/SKILL.md +117 -0
- package/templates/base/skills/tsq-delete/SKILL.md +72 -0
- package/templates/base/skills/{mobile/flutter → tsq-flutter}/SKILL.md +6 -3
- package/templates/base/skills/tsq-grill/SKILL.md +86 -0
- package/templates/base/skills/{backend/node → tsq-hono}/SKILL.md +6 -4
- package/templates/base/skills/tsq-librarian/SKILL.md +78 -0
- package/templates/base/skills/tsq-log/SKILL.md +30 -0
- package/templates/base/skills/{frontend/nextjs → tsq-nextjs}/SKILL.md +14 -9
- package/templates/base/skills/{planning → tsq-planning}/SKILL.md +2 -2
- package/templates/base/skills/{database/prisma → tsq-prisma}/SKILL.md +15 -9
- package/templates/base/skills/tsq-product-audit/SKILL.md +113 -0
- package/templates/base/skills/tsq-product-audit/checklists/01-security.md +86 -0
- package/templates/base/skills/tsq-product-audit/checklists/02-performance.md +67 -0
- package/templates/base/skills/tsq-product-audit/checklists/03-seo.md +46 -0
- package/templates/base/skills/tsq-product-audit/checklists/04-accessibility.md +66 -0
- package/templates/base/skills/tsq-product-audit/checklists/05-ui-ux.md +50 -0
- package/templates/base/skills/tsq-product-audit/checklists/06-architecture.md +53 -0
- package/templates/base/skills/tsq-product-audit/checklists/07-functional-requirements.md +55 -0
- package/templates/base/skills/tsq-product-audit/rules/audit-protocol.md +136 -0
- package/templates/base/skills/tsq-product-audit/rules/false-positive-guard.md +81 -0
- package/templates/base/skills/tsq-product-audit/rules/scoring-criteria.md +113 -0
- package/templates/base/skills/tsq-product-audit/templates/improvement-plan-template.md +60 -0
- package/templates/base/skills/tsq-product-audit/templates/report-template.md +88 -0
- package/templates/base/skills/tsq-prompt/SKILL.md +86 -0
- package/templates/base/skills/tsq-protocol/SKILL.md +101 -33
- package/templates/base/skills/{frontend/react → tsq-react}/SKILL.md +6 -3
- package/templates/base/skills/tsq-retro/SKILL.md +86 -0
- package/templates/base/skills/tsq-retro/references/feedback-guide.md +58 -0
- package/templates/base/skills/tsq-retro/references/improve-protocol.md +87 -0
- package/templates/base/skills/tsq-retro/references/improvement-template.md +26 -0
- package/templates/base/skills/tsq-security/SKILL.md +66 -0
- package/templates/base/skills/tsq-security/rules/auth-patterns.md +62 -0
- package/templates/base/skills/tsq-security/rules/dependency-security.md +69 -0
- package/templates/base/skills/tsq-security/rules/input-validation.md +68 -0
- package/templates/base/skills/tsq-security/rules/secrets-management.md +65 -0
- package/templates/base/skills/tsq-spec/SKILL.md +58 -0
- package/templates/base/skills/{stability-verification → tsq-stability}/SKILL.md +3 -3
- package/templates/base/skills/tsq-start/SKILL.md +90 -0
- package/templates/base/skills/tsq-start/references/onboarding-questions.md +177 -0
- package/templates/base/skills/tsq-status/SKILL.md +32 -0
- package/templates/base/skills/{methodology/tdd → tsq-tdd}/SKILL.md +12 -3
- package/templates/base/skills/tsq-testing/SKILL.md +69 -0
- package/templates/base/skills/tsq-testing/references/e2e-stability.md +33 -0
- package/templates/base/skills/{typescript → tsq-typescript}/SKILL.md +5 -11
- package/templates/base/skills/{ui-design → tsq-ui}/SKILL.md +2 -2
- package/templates/base/skills/tsq-update/SKILL.md +48 -0
- package/templates/base/timsquad/constraints/competency-framework.xml +2 -2
- package/templates/base/timsquad/constraints/ssot-schema.xml +2 -2
- package/templates/base/timsquad/process/phase-checklist.yaml +1 -1
- package/templates/base/timsquad/process/state-machine.xml +2 -2
- package/templates/base/timsquad/process/validation-rules.xml +8 -8
- package/templates/base/timsquad/process/workflow-base.xml +8 -8
- package/templates/base/timsquad/retrospective/cycle-report.template.md +2 -2
- package/templates/base/timsquad/retrospective/patterns/failure-patterns.md +1 -1
- package/templates/base/timsquad/retrospective/patterns/success-patterns.md +2 -2
- package/templates/base/timsquad/retrospective/retrospective-state.xml +2 -2
- package/templates/base/timsquad/ssot/audit-trail-spec.template.md +155 -0
- package/templates/base/timsquad/ssot/compliance-matrix.template.md +105 -0
- package/templates/base/timsquad/ssot/component-map.template.md +181 -0
- package/templates/base/timsquad/ssot/data-design.template.md +4 -4
- package/templates/base/timsquad/ssot/deployment-spec.template.md +29 -22
- package/templates/base/timsquad/ssot/env-config.template.md +4 -2
- package/templates/base/timsquad/ssot/error-codes.template.md +3 -3
- package/templates/base/timsquad/ssot/functional-spec.template.md +40 -3
- package/templates/base/timsquad/ssot/glossary.template.md +2 -2
- package/templates/base/timsquad/ssot/infra-topology.template.md +191 -0
- package/templates/base/timsquad/ssot/integration-spec.template.md +2 -2
- package/templates/base/timsquad/ssot/monitoring-spec.template.md +185 -0
- package/templates/base/timsquad/ssot/navigation-map.template.md +154 -0
- package/templates/base/timsquad/ssot/performance-budget.template.md +132 -0
- package/templates/base/timsquad/ssot/planning.template.md +3 -3
- package/templates/base/timsquad/ssot/prd/_template.md +73 -0
- package/templates/base/timsquad/ssot/prd.template.md +10 -21
- package/templates/base/timsquad/ssot/requirements.template.md +3 -3
- package/templates/base/timsquad/ssot/sdk-spec.template.md +223 -0
- package/templates/base/timsquad/ssot/service-spec.template.md +3 -3
- package/templates/base/timsquad/ssot/state-machine.template.md +127 -0
- package/templates/base/timsquad/ssot/test-spec.template.md +11 -1
- package/templates/base/timsquad/ssot/ui-ux-spec.template.md +43 -3
- package/templates/base/timsquad/ssot-map.template.yaml +69 -0
- package/templates/base/timsquad/state/workspace.xml +11 -11
- package/templates/platforms/claude-code/rules/adr-rules.md +1 -1
- package/templates/platforms/claude-code/rules/api-conventions.md +12 -0
- package/templates/platforms/claude-code/rules/build-gate.md +1 -1
- package/templates/platforms/claude-code/rules/completion-verification.md +0 -2
- package/templates/platforms/claude-code/rules/context-monitor.md +1 -1
- package/templates/platforms/claude-code/rules/feedback-routing.md +2 -2
- package/templates/platforms/claude-code/rules/librarian-constraints.md +11 -0
- package/templates/platforms/claude-code/rules/phase-management.md +2 -2
- package/templates/platforms/claude-code/rules/plan-review.md +2 -2
- package/templates/platforms/claude-code/rules/quality-guards.md +0 -2
- package/templates/platforms/claude-code/rules/sequence-management.md +15 -15
- package/templates/platforms/claude-code/rules/session-notes.md +1 -1
- package/templates/platforms/claude-code/rules/test-conventions.md +13 -0
- package/templates/platforms/claude-code/rules/workspace-sync.md +1 -1
- package/templates/platforms/claude-code/scripts/build-gate.sh +6 -1
- package/templates/platforms/claude-code/scripts/change-scope-guard.sh +110 -0
- package/templates/platforms/claude-code/scripts/check-capability.sh +68 -0
- package/templates/platforms/claude-code/scripts/completion-guard.sh +134 -14
- package/templates/platforms/claude-code/scripts/context-restore.sh +95 -0
- package/templates/platforms/claude-code/scripts/e2e-commit-gate.sh +70 -0
- package/templates/platforms/claude-code/scripts/e2e-marker.sh +51 -0
- package/templates/platforms/claude-code/scripts/phase-guard.sh +3 -6
- package/templates/platforms/claude-code/scripts/pre-compact.sh +70 -0
- package/templates/platforms/claude-code/scripts/safe-guard.sh +2 -5
- package/templates/platforms/claude-code/scripts/subagent-start.sh +11 -0
- package/templates/platforms/claude-code/scripts/subagent-stop.sh +11 -0
- package/templates/platforms/claude-code/settings.json +28 -56
- package/templates/project-types/api-backend/config.yaml +9 -5
- package/templates/project-types/api-backend/process/workflow.xml +2 -2
- package/templates/project-types/fintech/config.yaml +13 -19
- package/templates/project-types/fintech/ssot/audit-trail-spec.template.md +207 -0
- package/templates/project-types/fintech/ssot/compliance-matrix.template.md +187 -0
- package/templates/project-types/infra/config.yaml +7 -4
- package/templates/project-types/infra/process/workflow.xml +3 -3
- package/templates/project-types/mobile-app/config.yaml +8 -14
- package/templates/project-types/mobile-app/process/workflow.xml +4 -4
- package/templates/project-types/platform/config.yaml +8 -5
- package/templates/project-types/platform/process/workflow.xml +3 -3
- package/templates/project-types/web-app/config.yaml +9 -15
- package/templates/project-types/web-app/process/workflow.xml +6 -6
- package/templates/project-types/web-service/config.yaml +10 -19
- package/templates/project-types/web-service/process/workflow.xml +6 -6
- package/dist/commands/compile.d.ts +0 -3
- package/dist/commands/compile.d.ts.map +0 -1
- package/dist/commands/compile.js +0 -170
- package/dist/commands/compile.js.map +0 -1
- package/dist/commands/feedback.d.ts +0 -12
- package/dist/commands/feedback.d.ts.map +0 -1
- package/dist/commands/feedback.js +0 -382
- package/dist/commands/feedback.js.map +0 -1
- package/dist/commands/full.d.ts +0 -3
- package/dist/commands/full.d.ts.map +0 -1
- package/dist/commands/full.js +0 -88
- package/dist/commands/full.js.map +0 -1
- package/dist/commands/git/commit.d.ts +0 -3
- package/dist/commands/git/commit.d.ts.map +0 -1
- package/dist/commands/git/commit.js +0 -85
- package/dist/commands/git/commit.js.map +0 -1
- package/dist/commands/git/index.d.ts +0 -5
- package/dist/commands/git/index.d.ts.map +0 -1
- package/dist/commands/git/index.js +0 -5
- package/dist/commands/git/index.js.map +0 -1
- package/dist/commands/git/pr.d.ts +0 -3
- package/dist/commands/git/pr.d.ts.map +0 -1
- package/dist/commands/git/pr.js +0 -139
- package/dist/commands/git/pr.js.map +0 -1
- package/dist/commands/git/release.d.ts +0 -3
- package/dist/commands/git/release.d.ts.map +0 -1
- package/dist/commands/git/release.js +0 -153
- package/dist/commands/git/release.js.map +0 -1
- package/dist/commands/git/sync.d.ts +0 -3
- package/dist/commands/git/sync.d.ts.map +0 -1
- package/dist/commands/git/sync.js +0 -132
- package/dist/commands/git/sync.js.map +0 -1
- package/dist/commands/improve.d.ts +0 -3
- package/dist/commands/improve.d.ts.map +0 -1
- package/dist/commands/improve.js +0 -286
- package/dist/commands/improve.js.map +0 -1
- package/dist/commands/knowledge.d.ts +0 -3
- package/dist/commands/knowledge.d.ts.map +0 -1
- package/dist/commands/knowledge.js +0 -316
- package/dist/commands/knowledge.js.map +0 -1
- package/dist/commands/log.d.ts.map +0 -1
- package/dist/commands/log.js +0 -1436
- package/dist/commands/log.js.map +0 -1
- package/dist/commands/meta-index.d.ts +0 -3
- package/dist/commands/meta-index.d.ts.map +0 -1
- package/dist/commands/meta-index.js +0 -401
- package/dist/commands/meta-index.js.map +0 -1
- package/dist/commands/metrics.d.ts +0 -3
- package/dist/commands/metrics.d.ts.map +0 -1
- package/dist/commands/metrics.js +0 -843
- package/dist/commands/metrics.js.map +0 -1
- package/dist/commands/quick.d.ts +0 -3
- package/dist/commands/quick.d.ts.map +0 -1
- package/dist/commands/quick.js +0 -136
- package/dist/commands/quick.js.map +0 -1
- package/dist/commands/retro.d.ts +0 -3
- package/dist/commands/retro.d.ts.map +0 -1
- package/dist/commands/retro.js +0 -828
- package/dist/commands/retro.js.map +0 -1
- package/dist/commands/session.d.ts +0 -3
- package/dist/commands/session.d.ts.map +0 -1
- package/dist/commands/session.js +0 -346
- package/dist/commands/session.js.map +0 -1
- package/dist/commands/skills.d.ts +0 -12
- package/dist/commands/skills.d.ts.map +0 -1
- package/dist/commands/skills.js +0 -228
- package/dist/commands/skills.js.map +0 -1
- package/dist/commands/status.d.ts +0 -3
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -127
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/upgrade.d.ts.map +0 -1
- package/dist/commands/upgrade.js.map +0 -1
- package/dist/commands/watch.d.ts +0 -3
- package/dist/commands/watch.d.ts.map +0 -1
- package/dist/commands/watch.js +0 -213
- package/dist/commands/watch.js.map +0 -1
- package/dist/commands/workflow.d.ts +0 -3
- package/dist/commands/workflow.d.ts.map +0 -1
- package/dist/commands/workflow.js +0 -607
- package/dist/commands/workflow.js.map +0 -1
- package/templates/base/skills/coding/SKILL.md +0 -47
- package/templates/base/skills/controller/SKILL.md +0 -111
- package/templates/base/skills/prompt-engineering/SKILL.md +0 -103
- package/templates/base/skills/retrospective/SKILL.md +0 -102
- package/templates/base/skills/security/SKILL.md +0 -55
- package/templates/base/skills/testing/SKILL.md +0 -63
- package/templates/base/timsquad/feedback/feedback-router.sh +0 -341
- package/templates/base/timsquad/feedback/routing-rules.yaml +0 -352
- package/templates/platforms/claude-code/CLAUDE.md.template +0 -89
- package/templates/platforms/claude-code/rules/skill-suggest.md +0 -27
- package/templates/platforms/claude-code/scripts/skill-rules.json +0 -85
- package/templates/platforms/claude-code/scripts/skill-suggest.sh +0 -105
- /package/templates/base/skills/{architecture → tsq-architecture}/references/adr-template.md +0 -0
- /package/templates/base/skills/{architecture → tsq-architecture}/references/api-design.md +0 -0
- /package/templates/base/skills/{methodology/bdd → tsq-bdd}/rules/gherkin-patterns.md +0 -0
- /package/templates/base/skills/{coding → tsq-coding}/rules/patterns.md +0 -0
- /package/templates/base/skills/{controller → tsq-controller}/references/README.md +0 -0
- /package/templates/base/skills/{controller → tsq-controller}/rules/README.md +0 -0
- /package/templates/base/skills/{mobile/dart → tsq-dart}/rules/async-patterns.md +0 -0
- /package/templates/base/skills/{mobile/dart → tsq-dart}/rules/code-style.md +0 -0
- /package/templates/base/skills/{mobile/dart → tsq-dart}/rules/null-safety.md +0 -0
- /package/templates/base/skills/{mobile/dart → tsq-dart}/rules/type-system.md +0 -0
- /package/templates/base/skills/{methodology/ddd → tsq-ddd}/rules/strategic-patterns.md +0 -0
- /package/templates/base/skills/{methodology/debugging → tsq-debugging}/references/root-cause-tracing.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/SKILL.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/references/ci-cd-pipeline.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/rules/code-signing.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/rules/codemagic-setup.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/rules/fastlane-setup.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/rules/github-actions.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/rules/store-deployment.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/ci-cd/rules/versioning.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/SKILL.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/references/i18n-architecture.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/rules/arb-files.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/rules/locale-switching.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/rules/localization-setup.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/rules/plural-gender.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/i18n/rules/text-direction.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/SKILL.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/references/monitoring-architecture.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/rules/analytics.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/rules/crashlytics-setup.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/rules/logging.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/rules/performance-monitoring.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/monitoring/rules/sentry-integration.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/SKILL.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/references/api-client-architecture.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/rules/caching.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/rules/connectivity.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/rules/dio-setup.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/rules/error-handling.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/rules/interceptors.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/networking/rules/retrofit-patterns.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/SKILL.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/references/notification-architecture.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/references/platform-setup.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/background-processing.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/deep-linking.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/fcm-setup.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/local-notifications.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/notification-handling.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/notification-permissions.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/push-notifications/rules/rich-notifications.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/references/freezed-patterns.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/references/project-structure.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/animations.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/architecture.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/navigation-routing.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/performance.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/platform-adaptive.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/state-management.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/testing.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/rules/widget-conventions.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/SKILL.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/references/mobile-security-checklist.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/rules/api-key-protection.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/rules/authentication.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/rules/data-protection.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/rules/obfuscation.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/rules/secure-storage.md +0 -0
- /package/templates/base/skills/{mobile/flutter → tsq-flutter}/security/rules/ssl-pinning.md +0 -0
- /package/templates/base/skills/{backend/node → tsq-hono}/rules/async-patterns.md +0 -0
- /package/templates/base/skills/{backend/node → tsq-hono}/rules/deployment.md +0 -0
- /package/templates/base/skills/{backend/node → tsq-hono}/rules/env-config.md +0 -0
- /package/templates/base/skills/{backend/node → tsq-hono}/rules/error-handling.md +0 -0
- /package/templates/base/skills/{backend/node → tsq-hono}/rules/hono-app-setup.md +0 -0
- /package/templates/base/skills/{backend/node → tsq-hono}/rules/jwt-auth.md +0 -0
- /package/templates/base/skills/{backend/node → tsq-hono}/rules/middleware.md +0 -0
- /package/templates/base/skills/{backend/node → tsq-hono}/rules/testing.md +0 -0
- /package/templates/base/skills/{frontend/nextjs → tsq-nextjs}/rules/app-router.md +0 -0
- /package/templates/base/skills/{planning → tsq-planning}/references/prd-guide.md +0 -0
- /package/templates/base/skills/{planning → tsq-planning}/references/requirements-guide.md +0 -0
- /package/templates/base/skills/{database/prisma → tsq-prisma}/rules/queries.md +0 -0
- /package/templates/base/skills/{database/prisma → tsq-prisma}/rules/schema-design.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/_sections.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/anti-patterns.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/async-api-routes.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/async-defer-await.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/async-dependencies.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/async-parallel.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/async-suspense-boundaries.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/bundle-barrel-imports.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/bundle-defer-third-party.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/bundle-dynamic-imports.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/component-conventions.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/js-combine-iterations.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/js-early-exit.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/js-index-maps.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/js-set-map-lookups.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/rendering-conditional-render.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/rendering-content-visibility.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/rendering-hoist-jsx.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/rerender-defer-reads.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/rerender-derived-state.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/rerender-memo.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/rerender-transitions.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/server-after-nonblocking.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/server-cache-react.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/server-parallel-fetching.md +0 -0
- /package/templates/base/skills/{frontend/react → tsq-react}/rules/state-location.md +0 -0
- /package/templates/base/skills/{security → tsq-security}/rules/owasp-examples.md +0 -0
- /package/templates/base/skills/{security → tsq-security}/scripts/check-secrets.sh +0 -0
- /package/templates/base/skills/{stability-verification → tsq-stability}/references/release-checklist.md +0 -0
- /package/templates/base/skills/{stability-verification → tsq-stability}/references/security-fix-patterns.md +0 -0
- /package/templates/base/skills/{stability-verification → tsq-stability}/rules/verification-layers.md +0 -0
- /package/templates/base/skills/{stability-verification → tsq-stability}/rules/verification-workflow.md +0 -0
- /package/templates/base/skills/{stability-verification → tsq-stability}/scripts/verify.sh +0 -0
- /package/templates/base/skills/{methodology/tdd → tsq-tdd}/rules/real-world-example.md +0 -0
- /package/templates/base/skills/{methodology/tdd → tsq-tdd}/rules/techniques.md +0 -0
- /package/templates/base/skills/{testing → tsq-testing}/references/testing-patterns.md +0 -0
- /package/templates/base/skills/{typescript → tsq-typescript}/rules/type-patterns.md +0 -0
- /package/templates/base/skills/{typescript → tsq-typescript}/rules/utility-types.md +0 -0
|
@@ -1,51 +1,119 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tsq-protocol
|
|
3
3
|
description: |
|
|
4
|
-
TimSquad 에이전트 공통 프로토콜.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
version: "1.0.0"
|
|
4
|
+
TimSquad 에이전트 공통 프로토콜. 메인세션과 서브에이전트 모두 이 프로토콜을 준수.
|
|
5
|
+
로그/피드백 규칙, 작업 원칙을 정의. 자동 활성 스킬 — 직접 호출하지 마세요.
|
|
6
|
+
version: "2.1.0"
|
|
8
7
|
tags: [tsq, protocol, agent]
|
|
9
8
|
user-invocable: false
|
|
10
9
|
---
|
|
11
10
|
|
|
12
11
|
# TSQ Agent Protocol
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
코드 탐색 시 `.timsquad/.daemon/task-context.json`을 **먼저** 확인하세요.
|
|
16
|
-
이 파일에 작업 범위의 파일/메서드/클래스 위치가 정리되어 있습니다.
|
|
17
|
-
context 파일이 없거나 범위 밖 파일이 필요할 때만 Grep/Glob을 사용하세요.
|
|
13
|
+
에이전트가 TimSquad 시스템 내에서 따라야 하는 공통 프로토콜.
|
|
18
14
|
|
|
19
|
-
##
|
|
15
|
+
## Contract
|
|
20
16
|
|
|
21
|
-
|
|
17
|
+
- **Trigger**: 모든 에이전트 세션 (자동 활성)
|
|
18
|
+
- **Input**: 태스크 지시 + task-context.json
|
|
19
|
+
- **Output**: TSQ 프로세스 준수 작업 결과
|
|
20
|
+
- **Error**: 프로토콜 위반 시 경고 + 수정 안내
|
|
22
21
|
|
|
23
|
-
|
|
24
|
-
|--------|--------|
|
|
25
|
-
| 작업 시작 | `tsq log add {agent} work "TASK-XXX 시작: {설명}"` |
|
|
26
|
-
| 결정 기록 | `tsq log add {agent} decision "{결정 근거}"` |
|
|
27
|
-
| 이슈 발견 | `tsq feedback "{이슈 설명}"` |
|
|
28
|
-
| 작업 완료 | `tsq log add {agent} work "TASK-XXX 완료: {결과}"` |
|
|
29
|
-
| semantic 보강 | `tsq log enrich {agent} --json '{...}'` |
|
|
30
|
-
| 커밋 | `tsq commit -m "{메시지}"` (developer/dba만) |
|
|
22
|
+
## Protocol — 메인세션
|
|
31
23
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
24
|
+
1. **요구사항 분석**: 사용자 요구 파악 + 모호함 해소
|
|
25
|
+
2. **파이프라인 판단**: 작업 복잡도에 따라 분기
|
|
26
|
+
- 파이프라인 적합 → tsq-controller 스킬 경유 위임
|
|
27
|
+
- 단순 작업 → 직접 수행 + 최소 로그
|
|
28
|
+
- 모호 → 사용자에게 선택지 제시
|
|
29
|
+
3. **검증 기준 선행**: 구현 전에 테스트 or 확인 방법을 먼저 명시
|
|
30
|
+
4. **선택지 제시**: 요구사항에 여러 해석이 가능하면 조용히 선택하지 않음
|
|
31
|
+
|
|
32
|
+
## Protocol — 서브에이전트
|
|
33
|
+
|
|
34
|
+
1. **task-context 확인**: `.timsquad/.daemon/task-context.json` 우선 읽기
|
|
35
|
+
2. **제약조건 확인**: 주입된 Phase 제약 + allowed-tools 범위 확인
|
|
36
|
+
3. **작업 수행**: 제약 범위 내에서 태스크 실행
|
|
37
|
+
4. **Completion Report 출력**: 아래 형식으로 결과 보고 (**필수, 생략 불가**)
|
|
38
|
+
|
|
39
|
+
### Completion Report (필수)
|
|
40
|
+
|
|
41
|
+
서브에이전트는 작업 완료 시 **반드시** 아래 형식의 보고서를 출력해야 합니다.
|
|
42
|
+
Controller가 이 보고서를 검증하며, 누락 시 태스크 완료로 인정되지 않습니다.
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
## Completion Report
|
|
46
|
+
- Task: {태스크 설명 — 무엇을 했는지}
|
|
47
|
+
- Status: {pass|fail}
|
|
48
|
+
- Files changed: {변경된 파일 목록, 없으면 "none"}
|
|
49
|
+
- Tests: {passed N|failed N|skipped — 테스트 실행 결과}
|
|
50
|
+
- Notes: {차단 요소, 결정 사항, 또는 "none"}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**필드 규칙**:
|
|
54
|
+
| 필드 | 필수 | 허용 값 |
|
|
55
|
+
|------|------|---------|
|
|
56
|
+
| Task | Yes | 1줄 설명 |
|
|
57
|
+
| Status | Yes | `pass` 또는 `fail` |
|
|
58
|
+
| Files changed | Yes | 파일 경로 목록 또는 `none` |
|
|
59
|
+
| Tests | Yes | `passed N`, `failed N`, `skipped`, `N/A` |
|
|
60
|
+
| Notes | Yes | 텍스트 또는 `none` |
|
|
61
|
+
|
|
62
|
+
**Status 판정 기준**:
|
|
63
|
+
- `pass`: 모든 테스트 통과 + `tsc --noEmit` 클린 + 요구사항 충족
|
|
64
|
+
- `fail`: 테스트 실패, 빌드 오류, 또는 요구사항 미충족 (Notes에 사유 기록)
|
|
36
65
|
|
|
37
|
-
##
|
|
38
|
-
작업 결과는 `knowledge/templates/task-result.md` 형식으로 리턴하세요.
|
|
66
|
+
## Quick Rules
|
|
39
67
|
|
|
40
|
-
|
|
68
|
+
### 로그 기록
|
|
69
|
+
로그는 `.timsquad/logs/{date}-{agent}.md`에 직접 append한다.
|
|
41
70
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
| L3 | Critical | 요구사항 오류, 스코프 변경, 데이터 손실 위험 | 메인세션(PM) → 사용자 승인 |
|
|
71
|
+
```markdown
|
|
72
|
+
## {time} [{type}]
|
|
73
|
+
{message}
|
|
74
|
+
```
|
|
47
75
|
|
|
48
|
-
|
|
76
|
+
| type | 용도 |
|
|
77
|
+
|------|------|
|
|
78
|
+
| work | 작업 시작/완료 기록 |
|
|
79
|
+
| decision | 결정 근거 기록 |
|
|
80
|
+
| issue | 이슈/피드백 발견 |
|
|
81
|
+
|
|
82
|
+
## Decision Log
|
|
83
|
+
|
|
84
|
+
중요한 판단이 있을 때 `.timsquad/state/decisions.jsonl`에 한 줄 append한다.
|
|
85
|
+
모든 판단을 기록할 필요 없음 — 아래 기준에 해당할 때만.
|
|
86
|
+
|
|
87
|
+
기록 기준:
|
|
88
|
+
- 기술 선택 (라이브러리, 패턴, 아키텍처)
|
|
89
|
+
- 대안을 검토하고 하나를 선택한 경우
|
|
90
|
+
- 의도적으로 보류하거나 스킵한 항목
|
|
91
|
+
- 예상과 다른 동작을 발견한 경우
|
|
92
|
+
- 리스크를 인지하고 수용한 경우
|
|
93
|
+
|
|
94
|
+
형식 (JSON, 한 줄):
|
|
95
|
+
```
|
|
96
|
+
{"agent":"developer","decision":"JWT 선택","reason":"stateless, MSA 확장","alternatives":["session"],"carry_over":false}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
| 필드 | 필수 | 설명 |
|
|
100
|
+
|------|------|------|
|
|
101
|
+
| agent | Yes | 에이전트 이름 |
|
|
102
|
+
| decision | Yes | 무엇을 결정했는지 (1줄) |
|
|
103
|
+
| reason | Yes | 왜 그렇게 했는지 (1줄) |
|
|
104
|
+
| alternatives | No | 검토한 대안 목록 |
|
|
105
|
+
| carry_over | No | 다음 Phase에서 처리 필요 시 true |
|
|
106
|
+
| risk | No | 인지된 리스크 |
|
|
107
|
+
|
|
108
|
+
### Forbidden
|
|
109
|
+
- 스펙 없이 대규모 구현 시작
|
|
110
|
+
- 서브에이전트 결과를 검증 없이 수용
|
|
111
|
+
- Phase gate 조건 미충족 시 다음 Phase 진행
|
|
112
|
+
- Completion Report 없이 태스크 완료 선언
|
|
49
113
|
|
|
50
|
-
|
|
51
|
-
|
|
114
|
+
### Feedback Routing
|
|
115
|
+
| Level | 기준 | 라우팅 |
|
|
116
|
+
|-------|------|--------|
|
|
117
|
+
| L1 | 즉시 수정 가능 (린트, 타입) | 자체 수정 |
|
|
118
|
+
| L2 | 설계 변경 필요 | 메인세션(PM) 보고 |
|
|
119
|
+
| L3 | 요구사항 오류, 스코프 변경 | 메인세션 → 사용자 승인 |
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: react
|
|
3
|
-
description:
|
|
2
|
+
name: tsq-react
|
|
3
|
+
description: |
|
|
4
|
+
React 컴포넌트 개발 가이드라인. 단일 책임, UI/로직 분리, 명시적 데이터 흐름, 서버/클라이언트 상태 분리.
|
|
5
|
+
Use when: React 컴포넌트 작성·수정, 상태관리 설계, 커스텀 훅 작성, JSX/TSX 파일 편집 시.
|
|
4
6
|
version: "1.0.0"
|
|
5
|
-
tags: [react, components, frontend]
|
|
7
|
+
tags: [tsq, react, components, frontend]
|
|
6
8
|
user-invocable: false
|
|
7
9
|
---
|
|
8
10
|
|
|
9
11
|
# React Development Guidelines
|
|
10
12
|
|
|
11
13
|
프로젝트 전체에서 일관된 React 컴포넌트 개발을 위한 컨벤션.
|
|
14
|
+
기본 스택: React Query, Zustand, React Hook Form + Zod. 프로젝트 설정(`memory/conventions.md`)으로 재정의 가능.
|
|
12
15
|
|
|
13
16
|
## Philosophy
|
|
14
17
|
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tsq-retro
|
|
3
|
+
description: |
|
|
4
|
+
피드백 수집, KPT 회고, 개선 적용까지 전체 회고 사이클을 관리하는 스킬.
|
|
5
|
+
Use when: /tsq-retro 호출 시, 피드백 기록 시, Phase 완료 후 회고 시, 패턴 분석 시,
|
|
6
|
+
개선 사항 적용 시, "피드백", "회고", "개선", "retro", "feedback", "improve" 언급 시.
|
|
7
|
+
version: "2.0.0"
|
|
8
|
+
tags: [tsq, retrospective, feedback, improvement, learning]
|
|
9
|
+
user-invocable: true
|
|
10
|
+
argument-hint: "[feedback|retro|improve] — 피드백 기록 / KPT 회고 / 개선 적용"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Retrospective Cycle
|
|
14
|
+
|
|
15
|
+
피드백 수집 → KPT 회고 → 개선 적용의 전체 학습 루프를 관리한다.
|
|
16
|
+
|
|
17
|
+
## Contract
|
|
18
|
+
|
|
19
|
+
- **Trigger**: `/tsq-retro`, `/tsq-retro feedback`, `/tsq-retro improve`
|
|
20
|
+
- **Input**: 모드에 따라 다름 (아래 Mode 참조)
|
|
21
|
+
- **Output**: 피드백 엔트리 / KPT 리포트 / 개선 적용 결과
|
|
22
|
+
- **Error**: 데이터 부족 시 수집 가능 범위 안내
|
|
23
|
+
- **Dependencies**: tsq-protocol
|
|
24
|
+
|
|
25
|
+
## Modes
|
|
26
|
+
|
|
27
|
+
### Mode 1: feedback — 피드백 기록
|
|
28
|
+
|
|
29
|
+
`/tsq-retro feedback "<메시지>"` 또는 작업 중 이슈 발견 시.
|
|
30
|
+
|
|
31
|
+
1. **레벨 분류**: 메시지 내용으로 L1/L2/L3 판정
|
|
32
|
+
- **L1 (구현)**: 버그, 코드 품질, 테스트 누락 — 현재 Task에서 바로 수정 가능
|
|
33
|
+
- **L2 (설계)**: 아키텍처 변경, API 재설계, 스키마 수정 — Sequence/Phase 수준 조정 필요
|
|
34
|
+
- **L3 (기획)**: 요구사항 변경, 스펙 모순, 우선순위 재조정 — SSOT 수정 필요
|
|
35
|
+
2. **기록**: `.timsquad/retrospective/feedback.jsonl`에 append
|
|
36
|
+
```json
|
|
37
|
+
{"ts":"ISO8601","level":1,"phase":"P2","message":"...","status":"open"}
|
|
38
|
+
```
|
|
39
|
+
3. **즉시 조치 판단**:
|
|
40
|
+
- L1 → 현재 Task에서 수정 권고 (알림만)
|
|
41
|
+
- L2 → 현재 Sequence 완료 후 Architect 검토 권고
|
|
42
|
+
- L3 → Phase 완료 시 `/tsq-retro`에서 우선 다룸
|
|
43
|
+
|
|
44
|
+
상세 분류 기준은 `references/feedback-guide.md` 참조.
|
|
45
|
+
|
|
46
|
+
### Mode 2: retro — KPT 회고 (기본)
|
|
47
|
+
|
|
48
|
+
`/tsq-retro` 또는 `/tsq-retro retro`. Phase 완료 후 실행 권장.
|
|
49
|
+
|
|
50
|
+
1. **데이터 수집**:
|
|
51
|
+
- `.timsquad/logs/` — 작업 로그
|
|
52
|
+
- `.timsquad/retrospective/feedback.jsonl` — 수집된 피드백
|
|
53
|
+
- `.timsquad/retrospective/metrics/` — 메트릭
|
|
54
|
+
- `.timsquad/retrospective/patterns/` — 기존 패턴
|
|
55
|
+
2. **메트릭 계산**: 작업 수, 성공률, 평균 수정 횟수, 피드백 레벨별 건수
|
|
56
|
+
3. **KPT 분석**: Keep / Problem / Try 분류
|
|
57
|
+
4. **패턴 식별**: 실패 패턴(FP, 3회+ 반복) / 성공 패턴(SP, 효과 검증)
|
|
58
|
+
5. **리포트 작성**: `.timsquad/retrospective/retro-{phase}.md`
|
|
59
|
+
6. **개선 제안**: 실행 가능한 액션 아이템 도출 → 사용자 승인 대기
|
|
60
|
+
7. **피드백 정리**: 처리된 feedback.jsonl 엔트리를 `status: "resolved"` 처리
|
|
61
|
+
|
|
62
|
+
리포트 구성: 메트릭 요약 → 에이전트별 성과 → 피드백 분석(L1/L2/L3) → 패턴(FP/SP) → 개선 조치 → 다음 목표.
|
|
63
|
+
|
|
64
|
+
### Mode 3: improve — 개선 적용
|
|
65
|
+
|
|
66
|
+
`/tsq-retro improve`. 회고에서 승인된 개선을 실제로 적용.
|
|
67
|
+
|
|
68
|
+
1. **제안 로드**: 최근 retro 리포트에서 승인된 개선 항목 읽기
|
|
69
|
+
2. **대상 분류**: 개선 대상별로 분류
|
|
70
|
+
- **스킬 패치**: SKILL.md 규칙/프로토콜 수정
|
|
71
|
+
- **템플릿 수정**: agent.md, config.yaml 등
|
|
72
|
+
- **패턴 등록**: `.timsquad/retrospective/patterns/` 에 FP/SP 기록
|
|
73
|
+
- **lessons 기록**: `.timsquad/retrospective/lessons.md` 에 학습 사항 append
|
|
74
|
+
3. **적용**: 각 대상에 diff 형태로 변경 사항 제시 → 사용자 확인 후 적용
|
|
75
|
+
4. **검증**: 변경 후 `npm test` 통과 확인
|
|
76
|
+
5. **기록**: 적용된 개선을 lessons.md에 기록, 다음 retro에서 효과 측정
|
|
77
|
+
|
|
78
|
+
상세 절차는 `references/improve-protocol.md` 참조. 개선 제안 형식은 `references/improvement-template.md` 참조.
|
|
79
|
+
|
|
80
|
+
## Quick Rules
|
|
81
|
+
|
|
82
|
+
- **객관적 데이터 우선** — 주관적 평가보다 수치 기반
|
|
83
|
+
- **구체적 액션** — "더 잘하자"가 아닌 실행 가능한 행동
|
|
84
|
+
- **균형 잡힌 시각** — 문제점만이 아닌 성공 사례도 포함
|
|
85
|
+
- **점진적 개선** — 한 번에 대규모 변경보다 작은 개선을 반복
|
|
86
|
+
- **사용자 승인 필수** — improve 모드에서 자동 적용 금지, 반드시 확인 후 적용
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Feedback Level Classification Guide
|
|
3
|
+
category: reference
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 피드백 레벨 분류 가이드
|
|
7
|
+
|
|
8
|
+
## L1 — 구현 수준 (현재 Task에서 수정 가능)
|
|
9
|
+
|
|
10
|
+
즉시 수정 가능한 코드/테스트 수준의 이슈.
|
|
11
|
+
|
|
12
|
+
| 트리거 | 예시 |
|
|
13
|
+
|--------|------|
|
|
14
|
+
| 버그 발견 | "로그인 시 토큰 만료 체크 누락" |
|
|
15
|
+
| 테스트 누락 | "에러 케이스 단위 테스트 없음" |
|
|
16
|
+
| 코드 품질 | "중복 로직이 3곳에 산재" |
|
|
17
|
+
| 타입 에러 | "반환 타입이 Promise인데 await 누락" |
|
|
18
|
+
| 린트/포맷 | "ESLint 규칙 위반" |
|
|
19
|
+
|
|
20
|
+
**조치**: 현재 Task 내에서 Developer가 바로 수정. Controller에 별도 보고 불필요.
|
|
21
|
+
|
|
22
|
+
## L2 — 설계 수준 (Sequence/Phase 조정 필요)
|
|
23
|
+
|
|
24
|
+
현재 Task 범위를 넘어서는 구조적 변경이 필요한 이슈.
|
|
25
|
+
|
|
26
|
+
| 트리거 | 예시 |
|
|
27
|
+
|--------|------|
|
|
28
|
+
| API 인터페이스 변경 | "REST → GraphQL 전환 필요" |
|
|
29
|
+
| DB 스키마 수정 | "정규화 깨짐, 마이그레이션 필요" |
|
|
30
|
+
| 아키텍처 변경 | "모놀리스 → 마이크로서비스 분리" |
|
|
31
|
+
| 의존성 충돌 | "라이브러리 A와 B 버전 비호환" |
|
|
32
|
+
| 성능 병목 | "N+1 쿼리 패턴, 구조적 수정 필요" |
|
|
33
|
+
|
|
34
|
+
**조치**: 현재 Sequence 완료 후 Architect 검토 권고. Phase Memory에 carry-over 기록.
|
|
35
|
+
|
|
36
|
+
## L3 — 기획 수준 (SSOT 수정 필요)
|
|
37
|
+
|
|
38
|
+
요구사항/스펙 자체의 변경이 필요한 이슈.
|
|
39
|
+
|
|
40
|
+
| 트리거 | 예시 |
|
|
41
|
+
|--------|------|
|
|
42
|
+
| 요구사항 모순 | "PRD에서 '실시간'이라 했는데 폴링으로 구현" |
|
|
43
|
+
| 스펙 누락 | "인증 방식이 정의되지 않음" |
|
|
44
|
+
| 우선순위 변경 | "MVP에서 결제 기능 제외해야 할 듯" |
|
|
45
|
+
| 외부 제약 | "API 제공업체 정책 변경으로 재설계 필요" |
|
|
46
|
+
| 비즈니스 로직 변경 | "수수료 계산 공식이 바뀜" |
|
|
47
|
+
|
|
48
|
+
**조치**: Phase 완료 시 `/tsq-retro`에서 우선 다룸. SSOT 문서 갱신 필요.
|
|
49
|
+
|
|
50
|
+
## 판단 기준 요약
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
코드만 고치면 해결? → L1
|
|
54
|
+
설계/구조를 바꿔야 해결? → L2
|
|
55
|
+
스펙/요구사항이 틀림? → L3
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
애매한 경우 낮은 레벨로 시작하고, 회고에서 레벨을 올린다.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Improvement Application Protocol
|
|
3
|
+
category: reference
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 개선 적용 프로토콜
|
|
7
|
+
|
|
8
|
+
`/tsq-retro improve` 실행 시 상세 절차.
|
|
9
|
+
|
|
10
|
+
## 1. 제안 로드
|
|
11
|
+
|
|
12
|
+
최근 retro 리포트(`.timsquad/retrospective/retro-{phase}.md`)에서 개선 항목을 추출한다.
|
|
13
|
+
각 항목에는 `[승인]` / `[보류]` / `[거부]` 태그가 있어야 한다. 태그 없으면 사용자에게 승인 요청.
|
|
14
|
+
|
|
15
|
+
## 2. 대상별 적용 절차
|
|
16
|
+
|
|
17
|
+
### 스킬 패치 (SKILL.md 수정)
|
|
18
|
+
|
|
19
|
+
대상: `.claude/skills/tsq-*/SKILL.md`
|
|
20
|
+
|
|
21
|
+
1. 변경할 스킬 파일 읽기
|
|
22
|
+
2. diff 형태로 변경 사항 제시
|
|
23
|
+
3. 사용자 확인 후 적용
|
|
24
|
+
4. 변경 이유를 커밋 메시지에 포함
|
|
25
|
+
|
|
26
|
+
주의: Quick Rules나 Protocol 순서 변경은 다른 스킬과의 의존성 확인 필요.
|
|
27
|
+
|
|
28
|
+
### 템플릿 수정
|
|
29
|
+
|
|
30
|
+
대상: `.claude/agents/*.md`, `.timsquad/config.yaml`
|
|
31
|
+
|
|
32
|
+
1. 변경 영향 범위 확인 (해당 에이전트가 참조하는 스킬 목록)
|
|
33
|
+
2. diff 제시 → 사용자 확인
|
|
34
|
+
3. 적용 후 관련 에이전트 동작에 영향 없는지 확인
|
|
35
|
+
|
|
36
|
+
### 패턴 등록
|
|
37
|
+
|
|
38
|
+
대상: `.timsquad/retrospective/patterns/`
|
|
39
|
+
|
|
40
|
+
실패 패턴(FP) 또는 성공 패턴(SP)을 등록한다.
|
|
41
|
+
|
|
42
|
+
```markdown
|
|
43
|
+
## FP-{NNN}: {패턴명}
|
|
44
|
+
|
|
45
|
+
- **빈도**: {N}회 (Phase {X}, {Y}, {Z})
|
|
46
|
+
- **증상**: {무엇이 반복적으로 실패하는가}
|
|
47
|
+
- **근본 원인**: {왜 반복되는가}
|
|
48
|
+
- **대응**: {어떻게 방지할 것인가}
|
|
49
|
+
- **적용일**: {ISO8601}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
```markdown
|
|
53
|
+
## SP-{NNN}: {패턴명}
|
|
54
|
+
|
|
55
|
+
- **빈도**: {N}회 검증됨
|
|
56
|
+
- **효과**: {어떤 개선 효과가 있었는가}
|
|
57
|
+
- **조건**: {이 패턴이 효과적인 조건}
|
|
58
|
+
- **적용일**: {ISO8601}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### lessons.md 기록
|
|
62
|
+
|
|
63
|
+
대상: `.timsquad/retrospective/lessons.md`
|
|
64
|
+
|
|
65
|
+
모든 개선 적용 결과를 기록한다. 다음 retro에서 효과 측정의 입력이 된다.
|
|
66
|
+
|
|
67
|
+
```markdown
|
|
68
|
+
## {ISO8601} — {개선 제목}
|
|
69
|
+
|
|
70
|
+
- **출처**: retro-{phase}.md IMP-{NNN}
|
|
71
|
+
- **변경**: {무엇을 바꿨는가}
|
|
72
|
+
- **기대 효과**: {무엇을 기대하는가}
|
|
73
|
+
- **측정 기준**: {다음 retro에서 확인할 지표}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## 3. 검증
|
|
77
|
+
|
|
78
|
+
적용 후 반드시 확인:
|
|
79
|
+
|
|
80
|
+
1. `npm test` — 테스트 통과
|
|
81
|
+
2. 변경된 스킬이 있으면 frontmatter(name, description, version) 정합성 확인
|
|
82
|
+
3. 패턴이 등록됐으면 patterns/ 디렉토리에 파일 존재 확인
|
|
83
|
+
|
|
84
|
+
## 4. 효과 측정 (다음 retro에서)
|
|
85
|
+
|
|
86
|
+
lessons.md의 "측정 기준"을 다음 `/tsq-retro` 실행 시 자동으로 체크한다.
|
|
87
|
+
개선이 효과가 있었으면 SP로 승격, 없었으면 Try 항목에 재등록.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Improvement Template
|
|
3
|
+
category: template
|
|
4
|
+
source: internal
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Improvement Template
|
|
8
|
+
|
|
9
|
+
개선 제안 시 아래 형식을 사용한다.
|
|
10
|
+
|
|
11
|
+
## IMP-XXX: {개선 제목}
|
|
12
|
+
|
|
13
|
+
**대상**: {에이전트/스킬}.md
|
|
14
|
+
**관련 패턴**: FP-XXX / SP-XXX
|
|
15
|
+
|
|
16
|
+
### 현재 문제
|
|
17
|
+
{문제 설명}
|
|
18
|
+
|
|
19
|
+
### 제안 변경
|
|
20
|
+
```diff
|
|
21
|
+
- 현재 내용
|
|
22
|
+
+ 개선된 내용
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### 기대 효과
|
|
26
|
+
{개선 효과}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tsq-security
|
|
3
|
+
description: |
|
|
4
|
+
보안 검토 및 취약점 탐지 가이드라인.
|
|
5
|
+
OWASP Top 10, 시크릿 관리, Rate Limiting, CSRF 방지를 다룸.
|
|
6
|
+
Use when: "보안 검토, 취약점, OWASP, XSS, injection, 시크릿, 인증"
|
|
7
|
+
version: "1.0.0"
|
|
8
|
+
tags: [tsq, security, owasp, vulnerability]
|
|
9
|
+
user-invocable: false
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Security Guidelines (OWASP Top 10)
|
|
13
|
+
|
|
14
|
+
보안 취약점을 사전에 방지하고 체계적으로 검토한다.
|
|
15
|
+
|
|
16
|
+
## Philosophy
|
|
17
|
+
|
|
18
|
+
- 모든 외부 입력은 검증한다 (Trust Nothing)
|
|
19
|
+
- 시크릿은 코드에 절대 포함하지 않는다
|
|
20
|
+
- 보안은 사후 점검이 아닌 설계 단계부터 고려한다
|
|
21
|
+
|
|
22
|
+
## Contract
|
|
23
|
+
|
|
24
|
+
- **Trigger**: 보안 관련 코드 변경 (인증, 권한, 입력 처리, API)
|
|
25
|
+
- **Input**: 변경 코드 + 보안 컨텍스트
|
|
26
|
+
- **Output**: OWASP 준수 코드 + 시크릿 미노출
|
|
27
|
+
- **Error**: 취약점 발견 시 즉시 수정 + 보안 로그
|
|
28
|
+
- **Dependencies**: 없음
|
|
29
|
+
|
|
30
|
+
## Protocol
|
|
31
|
+
|
|
32
|
+
1. **위협 모델링**: 공격 표면 식별
|
|
33
|
+
2. **구현**: OWASP 가이드 준수 코딩
|
|
34
|
+
3. **OWASP 체크**: Top 10 항목별 검증
|
|
35
|
+
4. **시크릿 스캔**: 하드코딩 시크릿 탐색
|
|
36
|
+
|
|
37
|
+
## Verification
|
|
38
|
+
|
|
39
|
+
| Check | Command | Pass Criteria |
|
|
40
|
+
|-------|---------|---------------|
|
|
41
|
+
| 셸 스크립트 | `shellcheck *.sh` | exit code 0 |
|
|
42
|
+
| 의존성 취약점 | `npm audit` | critical 0건 |
|
|
43
|
+
| 시크릿 스캔 | `bash scripts/check-secrets.sh` | 0건 |
|
|
44
|
+
| 입력 검증 | 수동 검증 | 모든 외부 입력 Zod 검증 |
|
|
45
|
+
|
|
46
|
+
## Resources
|
|
47
|
+
|
|
48
|
+
| Priority | Type | Resource | Description |
|
|
49
|
+
|----------|------|----------|-------------|
|
|
50
|
+
| CRITICAL | rule | [owasp-examples](rules/owasp-examples.md) | 취약점별 Bad/Good 코드 예시 |
|
|
51
|
+
| HIGH | script | [check-secrets](scripts/check-secrets.sh) | 하드코딩 시크릿 자동 스캔 |
|
|
52
|
+
|
|
53
|
+
## Quick Rules
|
|
54
|
+
|
|
55
|
+
### OWASP Top 10 핵심
|
|
56
|
+
| # | 취약점 | 방어 |
|
|
57
|
+
|---|--------|------|
|
|
58
|
+
| 1 | Injection | Parameterized Query, ORM |
|
|
59
|
+
| 2 | Broken Auth | bcrypt(12+), 강력한 패스워드 |
|
|
60
|
+
| 3 | Data Exposure | DTO로 민감 정보 제외 |
|
|
61
|
+
| 5 | Access Control | authenticate + authorize |
|
|
62
|
+
| 7 | XSS | textContent, innerHTML 금지 |
|
|
63
|
+
|
|
64
|
+
### 시크릿 관리
|
|
65
|
+
- **금지**: 하드코딩 (`const apiKey = 'sk-...'`)
|
|
66
|
+
- **필수**: 환경변수 (`process.env.API_KEY`)
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Authentication Patterns
|
|
3
|
+
impact: CRITICAL
|
|
4
|
+
tags: security, authentication, jwt, session, password, mfa
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Authentication Patterns
|
|
8
|
+
|
|
9
|
+
## Password Hashing
|
|
10
|
+
```typescript
|
|
11
|
+
// Bad: plain text or weak hashing
|
|
12
|
+
const hash = md5(password);
|
|
13
|
+
|
|
14
|
+
// Good: bcrypt with sufficient rounds
|
|
15
|
+
import bcrypt from 'bcrypt';
|
|
16
|
+
const SALT_ROUNDS = 12;
|
|
17
|
+
const hash = await bcrypt.hash(password, SALT_ROUNDS);
|
|
18
|
+
const isValid = await bcrypt.compare(password, hash);
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## JWT Best Practices
|
|
22
|
+
```typescript
|
|
23
|
+
// Sign with short expiry and explicit algorithm
|
|
24
|
+
const token = jwt.sign({ sub: user.id, role: user.role }, SECRET, {
|
|
25
|
+
algorithm: 'HS256',
|
|
26
|
+
expiresIn: '15m',
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
// Verify with algorithm restriction
|
|
30
|
+
const payload = jwt.verify(token, SECRET, { algorithms: ['HS256'] });
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
- Use short-lived access tokens (15m) + long-lived refresh tokens (7d)
|
|
34
|
+
- Store refresh tokens server-side; revoke on logout
|
|
35
|
+
- Never store sensitive data (password, PII) in JWT payload
|
|
36
|
+
- Rotate signing keys periodically
|
|
37
|
+
|
|
38
|
+
## Session Management
|
|
39
|
+
- Regenerate session ID after login to prevent fixation
|
|
40
|
+
- Set secure cookie flags: `httpOnly`, `secure`, `sameSite: 'strict'`
|
|
41
|
+
- Enforce idle and absolute timeout
|
|
42
|
+
```typescript
|
|
43
|
+
app.use(session({
|
|
44
|
+
secret: process.env.SESSION_SECRET,
|
|
45
|
+
resave: false,
|
|
46
|
+
saveUninitialized: false,
|
|
47
|
+
cookie: { httpOnly: true, secure: true, sameSite: 'strict', maxAge: 3600000 },
|
|
48
|
+
}));
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Multi-Factor Authentication (MFA)
|
|
52
|
+
- Offer TOTP (e.g., Google Authenticator) as a second factor
|
|
53
|
+
- Provide recovery codes at enrollment; hash them before storage
|
|
54
|
+
- Rate-limit MFA verification attempts to prevent brute force
|
|
55
|
+
|
|
56
|
+
## Checklist
|
|
57
|
+
- Hash passwords with bcrypt (rounds >= 12) or argon2
|
|
58
|
+
- Enforce minimum password length of 12 characters
|
|
59
|
+
- Lock accounts or add delays after repeated failed attempts
|
|
60
|
+
- Use short-lived JWTs with explicit algorithm; never use `alg: none`
|
|
61
|
+
- Regenerate session IDs on privilege changes
|
|
62
|
+
- Implement MFA for admin and sensitive operations
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Dependency Security
|
|
3
|
+
impact: HIGH
|
|
4
|
+
tags: security, dependencies, npm-audit, supply-chain, license
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Dependency Security
|
|
8
|
+
|
|
9
|
+
## npm audit
|
|
10
|
+
```bash
|
|
11
|
+
# Check for known vulnerabilities
|
|
12
|
+
npm audit
|
|
13
|
+
|
|
14
|
+
# Fix automatically where possible
|
|
15
|
+
npm audit fix
|
|
16
|
+
|
|
17
|
+
# Fail CI on critical/high vulnerabilities
|
|
18
|
+
npm audit --audit-level=high
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
- Run `npm audit` in CI pipelines; block merges on high/critical findings
|
|
22
|
+
- Review advisories before applying `npm audit fix --force` (may include breaking changes)
|
|
23
|
+
- Use tools like `socket.dev` or `snyk` for deeper analysis
|
|
24
|
+
|
|
25
|
+
## Lockfile Integrity
|
|
26
|
+
- Always commit `package-lock.json` to version control
|
|
27
|
+
- Use `npm ci` in CI/CD (respects lockfile exactly, fails on mismatch)
|
|
28
|
+
- Review lockfile diffs in PRs for unexpected changes
|
|
29
|
+
```bash
|
|
30
|
+
# CI install — strict, reproducible
|
|
31
|
+
npm ci
|
|
32
|
+
|
|
33
|
+
# Never use `npm install` in CI — it can modify the lockfile
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Supply Chain Attack Prevention
|
|
37
|
+
- Pin exact versions for critical dependencies
|
|
38
|
+
- Verify package provenance when available (`npm audit signatures`)
|
|
39
|
+
- Be cautious with post-install scripts; audit new dependencies before adding
|
|
40
|
+
```bash
|
|
41
|
+
# Check what scripts a package runs
|
|
42
|
+
npm explain <package>
|
|
43
|
+
npm pack <package> --dry-run # inspect contents before install
|
|
44
|
+
|
|
45
|
+
# Disable scripts for untrusted packages
|
|
46
|
+
npm install --ignore-scripts <package>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
- Prefer well-maintained packages with large user bases
|
|
50
|
+
- Monitor for typosquatting (e.g., `lodash` vs `l0dash`)
|
|
51
|
+
- Use `npm-shrinkwrap.json` for published packages requiring locked deps
|
|
52
|
+
|
|
53
|
+
## License Compliance
|
|
54
|
+
```bash
|
|
55
|
+
# Check licenses of all dependencies
|
|
56
|
+
npx license-checker --summary
|
|
57
|
+
npx license-checker --failOn 'GPL-3.0;AGPL-3.0'
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
- Define an allowlist of acceptable licenses for the project
|
|
61
|
+
- Block copyleft licenses (GPL, AGPL) in proprietary codebases
|
|
62
|
+
- Document license policy and automate checks in CI
|
|
63
|
+
|
|
64
|
+
## Checklist
|
|
65
|
+
- `npm audit` runs in CI; high/critical findings block deployment
|
|
66
|
+
- `package-lock.json` committed; CI uses `npm ci`
|
|
67
|
+
- New dependencies reviewed for maintenance status, size, and scripts
|
|
68
|
+
- License compliance checked automatically; policy documented
|
|
69
|
+
- Lockfile diffs reviewed in pull requests
|