{"owner":"docker","repo":"compose","hasSkills":true,"totalSkillsCount":2,"totalTokensCount":1381,"categories":["root-instruction","cursor-rule"],"hasMcp":false,"mcpConfig":null,"found":["AGENTS.md",".cursorrules (android-jetpack-compose-cursorrules-prompt-file.mdc)"],"skills":{"AGENTS.md":"# Project: Docker Compose\n\nAll agents must conform to [AI_POLICY.md](AI_POLICY.md) and the Compose-specific\nrules in [CONTRIBUTING.md](CONTRIBUTING.md#ai-assisted-contributions).\n\n## Build & Test\n\n- Build: `make build`\n- Test all: `make test`\n- Test unit: `go test ./pkg/...` — needs no Docker daemon; the e2e suite is\n  gated behind the `e2e` build tag and is not picked up\n- Test single: `go test ./pkg/compose/ -run TestFunctionName`\n- E2E tests: `go test -tags e2e ./pkg/e2e/ -run TestName` — requires a Docker\n  daemon and the locally built binary (`make build`)\n\n## E2E tests\n\n- **New e2e tests use the declarative `Scenario` DSL** (`NewScenario` in\n  `pkg/e2e/scenario.go`): intent, inline compose model, steps as\n  `(command → expected observables)`. Read `pkg/e2e/SCENARIO.md` before\n  writing or debugging one — it codifies the rules (state-based checks first,\n  `OutputContains` as last resort, new checks go in `pkg/e2e/checks.go`) and\n  how to exploit failure artifacts and `E2E_KEEP_FAILED=1`.\n\n## Lint\n\n- Linter: golangci-lint v2 (config in `.golangci.yml`)\n- Run: `golangci-lint run --build-tags \"e2e\" ./...`\n- **After modifying any Go code, ALWAYS run the linter and fix all reported issues before considering the task complete.**\n- Lint is also run via Docker: `docker buildx bake lint` (uses version pinned in `Dockerfile`)\n\n## Code Style\n\n- Formatting is enforced by golangci-lint (gofumpt + gci)\n- Import order: stdlib, third-party, local module (enforced by gci)\n- Max line length: 200 chars\n- Max cyclomatic complexity: 16\n- No `io/ioutil`, `github.com/pkg/errors`, `gopkg.in/yaml.v2`, `golang.org/x/exp/maps`, `golang.org/x/exp/slices`\n- Use `github.com/containerd/errdefs` instead of `github.com/docker/docker/errdefs`\n- In tests: use `t.Context()` instead of `context.Background()` or `context.TODO()`\n- Prefer `fmt.Fprintf` over `WriteString(fmt.Sprintf(...))`\n\n## Git\n\n- **All commits MUST be signed off (DCO)**. Always pass `--signoff` (`-s`) to `git commit` and `git commit --amend`.\n\n## Issue and PR Guidelines\n\n- Keep changes scoped to the task. If you're fixing a bug, fix the bug -\n  don't refactor unrelated code, fix unrelated typos, or reformat files you\n  didn't need to touch. Put unrelated improvements in a separate PR.\n- Never create an issue or pull request without the user's explicit instruction.\n- If a user asks you to create a pull request on their behalf, add a file named\n  `AI_AGENT_DISCLOSURE.md` to the change containing the text below followed by\n  the current date (`YYYY-MM-DD`). If the file is already present in the\n  repository, update its date to the current date so the disclosure is always\n  part of the change:\n\n  > *\"This contribution was prepared by an AI agent acting on a human's behalf.\n  > The human submitter may not have independently reviewed or tested the change.\"*\n\n- If a user asks you to create an issue on their behalf, prepend the following\n  line to the issue body:\n\n  > *\"This issue was filed by an AI agent on a human's behalf. The human\n  > submitter may not have independently verified the report.\"*\n",".cursorrules (android-jetpack-compose-cursorrules-prompt-file.mdc)":"---\ndescription: \"Cursor rules for Android development with Jetpack Compose integration.\"\nglobs: **/*\nalwaysApply: false\n---\n// Android Jetpack Compose .cursorrules\n\n// Flexibility Notice\n\n// Note: This is a recommended project structure, but be flexible and adapt to existing project structures.\n// Do not enforce these structural patterns if the project follows a different organization.\n// Focus on maintaining consistency with the existing project architecture while applying Jetpack Compose best practices.\n\n// Project Architecture and Best Practices\n\nconst androidJetpackComposeBestPractices = [\n    \"Adapt to existing project architecture while maintaining clean code principles\",\n    \"Follow Material Design 3 guidelines and components\",\n    \"Implement clean architecture with domain, data, and presentation layers\",\n    \"Use Kotlin coroutines and Flow for asynchronous operations\",\n    \"Implement dependency injection using Hilt\",\n    \"Follow unidirectional data flow with ViewModel and UI State\",\n    \"Use Compose navigation for screen management\",\n    \"Implement proper state hoisting and composition\",\n];\n\n// Folder Structure\n\n// Note: This is a reference structure. Adapt to the project's existing organization\n\nconst projectStructure = `\napp/\n  src/\n    main/\n      java/com/package/\n        data/\n          repository/\n          datasource/\n          models/\n        domain/\n          usecases/\n          models/\n          repository/\n        presentation/\n          screens/\n          components/\n          theme/\n          viewmodels/\n        di/\n        utils/\n      res/\n        values/\n        drawable/\n        mipmap/\n    test/\n    androidTest/\n`;\n\n// Compose UI Guidelines\n\nconst composeGuidelines = `\n1. Use remember and derivedStateOf appropriately\n2. Implement proper recomposition optimization\n3. Use proper Compose modifiers ordering\n4. Follow composable function naming conventions\n5. Implement proper preview annotations\n6. Use proper state management with MutableState\n7. Implement proper error handling and loading states\n8. Use proper theming with MaterialTheme\n9. Follow accessibility guidelines\n10. Implement proper animation patterns\n`;\n\n// Testing Guidelines\n\nconst testingGuidelines = `\n1. Write unit tests for ViewModels and UseCases\n2. Implement UI tests using Compose testing framework\n3. Use fake repositories for testing\n4. Implement proper test coverage\n5. Use proper testing coroutine dispatchers\n`;\n\n// Performance Guidelines\n\nconst performanceGuidelines = `\n1. Minimize recomposition using proper keys\n2. Use proper lazy loading with LazyColumn and LazyRow\n3. Implement efficient image loading\n4. Use proper state management to prevent unnecessary updates\n5. Follow proper lifecycle awareness\n6. Implement proper memory management\n7. Use proper background processing\n`;\n"},"files":{"AGENTS.md":"# Project: Docker Compose\n\nAll agents must conform to [AI_POLICY.md](AI_POLICY.md) and the Compose-specific\nrules in [CONTRIBUTING.md](CONTRIBUTING.md#ai-assisted-contributions).\n\n## Build & Test\n\n- Build: `make build`\n- Test all: `make test`\n- Test unit: `go test ./pkg/...` — needs no Docker daemon; the e2e suite is\n  gated behind the `e2e` build tag and is not picked up\n- Test single: `go test ./pkg/compose/ -run TestFunctionName`\n- E2E tests: `go test -tags e2e ./pkg/e2e/ -run TestName` — requires a Docker\n  daemon and the locally built binary (`make build`)\n\n## E2E tests\n\n- **New e2e tests use the declarative `Scenario` DSL** (`NewScenario` in\n  `pkg/e2e/scenario.go`): intent, inline compose model, steps as\n  `(command → expected observables)`. Read `pkg/e2e/SCENARIO.md` before\n  writing or debugging one — it codifies the rules (state-based checks first,\n  `OutputContains` as last resort, new checks go in `pkg/e2e/checks.go`) and\n  how to exploit failure artifacts and `E2E_KEEP_FAILED=1`.\n\n## Lint\n\n- Linter: golangci-lint v2 (config in `.golangci.yml`)\n- Run: `golangci-lint run --build-tags \"e2e\" ./...`\n- **After modifying any Go code, ALWAYS run the linter and fix all reported issues before considering the task complete.**\n- Lint is also run via Docker: `docker buildx bake lint` (uses version pinned in `Dockerfile`)\n\n## Code Style\n\n- Formatting is enforced by golangci-lint (gofumpt + gci)\n- Import order: stdlib, third-party, local module (enforced by gci)\n- Max line length: 200 chars\n- Max cyclomatic complexity: 16\n- No `io/ioutil`, `github.com/pkg/errors`, `gopkg.in/yaml.v2`, `golang.org/x/exp/maps`, `golang.org/x/exp/slices`\n- Use `github.com/containerd/errdefs` instead of `github.com/docker/docker/errdefs`\n- In tests: use `t.Context()` instead of `context.Background()` or `context.TODO()`\n- Prefer `fmt.Fprintf` over `WriteString(fmt.Sprintf(...))`\n\n## Git\n\n- **All commits MUST be signed off (DCO)**. Always pass `--signoff` (`-s`) to `git commit` and `git commit --amend`.\n\n## Issue and PR Guidelines\n\n- Keep changes scoped to the task. If you're fixing a bug, fix the bug -\n  don't refactor unrelated code, fix unrelated typos, or reformat files you\n  didn't need to touch. Put unrelated improvements in a separate PR.\n- Never create an issue or pull request without the user's explicit instruction.\n- If a user asks you to create a pull request on their behalf, add a file named\n  `AI_AGENT_DISCLOSURE.md` to the change containing the text below followed by\n  the current date (`YYYY-MM-DD`). If the file is already present in the\n  repository, update its date to the current date so the disclosure is always\n  part of the change:\n\n  > *\"This contribution was prepared by an AI agent acting on a human's behalf.\n  > The human submitter may not have independently reviewed or tested the change.\"*\n\n- If a user asks you to create an issue on their behalf, prepend the following\n  line to the issue body:\n\n  > *\"This issue was filed by an AI agent on a human's behalf. The human\n  > submitter may not have independently verified the report.\"*\n",".cursorrules (android-jetpack-compose-cursorrules-prompt-file.mdc)":"---\ndescription: \"Cursor rules for Android development with Jetpack Compose integration.\"\nglobs: **/*\nalwaysApply: false\n---\n// Android Jetpack Compose .cursorrules\n\n// Flexibility Notice\n\n// Note: This is a recommended project structure, but be flexible and adapt to existing project structures.\n// Do not enforce these structural patterns if the project follows a different organization.\n// Focus on maintaining consistency with the existing project architecture while applying Jetpack Compose best practices.\n\n// Project Architecture and Best Practices\n\nconst androidJetpackComposeBestPractices = [\n    \"Adapt to existing project architecture while maintaining clean code principles\",\n    \"Follow Material Design 3 guidelines and components\",\n    \"Implement clean architecture with domain, data, and presentation layers\",\n    \"Use Kotlin coroutines and Flow for asynchronous operations\",\n    \"Implement dependency injection using Hilt\",\n    \"Follow unidirectional data flow with ViewModel and UI State\",\n    \"Use Compose navigation for screen management\",\n    \"Implement proper state hoisting and composition\",\n];\n\n// Folder Structure\n\n// Note: This is a reference structure. Adapt to the project's existing organization\n\nconst projectStructure = `\napp/\n  src/\n    main/\n      java/com/package/\n        data/\n          repository/\n          datasource/\n          models/\n        domain/\n          usecases/\n          models/\n          repository/\n        presentation/\n          screens/\n          components/\n          theme/\n          viewmodels/\n        di/\n        utils/\n      res/\n        values/\n        drawable/\n        mipmap/\n    test/\n    androidTest/\n`;\n\n// Compose UI Guidelines\n\nconst composeGuidelines = `\n1. Use remember and derivedStateOf appropriately\n2. Implement proper recomposition optimization\n3. Use proper Compose modifiers ordering\n4. Follow composable function naming conventions\n5. Implement proper preview annotations\n6. Use proper state management with MutableState\n7. Implement proper error handling and loading states\n8. Use proper theming with MaterialTheme\n9. Follow accessibility guidelines\n10. Implement proper animation patterns\n`;\n\n// Testing Guidelines\n\nconst testingGuidelines = `\n1. Write unit tests for ViewModels and UseCases\n2. Implement UI tests using Compose testing framework\n3. Use fake repositories for testing\n4. Implement proper test coverage\n5. Use proper testing coroutine dispatchers\n`;\n\n// Performance Guidelines\n\nconst performanceGuidelines = `\n1. Minimize recomposition using proper keys\n2. Use proper lazy loading with LazyColumn and LazyRow\n3. Implement efficient image loading\n4. Use proper state management to prevent unnecessary updates\n5. Follow proper lifecycle awareness\n6. Implement proper memory management\n7. Use proper background processing\n`;\n"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","rawUrl":"https://raw.githubusercontent.com/docker/compose/HEAD/AGENTS.md","title":"AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"# Project: Docker Compose\n\nAll agents must conform to [AI_POLICY.md](AI_POLICY.md) and the Compose-specific\nrules in [CONTRIBUTING.md](CONTRIBUTING.md#ai-assisted-contributions).\n\n## Build & Test\n\n- Build: `make build`\n- Test all: `make test`\n- Test unit: `go test ./pkg/...` — needs no Docker daemon; the e2e suite is\n  gated behind the `e2e` build tag and is not picked up\n- Test single: `go test ./pkg/compose/ -run TestFunctionName`\n- E2E tests: `go test -tags e2e ./pkg/e2e/ -run TestName` — requires a Docker\n  daemon and the locally built binary (`make build`)\n\n## E2E tests\n\n- **New e2e tests use the declarative `Scenario` DSL** (`NewScenario` in\n  `pkg/e2e/scenario.go`): intent, inline compose model, steps as\n  `(command → expected observables)`. Read `pkg/e2e/SCENARIO.md` before\n  writing or debugging one — it codifies the rules (state-based checks first,\n  `OutputContains` as last resort, new checks go in `pkg/e2e/checks.go`) and\n  how to exploit failure artifacts and `E2E_KEEP_FAILED=1`.\n\n## Lint\n\n- Linter: golangci-lint v2 (config in `.golangci.yml`)\n- Run: `golangci-lint run --build-tags \"e2e\" ./...`\n- **After modifying any Go code, ALWAYS run the linter and fix all reported issues before considering the task complete.**\n- Lint is also run via Docker: `docker buildx bake lint` (uses version pinned in `Dockerfile`)\n\n## Code Style\n\n- Formatting is enforced by golangci-lint (gofumpt + gci)\n- Import order: stdlib, third-party, local module (enforced by gci)\n- Max line length: 200 chars\n- Max cyclomatic complexity: 16\n- No `io/ioutil`, `github.com/pkg/errors`, `gopkg.in/yaml.v2`, `golang.org/x/exp/maps`, `golang.org/x/exp/slices`\n- Use `github.com/containerd/errdefs` instead of `github.com/docker/docker/errdefs`\n- In tests: use `t.Context()` instead of `context.Background()` or `context.TODO()`\n- Prefer `fmt.Fprintf` over `WriteString(fmt.Sprintf(...))`\n\n## Git\n\n- **All commits MUST be signed off (DCO)**. Always pass `--signoff` (`-s`) to `git commit` and `git commit --amend`.\n\n## Issue and PR Guidelines\n\n- Keep changes scoped to the task. If you're fixing a bug, fix the bug -\n  don't refactor unrelated code, fix unrelated typos, or reformat files you\n  didn't need to touch. Put unrelated improvements in a separate PR.\n- Never create an issue or pull request without the user's explicit instruction.\n- If a user asks you to create a pull request on their behalf, add a file named\n  `AI_AGENT_DISCLOSURE.md` to the change containing the text below followed by\n  the current date (`YYYY-MM-DD`). If the file is already present in the\n  repository, update its date to the current date so the disclosure is always\n  part of the change:\n\n  > *\"This contribution was prepared by an AI agent acting on a human's behalf.\n  > The human submitter may not have independently reviewed or tested the change.\"*\n\n- If a user asks you to create an issue on their behalf, prepend the following\n  line to the issue body:\n\n  > *\"This issue was filed by an AI agent on a human's behalf. The human\n  > submitter may not have independently verified the report.\"*\n","isInternal":false,"tokens":836,"sizeBytes":3091},{"name":".cursorrules","path":".cursorrules (android-jetpack-compose-cursorrules-prompt-file.mdc)","rawUrl":"https://raw.githubusercontent.com/PatrickJS/awesome-cursorrules/main/rules/android-jetpack-compose-cursorrules-prompt-file.mdc","title":"Awesome Cursorrules: android jetpack compose","category":"cursor-rule","format":"markdown","content":"---\ndescription: \"Cursor rules for Android development with Jetpack Compose integration.\"\nglobs: **/*\nalwaysApply: false\n---\n// Android Jetpack Compose .cursorrules\n\n// Flexibility Notice\n\n// Note: This is a recommended project structure, but be flexible and adapt to existing project structures.\n// Do not enforce these structural patterns if the project follows a different organization.\n// Focus on maintaining consistency with the existing project architecture while applying Jetpack Compose best practices.\n\n// Project Architecture and Best Practices\n\nconst androidJetpackComposeBestPractices = [\n    \"Adapt to existing project architecture while maintaining clean code principles\",\n    \"Follow Material Design 3 guidelines and components\",\n    \"Implement clean architecture with domain, data, and presentation layers\",\n    \"Use Kotlin coroutines and Flow for asynchronous operations\",\n    \"Implement dependency injection using Hilt\",\n    \"Follow unidirectional data flow with ViewModel and UI State\",\n    \"Use Compose navigation for screen management\",\n    \"Implement proper state hoisting and composition\",\n];\n\n// Folder Structure\n\n// Note: This is a reference structure. Adapt to the project's existing organization\n\nconst projectStructure = `\napp/\n  src/\n    main/\n      java/com/package/\n        data/\n          repository/\n          datasource/\n          models/\n        domain/\n          usecases/\n          models/\n          repository/\n        presentation/\n          screens/\n          components/\n          theme/\n          viewmodels/\n        di/\n        utils/\n      res/\n        values/\n        drawable/\n        mipmap/\n    test/\n    androidTest/\n`;\n\n// Compose UI Guidelines\n\nconst composeGuidelines = `\n1. Use remember and derivedStateOf appropriately\n2. Implement proper recomposition optimization\n3. Use proper Compose modifiers ordering\n4. Follow composable function naming conventions\n5. Implement proper preview annotations\n6. Use proper state management with MutableState\n7. Implement proper error handling and loading states\n8. Use proper theming with MaterialTheme\n9. Follow accessibility guidelines\n10. Implement proper animation patterns\n`;\n\n// Testing Guidelines\n\nconst testingGuidelines = `\n1. Write unit tests for ViewModels and UseCases\n2. Implement UI tests using Compose testing framework\n3. Use fake repositories for testing\n4. Implement proper test coverage\n5. Use proper testing coroutine dispatchers\n`;\n\n// Performance Guidelines\n\nconst performanceGuidelines = `\n1. Minimize recomposition using proper keys\n2. Use proper lazy loading with LazyColumn and LazyRow\n3. Implement efficient image loading\n4. Use proper state management to prevent unnecessary updates\n5. Follow proper lifecycle awareness\n6. Implement proper memory management\n7. Use proper background processing\n`;\n","tokens":545,"sizeBytes":2817}],"systemPromptSnippet":"<yakaai_skills repo=\"docker/compose\">\n<!-- File: AGENTS.md (Tokens: ~836 | Category: root-instruction) -->\n# Project: Docker Compose\n\nAll agents must conform to [AI_POLICY.md](AI_POLICY.md) and the Compose-specific\nrules in [CONTRIBUTING.md](CONTRIBUTING.md#ai-assisted-contributions).\n\n## Build & Test\n\n- Build: `make build`\n- Test all: `make test`\n- Test unit: `go test ./pkg/...` — needs no Docker daemon; the e2e suite is\n  gated behind the `e2e` build tag and is not picked up\n- Test single: `go test ./pkg/compose/ -run TestFunctionName`\n- E2E tests: `go test -tags e2e ./pkg/e2e/ -run TestName` — requires a Docker\n  daemon and the locally built binary (`make build`)\n\n## E2E tests\n\n- **New e2e tests use the declarative `Scenario` DSL** (`NewScenario` in\n  `pkg/e2e/scenario.go`): intent, inline compose model, steps as\n  `(command → expected observables)`. Read `pkg/e2e/SCENARIO.md` before\n  writing or debugging one — it codifies the rules (state-based checks first,\n  `OutputContains` as last resort, new checks go in `pkg/e2e/checks.go`) and\n  how to exploit failure artifacts and `E2E_KEEP_FAILED=1`.\n\n## Lint\n\n- Linter: golangci-lint v2 (config in `.golangci.yml`)\n- Run: `golangci-lint run --build-tags \"e2e\" ./...`\n- **After modifying any Go code, ALWAYS run the linter and fix all reported issues before considering the task complete.**\n- Lint is also run via Docker: `docker buildx bake lint` (uses version pinned in `Dockerfile`)\n\n## Code Style\n\n- Formatting is enforced by golangci-lint (gofumpt + gci)\n- Import order: stdlib, third-party, local module (enforced by gci)\n- Max line length: 200 chars\n- Max cyclomatic complexity: 16\n- No `io/ioutil`, `github.com/pkg/errors`, `gopkg.in/yaml.v2`, `golang.org/x/exp/maps`, `golang.org/x/exp/slices`\n- Use `github.com/containerd/errdefs` instead of `github.com/docker/docker/errdefs`\n- In tests: use `t.Context()` instead of `context.Background()` or `context.TODO()`\n- Prefer `fmt.Fprintf` over `WriteString(fmt.Sprintf(...))`\n\n## Git\n\n- **All commits MUST be signed off (DCO)**. Always pass `--signoff` (`-s`) to `git commit` and `git commit --amend`.\n\n## Issue and PR Guidelines\n\n- Keep changes scoped to the task. If you're fixing a bug, fix the bug -\n  don't refactor unrelated code, fix unrelated typos, or reformat files you\n  didn't need to touch. Put unrelated improvements in a separate PR.\n- Never create an issue or pull request without the user's explicit instruction.\n- If a user asks you to create a pull request on their behalf, add a file named\n  `AI_AGENT_DISCLOSURE.md` to the change containing the text below followed by\n  the current date (`YYYY-MM-DD`). If the file is already present in the\n  repository, update its date to the current date so the disclosure is always\n  part of the change:\n\n  > *\"This contribution was prepared by an AI agent acting on a human's behalf.\n  > The human submitter may not have independently reviewed or tested the change.\"*\n\n- If a user asks you to create an issue on their behalf, prepend the following\n  line to the issue body:\n\n  > *\"This issue was filed by an AI agent on a human's behalf. The human\n  > submitter may not have independently verified the report.\"*\n\n<!-- File: .cursorrules (android-jetpack-compose-cursorrules-prompt-file.mdc) (Tokens: ~545 | Category: cursor-rule) -->\n---\ndescription: \"Cursor rules for Android development with Jetpack Compose integration.\"\nglobs: **/*\nalwaysApply: false\n---\n// Android Jetpack Compose .cursorrules\n\n// Flexibility Notice\n\n// Note: This is a recommended project structure, but be flexible and adapt to existing project structures.\n// Do not enforce these structural patterns if the project follows a different organization.\n// Focus on maintaining consistency with the existing project architecture while applying Jetpack Compose best practices.\n\n// Project Architecture and Best Practices\n\nconst androidJetpackComposeBestPractices = [\n    \"Adapt to existing project architecture while maintaining clean code principles\",\n    \"Follow Material Design 3 guidelines and components\",\n    \"Implement clean architecture with domain, data, and presentation layers\",\n    \"Use Kotlin coroutines and Flow for asynchronous operations\",\n    \"Implement dependency injection using Hilt\",\n    \"Follow unidirectional data flow with ViewModel and UI State\",\n    \"Use Compose navigation for screen management\",\n    \"Implement proper state hoisting and composition\",\n];\n\n// Folder Structure\n\n// Note: This is a reference structure. Adapt to the project's existing organization\n\nconst projectStructure = `\napp/\n  src/\n    main/\n      java/com/package/\n        data/\n          repository/\n          datasource/\n          models/\n        domain/\n          usecases/\n          models/\n          repository/\n        presentation/\n          screens/\n          components/\n          theme/\n          viewmodels/\n        di/\n        utils/\n      res/\n        values/\n        drawable/\n        mipmap/\n    test/\n    androidTest/\n`;\n\n// Compose UI Guidelines\n\nconst composeGuidelines = `\n1. Use remember and derivedStateOf appropriately\n2. Implement proper recomposition optimization\n3. Use proper Compose modifiers ordering\n4. Follow composable function naming conventions\n5. Implement proper preview annotations\n6. Use proper state management with MutableState\n7. Implement proper error handling and loading states\n8. Use proper theming with MaterialTheme\n9. Follow accessibility guidelines\n10. Implement proper animation patterns\n`;\n\n// Testing Guidelines\n\nconst testingGuidelines = `\n1. Write unit tests for ViewModels and UseCases\n2. Implement UI tests using Compose testing framework\n3. Use fake repositories for testing\n4. Implement proper test coverage\n5. Use proper testing coroutine dispatchers\n`;\n\n// Performance Guidelines\n\nconst performanceGuidelines = `\n1. Minimize recomposition using proper keys\n2. Use proper lazy loading with LazyColumn and LazyRow\n3. Implement efficient image loading\n4. Use proper state management to prevent unnecessary updates\n5. Follow proper lifecycle awareness\n6. Implement proper memory management\n7. Use proper background processing\n`;\n</yakaai_skills>"}