@kiwidata/grimoire 0.1.1
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/.claude-plugin/plugin.json +8 -0
- package/AGENTS.md +217 -0
- package/README.md +748 -0
- package/bin/grimoire.js +2 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +42 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/archive.d.ts +3 -0
- package/dist/commands/archive.d.ts.map +1 -0
- package/dist/commands/archive.js +22 -0
- package/dist/commands/archive.js.map +1 -0
- package/dist/commands/branch-check.d.ts +3 -0
- package/dist/commands/branch-check.d.ts.map +1 -0
- package/dist/commands/branch-check.js +16 -0
- package/dist/commands/branch-check.js.map +1 -0
- package/dist/commands/check.d.ts +3 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +22 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/ci.d.ts +3 -0
- package/dist/commands/ci.d.ts.map +1 -0
- package/dist/commands/ci.js +18 -0
- package/dist/commands/ci.js.map +1 -0
- package/dist/commands/diff.d.ts +3 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +10 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/docs.d.ts +3 -0
- package/dist/commands/docs.d.ts.map +1 -0
- package/dist/commands/docs.js +11 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/health.d.ts +3 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +13 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +21 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +22 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/log.d.ts +3 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +15 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/map.d.ts +3 -0
- package/dist/commands/map.d.ts.map +1 -0
- package/dist/commands/map.js +17 -0
- package/dist/commands/map.js.map +1 -0
- package/dist/commands/pr.d.ts +3 -0
- package/dist/commands/pr.d.ts.map +1 -0
- package/dist/commands/pr.js +17 -0
- package/dist/commands/pr.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +12 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/test-quality.d.ts +3 -0
- package/dist/commands/test-quality.d.ts.map +1 -0
- package/dist/commands/test-quality.js +37 -0
- package/dist/commands/test-quality.js.map +1 -0
- package/dist/commands/trace.d.ts +3 -0
- package/dist/commands/trace.d.ts.map +1 -0
- package/dist/commands/trace.js +12 -0
- package/dist/commands/trace.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +22 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate.d.ts +3 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +17 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/core/archive.d.ts +9 -0
- package/dist/core/archive.d.ts.map +1 -0
- package/dist/core/archive.js +92 -0
- package/dist/core/archive.js.map +1 -0
- package/dist/core/branch-check.d.ts +27 -0
- package/dist/core/branch-check.d.ts.map +1 -0
- package/dist/core/branch-check.js +205 -0
- package/dist/core/branch-check.js.map +1 -0
- package/dist/core/check.d.ts +24 -0
- package/dist/core/check.d.ts.map +1 -0
- package/dist/core/check.js +372 -0
- package/dist/core/check.js.map +1 -0
- package/dist/core/ci.d.ts +24 -0
- package/dist/core/ci.d.ts.map +1 -0
- package/dist/core/ci.js +162 -0
- package/dist/core/ci.js.map +1 -0
- package/dist/core/detect.d.ts +10 -0
- package/dist/core/detect.d.ts.map +1 -0
- package/dist/core/detect.js +368 -0
- package/dist/core/detect.js.map +1 -0
- package/dist/core/diff.d.ts +29 -0
- package/dist/core/diff.d.ts.map +1 -0
- package/dist/core/diff.js +197 -0
- package/dist/core/diff.js.map +1 -0
- package/dist/core/doc-style.d.ts +16 -0
- package/dist/core/doc-style.d.ts.map +1 -0
- package/dist/core/doc-style.js +192 -0
- package/dist/core/doc-style.js.map +1 -0
- package/dist/core/docs.d.ts +6 -0
- package/dist/core/docs.d.ts.map +1 -0
- package/dist/core/docs.js +478 -0
- package/dist/core/docs.js.map +1 -0
- package/dist/core/health.d.ts +7 -0
- package/dist/core/health.d.ts.map +1 -0
- package/dist/core/health.js +489 -0
- package/dist/core/health.js.map +1 -0
- package/dist/core/hooks.d.ts +5 -0
- package/dist/core/hooks.d.ts.map +1 -0
- package/dist/core/hooks.js +168 -0
- package/dist/core/hooks.js.map +1 -0
- package/dist/core/init.d.ts +9 -0
- package/dist/core/init.d.ts.map +1 -0
- package/dist/core/init.js +563 -0
- package/dist/core/init.js.map +1 -0
- package/dist/core/list.d.ts +4 -0
- package/dist/core/list.d.ts.map +1 -0
- package/dist/core/list.js +170 -0
- package/dist/core/list.js.map +1 -0
- package/dist/core/log.d.ts +8 -0
- package/dist/core/log.d.ts.map +1 -0
- package/dist/core/log.js +150 -0
- package/dist/core/log.js.map +1 -0
- package/dist/core/map.d.ts +9 -0
- package/dist/core/map.d.ts.map +1 -0
- package/dist/core/map.js +302 -0
- package/dist/core/map.js.map +1 -0
- package/dist/core/pr.d.ts +9 -0
- package/dist/core/pr.d.ts.map +1 -0
- package/dist/core/pr.js +273 -0
- package/dist/core/pr.js.map +1 -0
- package/dist/core/shared-setup.d.ts +52 -0
- package/dist/core/shared-setup.d.ts.map +1 -0
- package/dist/core/shared-setup.js +221 -0
- package/dist/core/shared-setup.js.map +1 -0
- package/dist/core/status.d.ts +6 -0
- package/dist/core/status.d.ts.map +1 -0
- package/dist/core/status.js +114 -0
- package/dist/core/status.js.map +1 -0
- package/dist/core/test-quality.d.ts +33 -0
- package/dist/core/test-quality.d.ts.map +1 -0
- package/dist/core/test-quality.js +378 -0
- package/dist/core/test-quality.js.map +1 -0
- package/dist/core/trace.d.ts +6 -0
- package/dist/core/trace.d.ts.map +1 -0
- package/dist/core/trace.js +211 -0
- package/dist/core/trace.js.map +1 -0
- package/dist/core/update.d.ts +10 -0
- package/dist/core/update.d.ts.map +1 -0
- package/dist/core/update.js +149 -0
- package/dist/core/update.js.map +1 -0
- package/dist/core/validate.d.ts +20 -0
- package/dist/core/validate.d.ts.map +1 -0
- package/dist/core/validate.js +275 -0
- package/dist/core/validate.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/config.d.ts +61 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +172 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/fs.d.ts +17 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +38 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/paths.d.ts +10 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +35 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/spawn.d.ts +5 -0
- package/dist/utils/spawn.d.ts.map +1 -0
- package/dist/utils/spawn.js +34 -0
- package/dist/utils/spawn.js.map +1 -0
- package/package.json +68 -0
- package/skills/grimoire-apply/SKILL.md +274 -0
- package/skills/grimoire-audit/SKILL.md +129 -0
- package/skills/grimoire-branch-guard/SKILL.md +111 -0
- package/skills/grimoire-bug/SKILL.md +160 -0
- package/skills/grimoire-bug-explore/SKILL.md +242 -0
- package/skills/grimoire-bug-report/SKILL.md +237 -0
- package/skills/grimoire-bug-session/SKILL.md +222 -0
- package/skills/grimoire-bug-triage/SKILL.md +274 -0
- package/skills/grimoire-commit/SKILL.md +150 -0
- package/skills/grimoire-discover/SKILL.md +297 -0
- package/skills/grimoire-draft/SKILL.md +202 -0
- package/skills/grimoire-plan/SKILL.md +329 -0
- package/skills/grimoire-pr/SKILL.md +134 -0
- package/skills/grimoire-pr-review/SKILL.md +240 -0
- package/skills/grimoire-refactor/SKILL.md +251 -0
- package/skills/grimoire-remove/SKILL.md +112 -0
- package/skills/grimoire-review/SKILL.md +247 -0
- package/skills/grimoire-verify/SKILL.md +223 -0
- package/skills/references/bug-classification.md +154 -0
- package/skills/references/build-vs-buy.md +77 -0
- package/skills/references/elicitation-personas.md +118 -0
- package/skills/references/refactor-register-format.md +88 -0
- package/skills/references/refactor-scan-categories.md +102 -0
- package/skills/references/schema-format.md +68 -0
- package/skills/references/security-compliance.md +110 -0
- package/skills/references/testing-contracts.md +93 -0
- package/templates/context.yml +110 -0
- package/templates/debt-exceptions.yml +61 -0
- package/templates/decision.md +50 -0
- package/templates/dupignore +93 -0
- package/templates/example.feature +24 -0
- package/templates/manifest.md +29 -0
- package/templates/mapignore +58 -0
- package/templates/mapkeys +65 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Grimoire Project Context
|
|
2
|
+
# Captures the deployment environment, related services, and infrastructure
|
|
3
|
+
# that this project depends on or interacts with.
|
|
4
|
+
#
|
|
5
|
+
# This file is NOT a decision record — it describes what IS.
|
|
6
|
+
# Update it when the environment changes (new service, migration, etc.)
|
|
7
|
+
#
|
|
8
|
+
# Created by: grimoire init
|
|
9
|
+
# Last updated: YYYY-MM-DD
|
|
10
|
+
|
|
11
|
+
# --- Deployment ---
|
|
12
|
+
# How and where this project is deployed.
|
|
13
|
+
|
|
14
|
+
deployment:
|
|
15
|
+
# target: ecs | kubernetes | heroku | vercel | lambda | vm | docker-compose | manual
|
|
16
|
+
target:
|
|
17
|
+
# regions: [us-east-1, eu-west-1]
|
|
18
|
+
regions: []
|
|
19
|
+
# environments and their URLs or identifiers
|
|
20
|
+
environments:
|
|
21
|
+
# dev:
|
|
22
|
+
# url: https://dev.example.com
|
|
23
|
+
# notes: "auto-deploys from main"
|
|
24
|
+
# staging:
|
|
25
|
+
# url: https://staging.example.com
|
|
26
|
+
# production:
|
|
27
|
+
# url: https://example.com
|
|
28
|
+
# Path to deploy scripts, Helm charts, Terraform, CDK, etc.
|
|
29
|
+
scripts: []
|
|
30
|
+
# - path: deploy/
|
|
31
|
+
# type: terraform
|
|
32
|
+
# - path: k8s/
|
|
33
|
+
# type: helm
|
|
34
|
+
# - path: .github/workflows/deploy.yml
|
|
35
|
+
# type: github-actions
|
|
36
|
+
|
|
37
|
+
# --- Related Services ---
|
|
38
|
+
# Sibling services this project communicates with at runtime.
|
|
39
|
+
# These are services your team or org owns — for third-party APIs,
|
|
40
|
+
# use schema.yml's external_api section instead.
|
|
41
|
+
|
|
42
|
+
services: []
|
|
43
|
+
# - name: auth-service
|
|
44
|
+
# repo: github.com/org/auth-service
|
|
45
|
+
# owner: platform-team
|
|
46
|
+
# purpose: "Handles OAuth2 flows and token issuance"
|
|
47
|
+
# protocol: grpc
|
|
48
|
+
# port: 50051
|
|
49
|
+
# - name: notification-service
|
|
50
|
+
# repo: github.com/org/notifications
|
|
51
|
+
# owner: platform-team
|
|
52
|
+
# purpose: "Email, SMS, and push notifications"
|
|
53
|
+
# protocol: rest
|
|
54
|
+
# base_url: http://notifications.internal:8080
|
|
55
|
+
# - name: frontend
|
|
56
|
+
# repo: github.com/org/web-app
|
|
57
|
+
# owner: product-team
|
|
58
|
+
# purpose: "React SPA — consumes this project's API"
|
|
59
|
+
# protocol: rest
|
|
60
|
+
|
|
61
|
+
# --- Infrastructure ---
|
|
62
|
+
# Runtime dependencies: databases, caches, queues, storage, etc.
|
|
63
|
+
|
|
64
|
+
infrastructure: []
|
|
65
|
+
# - type: postgres
|
|
66
|
+
# purpose: "Primary data store"
|
|
67
|
+
# host: "${DATABASE_HOST}"
|
|
68
|
+
# notes: "RDS, multi-AZ in production"
|
|
69
|
+
# - type: redis
|
|
70
|
+
# purpose: "Cache and session store"
|
|
71
|
+
# host: "${REDIS_HOST}"
|
|
72
|
+
# - type: rabbitmq
|
|
73
|
+
# purpose: "Async task queue"
|
|
74
|
+
# host: "${BROKER_HOST}"
|
|
75
|
+
# notes: "CloudAMQP in production, docker locally"
|
|
76
|
+
# - type: s3
|
|
77
|
+
# purpose: "User uploads and media"
|
|
78
|
+
# bucket: "${MEDIA_BUCKET}"
|
|
79
|
+
|
|
80
|
+
# --- CI/CD ---
|
|
81
|
+
# Where the build and deploy pipelines live.
|
|
82
|
+
|
|
83
|
+
ci_cd:
|
|
84
|
+
# platform: github-actions | gitlab-ci | circleci | jenkins | buildkite
|
|
85
|
+
platform:
|
|
86
|
+
# Key workflow files
|
|
87
|
+
workflows: []
|
|
88
|
+
# - path: .github/workflows/ci.yml
|
|
89
|
+
# purpose: "Lint, test, build on every PR"
|
|
90
|
+
# - path: .github/workflows/deploy.yml
|
|
91
|
+
# purpose: "Deploy to staging on merge to main, production on tag"
|
|
92
|
+
# deploy_trigger: "merge to main" | "git tag" | "manual"
|
|
93
|
+
deploy_trigger:
|
|
94
|
+
|
|
95
|
+
# --- Observability ---
|
|
96
|
+
# Where to look when things break.
|
|
97
|
+
|
|
98
|
+
observability:
|
|
99
|
+
# logging:
|
|
100
|
+
# platform: datadog | cloudwatch | elk | grafana-loki
|
|
101
|
+
# dashboard: https://app.datadoghq.com/logs?query=service:my-project
|
|
102
|
+
# monitoring:
|
|
103
|
+
# platform: datadog | prometheus | cloudwatch
|
|
104
|
+
# dashboard: https://grafana.internal/d/api-latency
|
|
105
|
+
# alerting:
|
|
106
|
+
# platform: pagerduty | opsgenie | slack
|
|
107
|
+
# channel: "#oncall-alerts"
|
|
108
|
+
# error_tracking:
|
|
109
|
+
# platform: sentry | bugsnag | rollbar
|
|
110
|
+
# project: https://sentry.io/org/project/
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Grimoire Debt Exceptions
|
|
2
|
+
# Explicitly accepted technical debt — items the scanner should skip.
|
|
3
|
+
#
|
|
4
|
+
# Each exception requires a reason, an owner, and a Fowler quadrant classification:
|
|
5
|
+
# deliberate-prudent: "We know, and it's the right trade-off for now"
|
|
6
|
+
# deliberate-reckless: "We know, and we're cutting corners"
|
|
7
|
+
# inadvertent-prudent: "We didn't know then, and fixing isn't worth it now"
|
|
8
|
+
# inadvertent-reckless: "We didn't know, and the cost to fix is too high right now"
|
|
9
|
+
#
|
|
10
|
+
# Exceptions can target:
|
|
11
|
+
# - A specific debt register item (by id)
|
|
12
|
+
# - A file path pattern (glob) + category
|
|
13
|
+
# - A file path pattern (glob) + all categories
|
|
14
|
+
#
|
|
15
|
+
# Expired exceptions are automatically re-flagged during scanning.
|
|
16
|
+
#
|
|
17
|
+
# Created by: grimoire init
|
|
18
|
+
# Last updated: YYYY-MM-DD
|
|
19
|
+
|
|
20
|
+
exceptions: []
|
|
21
|
+
|
|
22
|
+
# --- Examples ---
|
|
23
|
+
#
|
|
24
|
+
# Accept a specific debt register item:
|
|
25
|
+
#
|
|
26
|
+
# - id: debt-003
|
|
27
|
+
# reason: "Splitting config types would break the plugin API contract.
|
|
28
|
+
# Revisit when we version the plugin API."
|
|
29
|
+
# quadrant: deliberate-prudent
|
|
30
|
+
# owner: fred
|
|
31
|
+
# accepted: 2026-04-06
|
|
32
|
+
# expires: 2026-10-01
|
|
33
|
+
#
|
|
34
|
+
# Accept all debt in vendored/generated code:
|
|
35
|
+
#
|
|
36
|
+
# - pattern: "src/vendor/**"
|
|
37
|
+
# category: "*"
|
|
38
|
+
# reason: "Vendored code — we don't own it"
|
|
39
|
+
# quadrant: deliberate-prudent
|
|
40
|
+
# owner: fred
|
|
41
|
+
# accepted: 2026-04-06
|
|
42
|
+
#
|
|
43
|
+
# Accept structural bloat in a specific file:
|
|
44
|
+
#
|
|
45
|
+
# - pattern: "src/legacy/monolith.py"
|
|
46
|
+
# category: structural_bloat
|
|
47
|
+
# reason: "Scheduled for full rewrite in Q3. Incremental refactoring
|
|
48
|
+
# would conflict with the rewrite branch."
|
|
49
|
+
# quadrant: deliberate-prudent
|
|
50
|
+
# owner: jane
|
|
51
|
+
# accepted: 2026-04-06
|
|
52
|
+
# expires: 2026-07-01
|
|
53
|
+
#
|
|
54
|
+
# Accept all complexity findings in generated migration files:
|
|
55
|
+
#
|
|
56
|
+
# - pattern: "**/migrations/**"
|
|
57
|
+
# category: structural_bloat
|
|
58
|
+
# reason: "Auto-generated by framework — complexity is inherent"
|
|
59
|
+
# quadrant: deliberate-prudent
|
|
60
|
+
# owner: team
|
|
61
|
+
# accepted: 2026-04-06
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: proposed
|
|
3
|
+
date: YYYY-MM-DD
|
|
4
|
+
decision-makers: []
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# <Short Title: Problem and Solution>
|
|
8
|
+
|
|
9
|
+
## Context and Problem Statement
|
|
10
|
+
<!-- Why are we making this decision? What forces are at play? -->
|
|
11
|
+
|
|
12
|
+
## Decision Drivers
|
|
13
|
+
<!-- Key factors influencing this decision -->
|
|
14
|
+
-
|
|
15
|
+
-
|
|
16
|
+
|
|
17
|
+
## Considered Options
|
|
18
|
+
1.
|
|
19
|
+
2.
|
|
20
|
+
3.
|
|
21
|
+
|
|
22
|
+
## Decision Outcome
|
|
23
|
+
Chosen option: "", because [justification].
|
|
24
|
+
|
|
25
|
+
### Consequences
|
|
26
|
+
- Good:
|
|
27
|
+
- Bad:
|
|
28
|
+
|
|
29
|
+
### Quality Attributes
|
|
30
|
+
<!-- Delete rows that don't apply. Targets should be measurable. Leave blank if not yet known — the review stage will flag missing targets for quality-sensitive decisions. -->
|
|
31
|
+
|
|
32
|
+
| Attribute | Target | Measurement |
|
|
33
|
+
|------------------|--------|-------------|
|
|
34
|
+
| Latency (p95) | | |
|
|
35
|
+
| Throughput | | |
|
|
36
|
+
| Availability | | |
|
|
37
|
+
| Recovery time | | |
|
|
38
|
+
| Data freshness | | |
|
|
39
|
+
| Concurrent users | | |
|
|
40
|
+
| Storage growth | | |
|
|
41
|
+
| Security (CIA) | | |
|
|
42
|
+
|
|
43
|
+
### Cost of Ownership
|
|
44
|
+
<!-- What are the ongoing costs and benefits of this decision? -->
|
|
45
|
+
- **Maintenance burden**: <!-- What does this add to ongoing maintenance? New dependencies to update, monitoring to watch, migrations to run, concepts for new devs to learn? -->
|
|
46
|
+
- **Ongoing benefits**: <!-- What does this save or enable over time? -->
|
|
47
|
+
- **Sunset criteria**: <!-- Under what conditions should we revisit, replace, or remove this? -->
|
|
48
|
+
|
|
49
|
+
### Confirmation
|
|
50
|
+
<!-- How will we verify this decision was correct? Metrics, tests, review date? -->
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Glob patterns excluded from duplicate detection (jscpd).
|
|
2
|
+
# Matched against paths relative to project root. One glob per line.
|
|
3
|
+
# Lines starting with # are comments.
|
|
4
|
+
#
|
|
5
|
+
# This file is independent of .grimoire/mapignore (structure scan).
|
|
6
|
+
# Edit here to silence duplicate-detection noise without hiding
|
|
7
|
+
# directories from the project map.
|
|
8
|
+
|
|
9
|
+
# Version control
|
|
10
|
+
**/.git/**
|
|
11
|
+
|
|
12
|
+
# Dependencies
|
|
13
|
+
**/node_modules/**
|
|
14
|
+
**/.venv/**
|
|
15
|
+
**/venv/**
|
|
16
|
+
**/env/**
|
|
17
|
+
**/vendor/**
|
|
18
|
+
**/bower_components/**
|
|
19
|
+
**/third_party/**
|
|
20
|
+
**/external/**
|
|
21
|
+
**/libs/**
|
|
22
|
+
**/Pods/**
|
|
23
|
+
**/Carthage/**
|
|
24
|
+
**/site-packages/**
|
|
25
|
+
**/deps/**
|
|
26
|
+
**/.pnpm-store/**
|
|
27
|
+
**/.yarn/**
|
|
28
|
+
|
|
29
|
+
# Build output
|
|
30
|
+
**/dist/**
|
|
31
|
+
**/build/**
|
|
32
|
+
**/.next/**
|
|
33
|
+
**/.nuxt/**
|
|
34
|
+
**/out/**
|
|
35
|
+
**/target/**
|
|
36
|
+
**/.gradle/**
|
|
37
|
+
**/bin/**
|
|
38
|
+
**/obj/**
|
|
39
|
+
|
|
40
|
+
# Caches
|
|
41
|
+
**/__pycache__/**
|
|
42
|
+
**/.pytest_cache/**
|
|
43
|
+
**/.mypy_cache/**
|
|
44
|
+
**/.ruff_cache/**
|
|
45
|
+
**/.tox/**
|
|
46
|
+
**/.cache/**
|
|
47
|
+
**/.parcel-cache/**
|
|
48
|
+
**/.turbo/**
|
|
49
|
+
|
|
50
|
+
# Coverage and test artifacts
|
|
51
|
+
**/coverage/**
|
|
52
|
+
**/.nyc_output/**
|
|
53
|
+
**/htmlcov/**
|
|
54
|
+
|
|
55
|
+
# Generated code — Protobuf, gRPC
|
|
56
|
+
**/*_pb2.py
|
|
57
|
+
**/*_pb2_grpc.py
|
|
58
|
+
**/*.pb.go
|
|
59
|
+
**/*.pb.cc
|
|
60
|
+
**/*.pb.h
|
|
61
|
+
**/*_pb.js
|
|
62
|
+
**/*_pb.d.ts
|
|
63
|
+
**/*.pb.dart
|
|
64
|
+
|
|
65
|
+
# Generated code — OpenAPI / Swagger clients
|
|
66
|
+
**/generated/**
|
|
67
|
+
**/*_generated.*
|
|
68
|
+
**/*.generated.*
|
|
69
|
+
**/openapi/**
|
|
70
|
+
**/swagger/**
|
|
71
|
+
|
|
72
|
+
# Generated code — GraphQL
|
|
73
|
+
**/__generated__/**
|
|
74
|
+
**/graphql.schema.json
|
|
75
|
+
|
|
76
|
+
# Minified / bundled assets
|
|
77
|
+
**/*.min.js
|
|
78
|
+
**/*.min.css
|
|
79
|
+
**/*.bundle.js
|
|
80
|
+
**/*.chunk.js
|
|
81
|
+
|
|
82
|
+
# Database migrations (often near-duplicate boilerplate)
|
|
83
|
+
**/migrations/**
|
|
84
|
+
**/alembic/versions/**
|
|
85
|
+
|
|
86
|
+
# Lock files and compiled artifacts
|
|
87
|
+
**/*.lock
|
|
88
|
+
**/*.map
|
|
89
|
+
|
|
90
|
+
# Snapshots / fixtures (duplication here is intentional)
|
|
91
|
+
**/__snapshots__/**
|
|
92
|
+
**/fixtures/**
|
|
93
|
+
**/testdata/**
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
Feature: Login with two-factor authentication
|
|
2
|
+
As a user
|
|
3
|
+
I want to verify my identity with a second factor
|
|
4
|
+
So that my account is protected from unauthorized access
|
|
5
|
+
|
|
6
|
+
Background:
|
|
7
|
+
Given I am on the login page
|
|
8
|
+
|
|
9
|
+
Scenario: Successful login with valid TOTP code
|
|
10
|
+
Given I have entered valid credentials
|
|
11
|
+
When I enter a valid TOTP code
|
|
12
|
+
Then I should be redirected to the dashboard
|
|
13
|
+
|
|
14
|
+
Scenario: Login rejected with expired TOTP code
|
|
15
|
+
Given I have entered valid credentials
|
|
16
|
+
When I enter an expired TOTP code
|
|
17
|
+
Then I should see an error message "Code expired"
|
|
18
|
+
And I should remain on the verification page
|
|
19
|
+
|
|
20
|
+
Scenario: Login rejected with invalid TOTP code
|
|
21
|
+
Given I have entered valid credentials
|
|
22
|
+
When I enter an invalid TOTP code
|
|
23
|
+
Then I should see an error message "Invalid code"
|
|
24
|
+
And I should remain on the verification page
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: draft
|
|
3
|
+
complexity:
|
|
4
|
+
branch:
|
|
5
|
+
design_ref:
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Change: <Brief description>
|
|
9
|
+
|
|
10
|
+
## Why
|
|
11
|
+
<!-- 1-2 sentences: what problem or opportunity does this address? How will you know it's solved? -->
|
|
12
|
+
|
|
13
|
+
## Non-goals
|
|
14
|
+
<!-- What is explicitly out of scope? What should this change NOT do, NOT handle, or NOT affect? Downstream skills use this to catch scope creep during planning and review. -->
|
|
15
|
+
|
|
16
|
+
## Feature Changes
|
|
17
|
+
<!-- List each feature file affected. Use ADDED, MODIFIED, or REMOVED. -->
|
|
18
|
+
- **ADDED** `<capability>/<name>.feature` —
|
|
19
|
+
- **MODIFIED** `<capability>/<name>.feature` —
|
|
20
|
+
- **REMOVED** `<capability>/<name>.feature` —
|
|
21
|
+
|
|
22
|
+
## Scenarios Added
|
|
23
|
+
<!-- List new scenarios by file -->
|
|
24
|
+
|
|
25
|
+
## Scenarios Modified
|
|
26
|
+
<!-- List changed scenarios with brief description of what changed -->
|
|
27
|
+
|
|
28
|
+
## Decisions
|
|
29
|
+
<!-- List any ADRs created or superseded as part of this change -->
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Directories and patterns to ignore when scanning the codebase
|
|
2
|
+
# Uses glob-style patterns, one per line
|
|
3
|
+
# Lines starting with # are comments
|
|
4
|
+
|
|
5
|
+
# Version control
|
|
6
|
+
.git
|
|
7
|
+
|
|
8
|
+
# Dependencies
|
|
9
|
+
node_modules
|
|
10
|
+
.venv
|
|
11
|
+
venv
|
|
12
|
+
env
|
|
13
|
+
vendor
|
|
14
|
+
bower_components
|
|
15
|
+
third_party
|
|
16
|
+
external
|
|
17
|
+
Pods
|
|
18
|
+
Carthage
|
|
19
|
+
site-packages
|
|
20
|
+
.pnpm-store
|
|
21
|
+
.yarn
|
|
22
|
+
|
|
23
|
+
# Build output
|
|
24
|
+
dist
|
|
25
|
+
build
|
|
26
|
+
.next
|
|
27
|
+
.nuxt
|
|
28
|
+
out
|
|
29
|
+
target
|
|
30
|
+
.gradle
|
|
31
|
+
obj
|
|
32
|
+
|
|
33
|
+
# Caches
|
|
34
|
+
__pycache__
|
|
35
|
+
.pytest_cache
|
|
36
|
+
.mypy_cache
|
|
37
|
+
.ruff_cache
|
|
38
|
+
.tox
|
|
39
|
+
.cache
|
|
40
|
+
.parcel-cache
|
|
41
|
+
.turbo
|
|
42
|
+
|
|
43
|
+
# Coverage and test artifacts
|
|
44
|
+
coverage
|
|
45
|
+
.nyc_output
|
|
46
|
+
htmlcov
|
|
47
|
+
|
|
48
|
+
# IDE and OS
|
|
49
|
+
.idea
|
|
50
|
+
.vscode
|
|
51
|
+
.DS_Store
|
|
52
|
+
|
|
53
|
+
# Package metadata
|
|
54
|
+
*.egg-info
|
|
55
|
+
.eggs
|
|
56
|
+
|
|
57
|
+
# Containers
|
|
58
|
+
.docker
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Key files that indicate what a directory is for
|
|
2
|
+
# Format: filename = type
|
|
3
|
+
# Lines starting with # are comments
|
|
4
|
+
|
|
5
|
+
# Node / JavaScript / TypeScript
|
|
6
|
+
package.json = node-package
|
|
7
|
+
tsconfig.json = typescript-config
|
|
8
|
+
index.ts = module-entry
|
|
9
|
+
index.js = module-entry
|
|
10
|
+
routes.ts = api-routes
|
|
11
|
+
routes.js = api-routes
|
|
12
|
+
middleware.ts = middleware
|
|
13
|
+
middleware.js = middleware
|
|
14
|
+
eslint.config.js = linter-config
|
|
15
|
+
.eslintrc.js = linter-config
|
|
16
|
+
.eslintrc.json = linter-config
|
|
17
|
+
jest.config.js = test-config
|
|
18
|
+
jest.config.ts = test-config
|
|
19
|
+
vitest.config.ts = test-config
|
|
20
|
+
|
|
21
|
+
# Python
|
|
22
|
+
pyproject.toml = python-package
|
|
23
|
+
setup.py = python-package
|
|
24
|
+
setup.cfg = python-config
|
|
25
|
+
requirements.txt = python-deps
|
|
26
|
+
Pipfile = python-deps
|
|
27
|
+
__init__.py = python-module
|
|
28
|
+
conftest.py = pytest-fixtures
|
|
29
|
+
pytest.ini = test-config
|
|
30
|
+
|
|
31
|
+
# Django
|
|
32
|
+
urls.py = django-urls
|
|
33
|
+
views.py = django-views
|
|
34
|
+
models.py = django-models
|
|
35
|
+
serializers.py = drf-serializers
|
|
36
|
+
admin.py = django-admin
|
|
37
|
+
apps.py = django-app
|
|
38
|
+
settings.py = django-settings
|
|
39
|
+
manage.py = django-management
|
|
40
|
+
middleware.py = middleware
|
|
41
|
+
|
|
42
|
+
# FastAPI / Flask
|
|
43
|
+
main.py = app-entry
|
|
44
|
+
app.py = app-entry
|
|
45
|
+
|
|
46
|
+
# Background tasks
|
|
47
|
+
tasks.py = background-tasks
|
|
48
|
+
celery.py = task-queue
|
|
49
|
+
|
|
50
|
+
# Database
|
|
51
|
+
alembic.ini = db-migrations
|
|
52
|
+
schema.prisma = db-schema
|
|
53
|
+
|
|
54
|
+
# Build / Deploy
|
|
55
|
+
Dockerfile = container
|
|
56
|
+
docker-compose.yml = container-orchestration
|
|
57
|
+
docker-compose.yaml = container-orchestration
|
|
58
|
+
Makefile = build-system
|
|
59
|
+
Procfile = deployment
|
|
60
|
+
|
|
61
|
+
# Go
|
|
62
|
+
go.mod = go-module
|
|
63
|
+
|
|
64
|
+
# Rust
|
|
65
|
+
Cargo.toml = rust-package
|