aidevops 2.52.1 → 2.53.2
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.md +1 -1
- package/VERSION +1 -1
- package/aidevops.sh +15 -9
- package/package.json +4 -4
- package/scripts/npm-postinstall.js +6 -7
- package/setup.sh +1 -1
- package/templates/deploy-templates.sh +144 -0
- package/templates/home/.agent/README.md +33 -0
- package/templates/home/AGENTS.md +96 -0
- package/templates/home/git/.agent/README.md +48 -0
- package/templates/home/git/AGENTS.md +97 -0
- package/templates/standard-functions.sh +179 -0
- package/templates/wordpress-performance-workflow.md +217 -0
- package/.agent/AGENTS.md +0 -614
- package/.agent/accounts.md +0 -65
- package/.agent/aidevops/add-new-mcp-to-aidevops.md +0 -456
- package/.agent/aidevops/api-integrations.md +0 -335
- package/.agent/aidevops/architecture.md +0 -510
- package/.agent/aidevops/configs.md +0 -274
- package/.agent/aidevops/docs.md +0 -244
- package/.agent/aidevops/extension.md +0 -311
- package/.agent/aidevops/mcp-integrations.md +0 -340
- package/.agent/aidevops/mcp-troubleshooting.md +0 -162
- package/.agent/aidevops/memory-patterns.md +0 -172
- package/.agent/aidevops/providers.md +0 -217
- package/.agent/aidevops/recommendations.md +0 -321
- package/.agent/aidevops/requirements.md +0 -301
- package/.agent/aidevops/resources.md +0 -214
- package/.agent/aidevops/security-requirements.md +0 -174
- package/.agent/aidevops/security.md +0 -350
- package/.agent/aidevops/service-links.md +0 -400
- package/.agent/aidevops/services.md +0 -357
- package/.agent/aidevops/setup.md +0 -153
- package/.agent/aidevops/troubleshooting.md +0 -389
- package/.agent/aidevops.md +0 -124
- package/.agent/build-plus.md +0 -244
- package/.agent/content/guidelines.md +0 -109
- package/.agent/content.md +0 -87
- package/.agent/health.md +0 -59
- package/.agent/legal.md +0 -59
- package/.agent/loop-state/full-loop.local.md +0 -16
- package/.agent/loop-state/ralph-loop.local.md +0 -10
- package/.agent/marketing.md +0 -440
- package/.agent/memory/README.md +0 -260
- package/.agent/onboarding.md +0 -796
- package/.agent/plan-plus.md +0 -245
- package/.agent/research.md +0 -100
- package/.agent/sales.md +0 -333
- package/.agent/scripts/101domains-helper.sh +0 -701
- package/.agent/scripts/add-missing-returns.sh +0 -140
- package/.agent/scripts/agent-browser-helper.sh +0 -311
- package/.agent/scripts/agno-setup.sh +0 -712
- package/.agent/scripts/ahrefs-mcp-wrapper.js +0 -168
- package/.agent/scripts/aidevops-update-check.sh +0 -71
- package/.agent/scripts/ampcode-cli.sh +0 -522
- package/.agent/scripts/auto-version-bump.sh +0 -156
- package/.agent/scripts/autogen-helper.sh +0 -512
- package/.agent/scripts/beads-sync-helper.sh +0 -596
- package/.agent/scripts/closte-helper.sh +0 -5
- package/.agent/scripts/cloudron-helper.sh +0 -321
- package/.agent/scripts/codacy-cli-chunked.sh +0 -581
- package/.agent/scripts/codacy-cli.sh +0 -442
- package/.agent/scripts/code-audit-helper.sh +0 -5
- package/.agent/scripts/coderabbit-cli.sh +0 -417
- package/.agent/scripts/coderabbit-pro-analysis.sh +0 -238
- package/.agent/scripts/commands/code-simplifier.md +0 -86
- package/.agent/scripts/commands/full-loop.md +0 -246
- package/.agent/scripts/commands/postflight-loop.md +0 -103
- package/.agent/scripts/commands/recall.md +0 -182
- package/.agent/scripts/commands/remember.md +0 -132
- package/.agent/scripts/commands/save-todo.md +0 -175
- package/.agent/scripts/commands/session-review.md +0 -154
- package/.agent/scripts/comprehensive-quality-fix.sh +0 -106
- package/.agent/scripts/context-builder-helper.sh +0 -522
- package/.agent/scripts/coolify-cli-helper.sh +0 -674
- package/.agent/scripts/coolify-helper.sh +0 -380
- package/.agent/scripts/crawl4ai-examples.sh +0 -401
- package/.agent/scripts/crawl4ai-helper.sh +0 -1078
- package/.agent/scripts/crewai-helper.sh +0 -681
- package/.agent/scripts/dev-browser-helper.sh +0 -513
- package/.agent/scripts/dns-helper.sh +0 -396
- package/.agent/scripts/domain-research-helper.sh +0 -917
- package/.agent/scripts/dspy-helper.sh +0 -285
- package/.agent/scripts/dspyground-helper.sh +0 -291
- package/.agent/scripts/eeat-score-helper.sh +0 -1242
- package/.agent/scripts/efficient-return-fix.sh +0 -92
- package/.agent/scripts/extract-opencode-prompts.sh +0 -128
- package/.agent/scripts/find-missing-returns.sh +0 -113
- package/.agent/scripts/fix-auth-headers.sh +0 -104
- package/.agent/scripts/fix-common-strings.sh +0 -254
- package/.agent/scripts/fix-content-type.sh +0 -100
- package/.agent/scripts/fix-error-messages.sh +0 -130
- package/.agent/scripts/fix-misplaced-returns.sh +0 -74
- package/.agent/scripts/fix-remaining-literals.sh +0 -152
- package/.agent/scripts/fix-return-statements.sh +0 -41
- package/.agent/scripts/fix-s131-default-cases.sh +0 -249
- package/.agent/scripts/fix-sc2155-simple.sh +0 -102
- package/.agent/scripts/fix-shellcheck-critical.sh +0 -187
- package/.agent/scripts/fix-string-literals.sh +0 -273
- package/.agent/scripts/full-loop-helper.sh +0 -773
- package/.agent/scripts/generate-opencode-agents.sh +0 -497
- package/.agent/scripts/generate-opencode-commands.sh +0 -1629
- package/.agent/scripts/generate-skills.sh +0 -366
- package/.agent/scripts/git-platforms-helper.sh +0 -640
- package/.agent/scripts/gitea-cli-helper.sh +0 -743
- package/.agent/scripts/github-cli-helper.sh +0 -702
- package/.agent/scripts/gitlab-cli-helper.sh +0 -682
- package/.agent/scripts/gsc-add-user-helper.sh +0 -325
- package/.agent/scripts/gsc-sitemap-helper.sh +0 -678
- package/.agent/scripts/hetzner-helper.sh +0 -485
- package/.agent/scripts/hostinger-helper.sh +0 -229
- package/.agent/scripts/keyword-research-helper.sh +0 -1815
- package/.agent/scripts/langflow-helper.sh +0 -544
- package/.agent/scripts/linkedin-automation.py +0 -241
- package/.agent/scripts/linter-manager.sh +0 -599
- package/.agent/scripts/linters-local.sh +0 -434
- package/.agent/scripts/list-keys-helper.sh +0 -488
- package/.agent/scripts/local-browser-automation.py +0 -339
- package/.agent/scripts/localhost-helper.sh +0 -744
- package/.agent/scripts/loop-common.sh +0 -806
- package/.agent/scripts/mainwp-helper.sh +0 -728
- package/.agent/scripts/markdown-formatter.sh +0 -338
- package/.agent/scripts/markdown-lint-fix.sh +0 -311
- package/.agent/scripts/mass-fix-returns.sh +0 -58
- package/.agent/scripts/mcp-diagnose.sh +0 -167
- package/.agent/scripts/mcp-inspector-helper.sh +0 -449
- package/.agent/scripts/memory-helper.sh +0 -650
- package/.agent/scripts/monitor-code-review.sh +0 -255
- package/.agent/scripts/onboarding-helper.sh +0 -706
- package/.agent/scripts/opencode-github-setup-helper.sh +0 -797
- package/.agent/scripts/opencode-test-helper.sh +0 -213
- package/.agent/scripts/pagespeed-helper.sh +0 -464
- package/.agent/scripts/pandoc-helper.sh +0 -362
- package/.agent/scripts/postflight-check.sh +0 -555
- package/.agent/scripts/pre-commit-hook.sh +0 -259
- package/.agent/scripts/pre-edit-check.sh +0 -169
- package/.agent/scripts/qlty-cli.sh +0 -356
- package/.agent/scripts/quality-cli-manager.sh +0 -525
- package/.agent/scripts/quality-feedback-helper.sh +0 -462
- package/.agent/scripts/quality-fix.sh +0 -263
- package/.agent/scripts/quality-loop-helper.sh +0 -1108
- package/.agent/scripts/ralph-loop-helper.sh +0 -836
- package/.agent/scripts/ralph-upstream-check.sh +0 -341
- package/.agent/scripts/secretlint-helper.sh +0 -847
- package/.agent/scripts/servers-helper.sh +0 -241
- package/.agent/scripts/ses-helper.sh +0 -619
- package/.agent/scripts/session-review-helper.sh +0 -404
- package/.agent/scripts/setup-linters-wizard.sh +0 -379
- package/.agent/scripts/setup-local-api-keys.sh +0 -330
- package/.agent/scripts/setup-mcp-integrations.sh +0 -472
- package/.agent/scripts/shared-constants.sh +0 -246
- package/.agent/scripts/site-crawler-helper.sh +0 -1487
- package/.agent/scripts/snyk-helper.sh +0 -940
- package/.agent/scripts/sonarcloud-autofix.sh +0 -193
- package/.agent/scripts/sonarcloud-cli.sh +0 -191
- package/.agent/scripts/sonarscanner-cli.sh +0 -455
- package/.agent/scripts/spaceship-helper.sh +0 -747
- package/.agent/scripts/stagehand-helper.sh +0 -321
- package/.agent/scripts/stagehand-python-helper.sh +0 -321
- package/.agent/scripts/stagehand-python-setup.sh +0 -441
- package/.agent/scripts/stagehand-setup.sh +0 -439
- package/.agent/scripts/system-cleanup.sh +0 -340
- package/.agent/scripts/terminal-title-helper.sh +0 -388
- package/.agent/scripts/terminal-title-setup.sh +0 -549
- package/.agent/scripts/test-stagehand-both-integration.sh +0 -317
- package/.agent/scripts/test-stagehand-integration.sh +0 -309
- package/.agent/scripts/test-stagehand-python-integration.sh +0 -341
- package/.agent/scripts/todo-ready.sh +0 -263
- package/.agent/scripts/tool-version-check.sh +0 -362
- package/.agent/scripts/toon-helper.sh +0 -469
- package/.agent/scripts/twilio-helper.sh +0 -917
- package/.agent/scripts/updown-helper.sh +0 -279
- package/.agent/scripts/validate-mcp-integrations.sh +0 -250
- package/.agent/scripts/validate-version-consistency.sh +0 -131
- package/.agent/scripts/vaultwarden-helper.sh +0 -597
- package/.agent/scripts/vercel-cli-helper.sh +0 -816
- package/.agent/scripts/verify-mirrors.sh +0 -169
- package/.agent/scripts/version-manager.sh +0 -831
- package/.agent/scripts/webhosting-helper.sh +0 -471
- package/.agent/scripts/webhosting-verify.sh +0 -238
- package/.agent/scripts/wordpress-mcp-helper.sh +0 -508
- package/.agent/scripts/worktree-helper.sh +0 -595
- package/.agent/scripts/worktree-sessions.sh +0 -577
- package/.agent/seo/dataforseo.md +0 -215
- package/.agent/seo/domain-research.md +0 -532
- package/.agent/seo/eeat-score.md +0 -659
- package/.agent/seo/google-search-console.md +0 -366
- package/.agent/seo/gsc-sitemaps.md +0 -282
- package/.agent/seo/keyword-research.md +0 -521
- package/.agent/seo/serper.md +0 -278
- package/.agent/seo/site-crawler.md +0 -387
- package/.agent/seo.md +0 -236
- package/.agent/services/accounting/quickfile.md +0 -159
- package/.agent/services/communications/telfon.md +0 -470
- package/.agent/services/communications/twilio.md +0 -569
- package/.agent/services/crm/fluentcrm.md +0 -449
- package/.agent/services/email/ses.md +0 -399
- package/.agent/services/hosting/101domains.md +0 -378
- package/.agent/services/hosting/closte.md +0 -177
- package/.agent/services/hosting/cloudflare.md +0 -251
- package/.agent/services/hosting/cloudron.md +0 -478
- package/.agent/services/hosting/dns-providers.md +0 -335
- package/.agent/services/hosting/domain-purchasing.md +0 -344
- package/.agent/services/hosting/hetzner.md +0 -327
- package/.agent/services/hosting/hostinger.md +0 -287
- package/.agent/services/hosting/localhost.md +0 -419
- package/.agent/services/hosting/spaceship.md +0 -353
- package/.agent/services/hosting/webhosting.md +0 -330
- package/.agent/social-media.md +0 -69
- package/.agent/templates/plans-template.md +0 -114
- package/.agent/templates/prd-template.md +0 -129
- package/.agent/templates/tasks-template.md +0 -108
- package/.agent/templates/todo-template.md +0 -89
- package/.agent/tools/ai-assistants/agno.md +0 -471
- package/.agent/tools/ai-assistants/capsolver.md +0 -326
- package/.agent/tools/ai-assistants/configuration.md +0 -221
- package/.agent/tools/ai-assistants/overview.md +0 -209
- package/.agent/tools/ai-assistants/status.md +0 -171
- package/.agent/tools/ai-assistants/windsurf.md +0 -193
- package/.agent/tools/ai-orchestration/autogen.md +0 -406
- package/.agent/tools/ai-orchestration/crewai.md +0 -445
- package/.agent/tools/ai-orchestration/langflow.md +0 -405
- package/.agent/tools/ai-orchestration/openprose.md +0 -487
- package/.agent/tools/ai-orchestration/overview.md +0 -362
- package/.agent/tools/ai-orchestration/packaging.md +0 -647
- package/.agent/tools/browser/agent-browser.md +0 -464
- package/.agent/tools/browser/browser-automation.md +0 -400
- package/.agent/tools/browser/chrome-devtools.md +0 -282
- package/.agent/tools/browser/crawl4ai-integration.md +0 -422
- package/.agent/tools/browser/crawl4ai-resources.md +0 -277
- package/.agent/tools/browser/crawl4ai-usage.md +0 -416
- package/.agent/tools/browser/crawl4ai.md +0 -585
- package/.agent/tools/browser/dev-browser.md +0 -341
- package/.agent/tools/browser/pagespeed.md +0 -260
- package/.agent/tools/browser/playwright.md +0 -266
- package/.agent/tools/browser/playwriter.md +0 -310
- package/.agent/tools/browser/stagehand-examples.md +0 -456
- package/.agent/tools/browser/stagehand-python.md +0 -483
- package/.agent/tools/browser/stagehand.md +0 -421
- package/.agent/tools/build-agent/agent-review.md +0 -224
- package/.agent/tools/build-agent/build-agent.md +0 -784
- package/.agent/tools/build-mcp/aidevops-plugin.md +0 -476
- package/.agent/tools/build-mcp/api-wrapper.md +0 -445
- package/.agent/tools/build-mcp/build-mcp.md +0 -240
- package/.agent/tools/build-mcp/deployment.md +0 -401
- package/.agent/tools/build-mcp/server-patterns.md +0 -632
- package/.agent/tools/build-mcp/transports.md +0 -366
- package/.agent/tools/code-review/auditing.md +0 -383
- package/.agent/tools/code-review/automation.md +0 -219
- package/.agent/tools/code-review/best-practices.md +0 -203
- package/.agent/tools/code-review/codacy.md +0 -151
- package/.agent/tools/code-review/code-simplifier.md +0 -174
- package/.agent/tools/code-review/code-standards.md +0 -309
- package/.agent/tools/code-review/coderabbit.md +0 -101
- package/.agent/tools/code-review/management.md +0 -155
- package/.agent/tools/code-review/qlty.md +0 -248
- package/.agent/tools/code-review/secretlint.md +0 -565
- package/.agent/tools/code-review/setup.md +0 -250
- package/.agent/tools/code-review/snyk.md +0 -563
- package/.agent/tools/code-review/tools.md +0 -230
- package/.agent/tools/content/summarize.md +0 -353
- package/.agent/tools/context/augment-context-engine.md +0 -468
- package/.agent/tools/context/context-builder-agent.md +0 -76
- package/.agent/tools/context/context-builder.md +0 -375
- package/.agent/tools/context/context7.md +0 -371
- package/.agent/tools/context/dspy.md +0 -302
- package/.agent/tools/context/dspyground.md +0 -374
- package/.agent/tools/context/llm-tldr.md +0 -219
- package/.agent/tools/context/osgrep.md +0 -488
- package/.agent/tools/context/prompt-optimization.md +0 -338
- package/.agent/tools/context/toon.md +0 -292
- package/.agent/tools/conversion/pandoc.md +0 -304
- package/.agent/tools/credentials/api-key-management.md +0 -154
- package/.agent/tools/credentials/api-key-setup.md +0 -224
- package/.agent/tools/credentials/environment-variables.md +0 -180
- package/.agent/tools/credentials/vaultwarden.md +0 -382
- package/.agent/tools/data-extraction/outscraper.md +0 -974
- package/.agent/tools/deployment/coolify-cli.md +0 -388
- package/.agent/tools/deployment/coolify-setup.md +0 -353
- package/.agent/tools/deployment/coolify.md +0 -345
- package/.agent/tools/deployment/vercel.md +0 -390
- package/.agent/tools/git/authentication.md +0 -132
- package/.agent/tools/git/gitea-cli.md +0 -193
- package/.agent/tools/git/github-actions.md +0 -207
- package/.agent/tools/git/github-cli.md +0 -223
- package/.agent/tools/git/gitlab-cli.md +0 -190
- package/.agent/tools/git/opencode-github-security.md +0 -350
- package/.agent/tools/git/opencode-github.md +0 -328
- package/.agent/tools/git/opencode-gitlab.md +0 -252
- package/.agent/tools/git/security.md +0 -196
- package/.agent/tools/git.md +0 -207
- package/.agent/tools/opencode/oh-my-opencode.md +0 -375
- package/.agent/tools/opencode/opencode-anthropic-auth.md +0 -446
- package/.agent/tools/opencode/opencode.md +0 -651
- package/.agent/tools/social-media/bird.md +0 -437
- package/.agent/tools/task-management/beads.md +0 -336
- package/.agent/tools/terminal/terminal-title.md +0 -251
- package/.agent/tools/ui/shadcn.md +0 -196
- package/.agent/tools/ui/ui-skills.md +0 -115
- package/.agent/tools/wordpress/localwp.md +0 -311
- package/.agent/tools/wordpress/mainwp.md +0 -391
- package/.agent/tools/wordpress/scf.md +0 -527
- package/.agent/tools/wordpress/wp-admin.md +0 -729
- package/.agent/tools/wordpress/wp-dev.md +0 -940
- package/.agent/tools/wordpress/wp-preferred.md +0 -398
- package/.agent/tools/wordpress.md +0 -95
- package/.agent/workflows/branch/bugfix.md +0 -63
- package/.agent/workflows/branch/chore.md +0 -95
- package/.agent/workflows/branch/experiment.md +0 -115
- package/.agent/workflows/branch/feature.md +0 -59
- package/.agent/workflows/branch/hotfix.md +0 -98
- package/.agent/workflows/branch/refactor.md +0 -92
- package/.agent/workflows/branch/release.md +0 -96
- package/.agent/workflows/branch.md +0 -347
- package/.agent/workflows/bug-fixing.md +0 -267
- package/.agent/workflows/changelog.md +0 -129
- package/.agent/workflows/code-audit-remote.md +0 -279
- package/.agent/workflows/conversation-starter.md +0 -69
- package/.agent/workflows/error-feedback.md +0 -578
- package/.agent/workflows/feature-development.md +0 -355
- package/.agent/workflows/git-workflow.md +0 -702
- package/.agent/workflows/multi-repo-workspace.md +0 -268
- package/.agent/workflows/plans.md +0 -709
- package/.agent/workflows/postflight.md +0 -604
- package/.agent/workflows/pr.md +0 -571
- package/.agent/workflows/preflight.md +0 -278
- package/.agent/workflows/ralph-loop.md +0 -773
- package/.agent/workflows/release.md +0 -498
- package/.agent/workflows/session-manager.md +0 -254
- package/.agent/workflows/session-review.md +0 -311
- package/.agent/workflows/sql-migrations.md +0 -631
- package/.agent/workflows/version-bump.md +0 -283
- package/.agent/workflows/wiki-update.md +0 -333
- package/.agent/workflows/worktree.md +0 -477
|
@@ -1,309 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Documented code quality standards for compliance checking
|
|
3
|
-
mode: subagent
|
|
4
|
-
tools:
|
|
5
|
-
read: true
|
|
6
|
-
write: false
|
|
7
|
-
edit: false
|
|
8
|
-
bash: true
|
|
9
|
-
glob: true
|
|
10
|
-
grep: true
|
|
11
|
-
webfetch: false
|
|
12
|
-
task: true
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# Code Standards - Quality Rules Reference
|
|
16
|
-
|
|
17
|
-
<!-- AI-CONTEXT-START -->
|
|
18
|
-
|
|
19
|
-
## Quick Reference
|
|
20
|
-
|
|
21
|
-
- **Purpose**: Reference documentation for code quality standards
|
|
22
|
-
- **Platforms**: SonarCloud, CodeFactor, Codacy, ShellCheck
|
|
23
|
-
- **Target**: A-grade across all platforms, zero critical violations
|
|
24
|
-
|
|
25
|
-
**Critical Rules (Zero Tolerance)**:
|
|
26
|
-
|
|
27
|
-
| Rule | Description | Pattern |
|
|
28
|
-
|------|-------------|---------|
|
|
29
|
-
| S7682 | Explicit return statements | `return 0` or `return 1` in every function |
|
|
30
|
-
| S7679 | No direct positional params | `local param="$1"` not `$1` directly |
|
|
31
|
-
| S1192 | Constants for repeated strings | `readonly MSG="text"` for 3+ uses |
|
|
32
|
-
| S1481 | No unused variables | Remove or use declared variables |
|
|
33
|
-
| ShellCheck | Zero violations | All scripts pass `shellcheck` |
|
|
34
|
-
|
|
35
|
-
**Validation Commands**:
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
# Run local linting
|
|
39
|
-
~/.aidevops/agents/scripts/linters-local.sh
|
|
40
|
-
|
|
41
|
-
# Check specific rules
|
|
42
|
-
grep -L "return [01]" .agent/scripts/*.sh # S7682
|
|
43
|
-
grep -n '\$[1-9]' .agent/scripts/*.sh | grep -v 'local.*=.*\$[1-9]' # S7679
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
**Workflow Position**: Reference during development, validated by `/linters-local`
|
|
47
|
-
|
|
48
|
-
<!-- AI-CONTEXT-END -->
|
|
49
|
-
|
|
50
|
-
## Purpose
|
|
51
|
-
|
|
52
|
-
This document defines the **authoritative code quality standards** for the aidevops framework. Use this as a reference during development to ensure compliance.
|
|
53
|
-
|
|
54
|
-
**Related commands**:
|
|
55
|
-
- `/linters-local` - Validates these standards locally
|
|
56
|
-
- `/code-audit-remote` - Validates via external services
|
|
57
|
-
- `/pr` - Orchestrates all checks
|
|
58
|
-
|
|
59
|
-
## Critical Standards (Zero Tolerance)
|
|
60
|
-
|
|
61
|
-
### S7682 - Return Statements
|
|
62
|
-
|
|
63
|
-
Every function MUST have an explicit `return 0` or `return 1`.
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
# CORRECT - Always explicit return
|
|
67
|
-
function_name() {
|
|
68
|
-
local param="$1"
|
|
69
|
-
# Function logic
|
|
70
|
-
return 0 # MANDATORY
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
# INCORRECT - Missing return statement
|
|
74
|
-
function_name() {
|
|
75
|
-
local param="$1"
|
|
76
|
-
# Function logic
|
|
77
|
-
} # This causes S7682 violation
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
**Validation**:
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
grep -L "return [01]" .agent/scripts/*.sh
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
### S7679 - Positional Parameters
|
|
87
|
-
|
|
88
|
-
NEVER use positional parameters directly. Always assign to local variables first.
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
# CORRECT - Local variable assignment
|
|
92
|
-
main() {
|
|
93
|
-
local command="${1:-help}"
|
|
94
|
-
local account_name="$2"
|
|
95
|
-
local target="$3"
|
|
96
|
-
|
|
97
|
-
case "$command" in
|
|
98
|
-
"list")
|
|
99
|
-
list_items "$account_name" # Use local variable
|
|
100
|
-
;;
|
|
101
|
-
esac
|
|
102
|
-
return 0
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
# INCORRECT - Direct positional parameter usage
|
|
106
|
-
main() {
|
|
107
|
-
case "$1" in # This causes S7679 violation
|
|
108
|
-
"list")
|
|
109
|
-
list_items "$2" # This causes S7679 violation
|
|
110
|
-
;;
|
|
111
|
-
esac
|
|
112
|
-
}
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
**Validation**:
|
|
116
|
-
|
|
117
|
-
```bash
|
|
118
|
-
grep -n '\$[1-9]' .agent/scripts/*.sh | grep -v 'local.*=.*\$[1-9]'
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
### S1192 - String Literals
|
|
122
|
-
|
|
123
|
-
Define constants for strings used 3 or more times.
|
|
124
|
-
|
|
125
|
-
```bash
|
|
126
|
-
# CORRECT - Constants at file top
|
|
127
|
-
readonly ERROR_ACCOUNT_REQUIRED="Account name is required"
|
|
128
|
-
readonly ERROR_CONFIG_NOT_FOUND="Configuration file not found"
|
|
129
|
-
readonly SUCCESS_OPERATION_COMPLETE="Operation completed successfully"
|
|
130
|
-
|
|
131
|
-
# Use constants instead of literals
|
|
132
|
-
print_error "$ERROR_ACCOUNT_REQUIRED"
|
|
133
|
-
print_error "$ERROR_CONFIG_NOT_FOUND"
|
|
134
|
-
|
|
135
|
-
# INCORRECT - Repeated string literals
|
|
136
|
-
print_error "Account name is required" # Repeated 3+ times
|
|
137
|
-
print_error "Account name is required" # Causes S1192 violation
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
**Validation**:
|
|
141
|
-
|
|
142
|
-
```bash
|
|
143
|
-
for file in .agent/scripts/*.sh; do
|
|
144
|
-
echo "=== $file ==="
|
|
145
|
-
grep -o '"[^"]*"' "$file" | sort | uniq -c | sort -nr | head -5
|
|
146
|
-
done
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
### S1481 - Unused Variables
|
|
150
|
-
|
|
151
|
-
Only declare variables that are actually used.
|
|
152
|
-
|
|
153
|
-
```bash
|
|
154
|
-
# CORRECT - Only used variables
|
|
155
|
-
function_name() {
|
|
156
|
-
local used_param="$1"
|
|
157
|
-
echo "$used_param"
|
|
158
|
-
return 0
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
# INCORRECT - Unused variable declaration
|
|
162
|
-
function_name() {
|
|
163
|
-
local used_param="$1"
|
|
164
|
-
local unused_param="$2" # This causes S1481 violation
|
|
165
|
-
echo "$used_param"
|
|
166
|
-
return 0
|
|
167
|
-
}
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### ShellCheck Compliance
|
|
171
|
-
|
|
172
|
-
All shell scripts must pass ShellCheck with zero violations.
|
|
173
|
-
|
|
174
|
-
```bash
|
|
175
|
-
# Validate all scripts
|
|
176
|
-
find .agent/scripts/ -name "*.sh" -exec shellcheck {} \;
|
|
177
|
-
|
|
178
|
-
# Validate single script
|
|
179
|
-
shellcheck script.sh
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
## Security Hotspots (Acceptable Patterns)
|
|
183
|
-
|
|
184
|
-
SonarCloud flags these patterns as security hotspots. They are acceptable when properly documented:
|
|
185
|
-
|
|
186
|
-
### HTTP String Detection (S5332)
|
|
187
|
-
|
|
188
|
-
When checking for insecure URLs, not using them:
|
|
189
|
-
|
|
190
|
-
```bash
|
|
191
|
-
# CORRECT - Detection with comment
|
|
192
|
-
# SONAR: Detecting insecure URLs for security audit, not using them
|
|
193
|
-
non_https=$(echo "$data" | jq '[.items[] | select(.url | startswith("http://"))] | length')
|
|
194
|
-
|
|
195
|
-
# INCORRECT - No documentation
|
|
196
|
-
non_https=$(echo "$data" | jq '[.items[] | select(.url | startswith("http://"))] | length')
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
### Localhost HTTP Output (S5332)
|
|
200
|
-
|
|
201
|
-
Local development environments often lack SSL:
|
|
202
|
-
|
|
203
|
-
```bash
|
|
204
|
-
# CORRECT - Intentional localhost HTTP
|
|
205
|
-
if [[ "$ssl" == "true" ]]; then
|
|
206
|
-
print_info "Access your app at: https://$domain"
|
|
207
|
-
else
|
|
208
|
-
# SONAR: Local dev without SSL is intentional
|
|
209
|
-
print_info "Access your app at: http://$domain"
|
|
210
|
-
fi
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
### Curl Pipe to Bash (S4423)
|
|
214
|
-
|
|
215
|
-
For official installers from verified sources:
|
|
216
|
-
|
|
217
|
-
```bash
|
|
218
|
-
# CORRECT - Documented official installer
|
|
219
|
-
# SONAR: Official Bun installer from verified HTTPS source
|
|
220
|
-
curl -fsSL https://bun.sh/install | bash
|
|
221
|
-
|
|
222
|
-
# BETTER - Download and inspect first (for new/unknown sources)
|
|
223
|
-
curl -fsSL https://example.com/install.sh -o /tmp/install.sh
|
|
224
|
-
less /tmp/install.sh # Review script
|
|
225
|
-
bash /tmp/install.sh
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
**When to suppress vs fix:**
|
|
229
|
-
|
|
230
|
-
- **Suppress**: Official installers (bun, nvm, rustup), localhost dev, URL detection
|
|
231
|
-
- **Fix**: Actual HTTP usage in production, unverified installer sources
|
|
232
|
-
|
|
233
|
-
## Platform Targets
|
|
234
|
-
|
|
235
|
-
### SonarCloud
|
|
236
|
-
|
|
237
|
-
| Metric | Target |
|
|
238
|
-
|--------|--------|
|
|
239
|
-
| Quality Gate | Passed |
|
|
240
|
-
| Bugs | 0 |
|
|
241
|
-
| Vulnerabilities | 0 |
|
|
242
|
-
| Code Smells | <50 |
|
|
243
|
-
| Technical Debt | <400 minutes |
|
|
244
|
-
| Security Rating | A |
|
|
245
|
-
| Reliability Rating | A |
|
|
246
|
-
| Maintainability Rating | A |
|
|
247
|
-
|
|
248
|
-
### CodeFactor
|
|
249
|
-
|
|
250
|
-
| Metric | Target |
|
|
251
|
-
|--------|--------|
|
|
252
|
-
| Overall Grade | A |
|
|
253
|
-
| A-grade Files | >85% |
|
|
254
|
-
| Critical Issues | 0 |
|
|
255
|
-
|
|
256
|
-
### Codacy
|
|
257
|
-
|
|
258
|
-
| Metric | Target |
|
|
259
|
-
|--------|--------|
|
|
260
|
-
| Grade | A |
|
|
261
|
-
| Security Issues | 0 |
|
|
262
|
-
| Error Prone | 0 |
|
|
263
|
-
|
|
264
|
-
## Pre-Commit Checklist
|
|
265
|
-
|
|
266
|
-
Before committing, verify:
|
|
267
|
-
|
|
268
|
-
```bash
|
|
269
|
-
# 1. Run local linting
|
|
270
|
-
~/.aidevops/agents/scripts/linters-local.sh
|
|
271
|
-
|
|
272
|
-
# 2. Check return statements
|
|
273
|
-
grep -L "return [01]" .agent/scripts/*.sh
|
|
274
|
-
|
|
275
|
-
# 3. Check positional parameters
|
|
276
|
-
grep -n '\$[1-9]' .agent/scripts/*.sh | grep -v 'local.*=.*\$[1-9]'
|
|
277
|
-
|
|
278
|
-
# 4. Run ShellCheck
|
|
279
|
-
find .agent/scripts/ -name "*.sh" -exec shellcheck {} \;
|
|
280
|
-
|
|
281
|
-
# 5. Check for secrets
|
|
282
|
-
~/.aidevops/agents/scripts/secretlint-helper.sh scan
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
## Quality Scripts
|
|
286
|
-
|
|
287
|
-
| Script | Purpose |
|
|
288
|
-
|--------|---------|
|
|
289
|
-
| `linters-local.sh` | Run all local quality checks |
|
|
290
|
-
| `quality-fix.sh` | Auto-fix common issues |
|
|
291
|
-
| `pre-commit-hook.sh` | Git pre-commit validation |
|
|
292
|
-
| `secretlint-helper.sh` | Secret detection |
|
|
293
|
-
|
|
294
|
-
## Current Status
|
|
295
|
-
|
|
296
|
-
**Multi-Platform Excellence Achieved:**
|
|
297
|
-
|
|
298
|
-
- **SonarCloud**: A-grade maintained
|
|
299
|
-
- **CodeFactor**: A-grade overall
|
|
300
|
-
- **Codacy**: Enterprise-grade compliance
|
|
301
|
-
- **Critical Issues**: S7679 & S1481 = 0 (RESOLVED)
|
|
302
|
-
|
|
303
|
-
## Related Documentation
|
|
304
|
-
|
|
305
|
-
- **Local linting**: `scripts/linters-local.sh`
|
|
306
|
-
- **Remote auditing**: `workflows/code-audit-remote.md`
|
|
307
|
-
- **Unified PR review**: `workflows/pr.md`
|
|
308
|
-
- **Automation guide**: `tools/code-review/automation.md`
|
|
309
|
-
- **Best practices**: `tools/code-review/best-practices.md`
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: CodeRabbit AI code review integration
|
|
3
|
-
mode: subagent
|
|
4
|
-
tools:
|
|
5
|
-
read: true
|
|
6
|
-
write: false
|
|
7
|
-
edit: false
|
|
8
|
-
bash: true
|
|
9
|
-
glob: true
|
|
10
|
-
grep: true
|
|
11
|
-
webfetch: true
|
|
12
|
-
task: true
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# CodeRabbit Analysis Trigger
|
|
16
|
-
|
|
17
|
-
<!-- AI-CONTEXT-START -->
|
|
18
|
-
|
|
19
|
-
## Quick Reference
|
|
20
|
-
|
|
21
|
-
- Purpose: Trigger CodeRabbit AI analysis on pull requests
|
|
22
|
-
- Analysis scope: Shell scripts (.agent/scripts/), MCP configs, docs/
|
|
23
|
-
- Goals: Code quality improvements, framework enhancements, documentation quality
|
|
24
|
-
- Expected fixes: Variable quoting, error handling, return checks, path handling
|
|
25
|
-
- Config validation: JSON schema, env vars, API keys, security
|
|
26
|
-
- Docs fixes: Markdown linting, code blocks, links, formatting
|
|
27
|
-
- Post-analysis: Review suggestions, apply auto-fixes, test, commit, close PR
|
|
28
|
-
<!-- AI-CONTEXT-END -->
|
|
29
|
-
|
|
30
|
-
This file is created to trigger CodeRabbit analysis and gather auto-fix recommendations.
|
|
31
|
-
|
|
32
|
-
## 🎯 **Analysis Goals**
|
|
33
|
-
|
|
34
|
-
### **Code Quality Improvements**
|
|
35
|
-
|
|
36
|
-
- Identify potential auto-fixes for shell scripts
|
|
37
|
-
- Analyze MCP integration code for best practices
|
|
38
|
-
- Review documentation for consistency and clarity
|
|
39
|
-
- Detect any security or performance issues
|
|
40
|
-
|
|
41
|
-
### **Framework Enhancements**
|
|
42
|
-
|
|
43
|
-
- Validate MCP configuration templates
|
|
44
|
-
- Review setup and validation scripts
|
|
45
|
-
- Analyze error handling patterns
|
|
46
|
-
- Check for code duplication or optimization opportunities
|
|
47
|
-
|
|
48
|
-
### **Documentation Quality**
|
|
49
|
-
|
|
50
|
-
- Review Markdown formatting and structure
|
|
51
|
-
- Validate code examples and snippets
|
|
52
|
-
- Check for broken links or references
|
|
53
|
-
- Ensure consistency across documentation files
|
|
54
|
-
|
|
55
|
-
## 🔧 **Expected Auto-Fixes**
|
|
56
|
-
|
|
57
|
-
### **Shell Script Improvements**
|
|
58
|
-
|
|
59
|
-
- Variable quoting and expansion
|
|
60
|
-
- Error handling enhancements
|
|
61
|
-
- Function return value checks
|
|
62
|
-
- Path handling improvements
|
|
63
|
-
|
|
64
|
-
### **Configuration Validation**
|
|
65
|
-
|
|
66
|
-
- JSON schema validation
|
|
67
|
-
- Environment variable handling
|
|
68
|
-
- API key management best practices
|
|
69
|
-
- Security configuration reviews
|
|
70
|
-
|
|
71
|
-
### **Documentation Enhancements**
|
|
72
|
-
|
|
73
|
-
- Markdown linting fixes
|
|
74
|
-
- Code block language specifications
|
|
75
|
-
- Link validation and updates
|
|
76
|
-
- Formatting consistency improvements
|
|
77
|
-
|
|
78
|
-
## 📊 **Analysis Scope**
|
|
79
|
-
|
|
80
|
-
This analysis covers:
|
|
81
|
-
|
|
82
|
-
- All shell scripts in `.agent/scripts/`
|
|
83
|
-
- MCP configuration templates in `configs/mcp-templates/`
|
|
84
|
-
- Documentation files in `docs/`
|
|
85
|
-
- Main README.md and configuration files
|
|
86
|
-
- Setup and validation automation scripts
|
|
87
|
-
|
|
88
|
-
## 🚀 **Post-Analysis Actions**
|
|
89
|
-
|
|
90
|
-
After CodeRabbit analysis:
|
|
91
|
-
|
|
92
|
-
1. Review all suggested improvements
|
|
93
|
-
2. Apply auto-fixes where appropriate
|
|
94
|
-
3. Implement manual fixes for complex issues
|
|
95
|
-
4. Update documentation based on recommendations
|
|
96
|
-
5. Re-run validation scripts to ensure functionality
|
|
97
|
-
6. Commit improvements and close this PR
|
|
98
|
-
|
|
99
|
-
---
|
|
100
|
-
|
|
101
|
-
**This PR will be closed after CodeRabbit analysis is complete and recommendations are implemented.**
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Quality management and monitoring specification
|
|
3
|
-
mode: subagent
|
|
4
|
-
tools:
|
|
5
|
-
read: true
|
|
6
|
-
write: false
|
|
7
|
-
edit: false
|
|
8
|
-
bash: true
|
|
9
|
-
glob: true
|
|
10
|
-
grep: true
|
|
11
|
-
webfetch: true
|
|
12
|
-
task: true
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# Quality Management Specification
|
|
16
|
-
|
|
17
|
-
<!-- AI-CONTEXT-START -->
|
|
18
|
-
|
|
19
|
-
## Quick Reference
|
|
20
|
-
|
|
21
|
-
- Methodology: Zero technical debt through systematic resolution
|
|
22
|
-
- Core principle: Enhance functionality, never delete to fix issues
|
|
23
|
-
- Priority order: S7679 (critical) -> S1481 -> S1192 -> S7682 -> ShellCheck
|
|
24
|
-
- S7679 fix: Use `printf '%s50/month\n' '$'` instead of `echo "$50/month"`
|
|
25
|
-
- S1481 fix: Enhance usage of variable or remove if truly unused
|
|
26
|
-
- S1192 fix: Create `readonly CONSTANT="repeated string"` at file top
|
|
27
|
-
- Key scripts: linters-local.sh, quality-fix.sh, quality-cli-manager.sh
|
|
28
|
-
- Achievement: 349 -> 42 issues (88% reduction), 100% critical resolved
|
|
29
|
-
- Success: Zero S7679/S1481, <10 S1192, 100% feature retention
|
|
30
|
-
<!-- AI-CONTEXT-END -->
|
|
31
|
-
|
|
32
|
-
## Zero Technical Debt Methodology
|
|
33
|
-
|
|
34
|
-
> **Note**: This document is supplementary to the [AGENTS.md](../AGENTS.md).
|
|
35
|
-
> For any conflicts, the main AGENTS.md takes precedence as the single source of truth.
|
|
36
|
-
|
|
37
|
-
### Overview
|
|
38
|
-
|
|
39
|
-
This document provides detailed methodology and historical context for our systematic approach to achieving zero technical debt. Current status: SonarCloud issues reduced from 349 to 66 (81% reduction) while enhancing functionality.
|
|
40
|
-
|
|
41
|
-
### Core Principles
|
|
42
|
-
|
|
43
|
-
#### 1. Functionality Enhancement Over Deletion
|
|
44
|
-
|
|
45
|
-
- **Never remove functionality** to fix quality issues
|
|
46
|
-
- **Enhance existing code** to resolve violations
|
|
47
|
-
- **Add value** while addressing technical debt
|
|
48
|
-
- **Preserve all user-facing features** throughout quality improvements
|
|
49
|
-
|
|
50
|
-
#### 2. Systematic Priority-Based Resolution
|
|
51
|
-
|
|
52
|
-
**Priority Order (SonarCloud Rule Severity):**
|
|
53
|
-
|
|
54
|
-
1. **S7679 (Positional Parameters)** - Critical shell interpretation issues
|
|
55
|
-
2. **S1481 (Unused Variables)** - Code clarity and maintenance
|
|
56
|
-
3. **S1192 (String Literals)** - Code duplication and maintainability
|
|
57
|
-
4. **S7682 (Return Statements)** - Function consistency
|
|
58
|
-
5. **ShellCheck Issues** - Best practices and style
|
|
59
|
-
|
|
60
|
-
#### 3. Automation-First Approach
|
|
61
|
-
|
|
62
|
-
- **Create reusable tools** for each issue type
|
|
63
|
-
- **Batch process** similar violations across files
|
|
64
|
-
- **Document patterns** for future maintenance
|
|
65
|
-
- **Build quality gates** into development workflow
|
|
66
|
-
|
|
67
|
-
### Issue Resolution Patterns
|
|
68
|
-
|
|
69
|
-
#### Positional Parameters (S7679) - RESOLVED ✅
|
|
70
|
-
|
|
71
|
-
**Problem**: Shell interpreting `$50`, `$200` as positional parameters
|
|
72
|
-
**Solution**: Use printf format strings
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
# ❌ BEFORE (triggers S7679)
|
|
76
|
-
echo "Price: $50/month"
|
|
77
|
-
|
|
78
|
-
# ✅ AFTER (compliant)
|
|
79
|
-
printf 'Price: %s50/month\n' '$'
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
#### Unused Variables (S1481) - RESOLVED ✅
|
|
83
|
-
|
|
84
|
-
**Problem**: Variables assigned but never used
|
|
85
|
-
**Solutions**:
|
|
86
|
-
|
|
87
|
-
1. **Enhance functionality** (preferred)
|
|
88
|
-
2. **Remove if truly unused**
|
|
89
|
-
3. **Use in logging/debugging**
|
|
90
|
-
|
|
91
|
-
```bash
|
|
92
|
-
# ❌ BEFORE (unused variable)
|
|
93
|
-
local port
|
|
94
|
-
read -r port
|
|
95
|
-
|
|
96
|
-
# ✅ AFTER (enhanced functionality)
|
|
97
|
-
local port
|
|
98
|
-
read -r port
|
|
99
|
-
if [[ -n "$port" && "$port" != "22" ]]; then
|
|
100
|
-
ssh -p "$port" "$host"
|
|
101
|
-
else
|
|
102
|
-
ssh "$host"
|
|
103
|
-
fi
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
#### String Literals (S1192) - MAJOR PROGRESS 📊
|
|
107
|
-
|
|
108
|
-
**Problem**: Repeated string literals (3+ occurrences)
|
|
109
|
-
**Solution**: Create readonly constants
|
|
110
|
-
|
|
111
|
-
```bash
|
|
112
|
-
# ❌ BEFORE (repeated literals)
|
|
113
|
-
curl -H "Content-Type: application/json"
|
|
114
|
-
curl -H "Content-Type: application/json"
|
|
115
|
-
curl -H "Content-Type: application/json"
|
|
116
|
-
|
|
117
|
-
# ✅ AFTER (constant usage)
|
|
118
|
-
readonly CONTENT_TYPE_JSON="Content-Type: application/json"
|
|
119
|
-
curl -H "$CONTENT_TYPE_JSON"
|
|
120
|
-
curl -H "$CONTENT_TYPE_JSON"
|
|
121
|
-
curl -H "$CONTENT_TYPE_JSON"
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
### Quality Tools & Scripts
|
|
125
|
-
|
|
126
|
-
#### Automated Quality Tools
|
|
127
|
-
|
|
128
|
-
- **linters-local.sh**: Comprehensive multi-platform quality validation
|
|
129
|
-
- **fix-content-type.sh**: Content-Type header consolidation
|
|
130
|
-
- **fix-auth-headers.sh**: Authorization header standardization
|
|
131
|
-
- **fix-error-messages.sh**: Common error message constants
|
|
132
|
-
- **markdown-formatter.sh**: Markdown quality compliance
|
|
133
|
-
|
|
134
|
-
#### Quality CLI Integration
|
|
135
|
-
|
|
136
|
-
- **CodeRabbit CLI**: AI-powered code review
|
|
137
|
-
- **Codacy CLI v2**: Comprehensive static analysis
|
|
138
|
-
- **SonarScanner CLI**: SonarCloud integration
|
|
139
|
-
- **quality-cli-manager.sh**: Unified CLI management
|
|
140
|
-
|
|
141
|
-
### Measurement & Tracking
|
|
142
|
-
|
|
143
|
-
#### Key Metrics
|
|
144
|
-
|
|
145
|
-
- **SonarCloud Issues**: 349 → 42 (88% reduction)
|
|
146
|
-
- **Critical Violations**: S7679 & S1481 = 0 (100% resolved)
|
|
147
|
-
- **String Literals**: 50+ violations eliminated
|
|
148
|
-
- **Code Quality**: A-grade maintained across platforms
|
|
149
|
-
|
|
150
|
-
#### Success Criteria
|
|
151
|
-
|
|
152
|
-
- **Zero Critical Issues**: S7679, S1481 completely resolved
|
|
153
|
-
- **Minimal String Duplication**: <10 S1192 violations
|
|
154
|
-
- **ShellCheck Compliance**: <5 critical violations per file
|
|
155
|
-
- **Functionality Preservation**: 100% feature retention
|