{
  "schemaVersion": "1.0",
  "item": {
    "slug": "fosmvvm-viewmodel-test-generator",
    "name": "FOSMVVM ViewModel Test Generator",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/foscomputerservices/fosmvvm-viewmodel-test-generator",
    "canonicalUrl": "https://clawhub.ai/foscomputerservices/fosmvvm-viewmodel-test-generator",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/fosmvvm-viewmodel-test-generator",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=fosmvvm-viewmodel-test-generator",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "reference.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/fosmvvm-viewmodel-test-generator"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/fosmvvm-viewmodel-test-generator",
    "agentPageUrl": "https://openagent3.xyz/skills/fosmvvm-viewmodel-test-generator/agent",
    "manifestUrl": "https://openagent3.xyz/skills/fosmvvm-viewmodel-test-generator/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/fosmvvm-viewmodel-test-generator/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "FOSMVVM ViewModel Test Generator",
        "body": "Generate test files for ViewModels following FOSMVVM testing patterns."
      },
      {
        "title": "Conceptual Foundation",
        "body": "For full architecture context, see FOSMVVMArchitecture.md | OpenClaw reference\n\nViewModel testing in FOSMVVM verifies three critical aspects:\n\nCodable round-trip - ViewModel encodes and decodes without data loss\nVersioning stability - Structure hasn't changed unexpectedly\nMulti-locale translations - All @LocalizedString properties have values in all supported locales\n\nThe LocalizableTestCase protocol provides infrastructure that tests all three in a single call."
      },
      {
        "title": "When to Use This Skill",
        "body": "Creating tests for new ViewModels\nAdding test coverage to existing ViewModels\nVerifying localization completeness across locales\nTesting ViewModels with embedded/nested child ViewModels\nVerifying @LocalizedSubs substitution behavior"
      },
      {
        "title": "What This Skill Generates",
        "body": "FileLocationPurpose{Name}ViewModelTests.swiftTests/{Target}Tests/Localization/Test suite conforming to LocalizableTestCase{Name}ViewModel.ymlTests/{Target}Tests/TestYAML/YAML translations for test (if needed)"
      },
      {
        "title": "Standard Pattern (Most Tests)",
        "body": "For most ViewModels, a single line provides complete coverage:\n\n@Test func dashboardViewModel() throws {\n    try expectFullViewModelTests(DashboardViewModel.self)\n}\n\nThis verifies:\n\nCodable encoding/decoding\nVersioned ViewModel stability\nTranslations exist for all locales (en, es by default)\n\nThis is sufficient for the vast majority of ViewModel tests."
      },
      {
        "title": "Extended Pattern (Specific Formatting Verification)",
        "body": "When testing specific formatting behavior (substitutions, compound strings), add locale-specific assertions:\n\n@Test func greetingWithSubstitution() throws {\n    try expectFullViewModelTests(GreetingViewModel.self)\n\n    // Verify specific substitution behavior\n    let vm: GreetingViewModel = try .stub()\n        .toJSON(encoder: encoder(locale: en))\n        .fromJSON()\n\n    #expect(try vm.welcomeMessage.localizedString == \"Welcome, John!\")\n}\n\nThis is optional - use only when verifying specific formatting techniques."
      },
      {
        "title": "LocalizableTestCase Protocol",
        "body": "Test suites conform to LocalizableTestCase to access testing infrastructure:\n\nimport FOSFoundation\n@testable import FOSMVVM\nimport FOSTesting\nimport Foundation\nimport Testing\n@testable import {ViewModelsTarget}\n\n@Suite(\"My ViewModel Tests\")\nstruct MyViewModelTests: LocalizableTestCase {\n    let locStore: LocalizationStore\n\n    init() throws {\n        self.locStore = try Self.loadLocalizationStore(\n            bundle: {ViewModelsTarget}.resourceAccess,\n            resourceDirectoryName: \"\"\n        )\n    }\n}\n\nThe {ViewModelsTarget}.resourceAccess is the resource accessor defined when creating the ViewModels SPM target (via FOSResourceAccessor build tool plugin)."
      },
      {
        "title": "What LocalizableTestCase Provides",
        "body": "Property/MethodPurposelocStoreRequired - the localization storelocalesOptional - locales to test (default: en, es)encoder(locale:)Creates a localizing JSONEncoderen, es, enGB, enUSLocale constants"
      },
      {
        "title": "Testing Methods",
        "body": "MethodUse WhenexpectFullViewModelTests(_:)Primary - complete ViewModel testingexpectTranslations(_:)Translation-only verificationexpectFullFieldValidationModelTests(_:)Testing FieldValidationModel typesexpectFullFormFieldTests(_:)Testing FormField instancesexpectCodable(_:encoder:)Codable round-trip onlyexpectVersionedViewModel(_:encoder:)Versioning stability only"
      },
      {
        "title": "ViewModels with @LocalizedString",
        "body": "Every ViewModel with @LocalizedString properties needs YAML entries:\n\n@ViewModel\npublic struct DashboardViewModel: RequestableViewModel {\n    @LocalizedString public var pageTitle      // Needs YAML entry\n    @LocalizedString public var emptyMessage   // Needs YAML entry\n    public let itemCount: Int                   // No YAML needed\n}\n\n# DashboardViewModel.yml\nen:\n  DashboardViewModel:\n    pageTitle: \"Dashboard\"\n    emptyMessage: \"No items yet\"\n\nes:\n  DashboardViewModel:\n    pageTitle: \"Tablero\"\n    emptyMessage: \"No hay elementos todavía\""
      },
      {
        "title": "Embedded ViewModels",
        "body": "When a ViewModel contains child ViewModels, all types in the hierarchy need YAML entries:\n\n@ViewModel\npublic struct BoardViewModel: RequestableViewModel {\n    @LocalizedString public var title\n    public let cards: [CardViewModel]  // Child ViewModel\n}\n\n@ViewModel\npublic struct CardViewModel {\n    @LocalizedString public var cardTitle\n}\n\nBoth BoardViewModel and CardViewModel need YAML entries (can be in same or separate files)."
      },
      {
        "title": "Private Test ViewModels",
        "body": "When tests define private ViewModel structs for testing specific scenarios, those also need YAML:\n\n// In test file\nprivate struct TestParentViewModel: ViewModel {\n    @LocalizedString var title\n    let children: [TestChildViewModel]\n}\n\nprivate struct TestChildViewModel: ViewModel {\n    @LocalizedString var label\n}\n\nAdd entries to a test YAML file for these private types."
      },
      {
        "title": "How to Use This Skill",
        "body": "Invocation:\n/fosmvvm-viewmodel-test-generator\n\nPrerequisites:\n\nViewModel structure understood from conversation context\nLocalization properties identified (@LocalizedString, @LocalizedSubs, etc.)\nYAML localization files exist or will be created\nChild ViewModels identified (if any)\n\nWorkflow integration:\nThis skill is used when adding test coverage for ViewModels. The skill references conversation context automatically—no file paths or Q&A needed. Typically follows fosmvvm-viewmodel-generator."
      },
      {
        "title": "Pattern Implementation",
        "body": "This skill references conversation context to determine test structure:"
      },
      {
        "title": "ViewModel Analysis",
        "body": "From conversation context, the skill identifies:\n\nViewModels to test (from prior discussion or codebase)\nLocalization requirements (@LocalizedString properties)\nChild ViewModels (embedded within parent)\nSubstitution behavior (@LocalizedSubs needing specific verification)"
      },
      {
        "title": "YAML Coverage Check",
        "body": "Verifies completeness:\n\nViewModel YAML entries (all @LocalizedString properties)\nChild ViewModel entries (nested types)\nLocale coverage (en, es, or project-specific locales)"
      },
      {
        "title": "Test File Generation",
        "body": "Creates test suite with:\n\nLocalizableTestCase conformance\nLocalization store initialization\nexpectFullViewModelTests() calls for each ViewModel\nOptional specific formatting tests (substitutions, compound strings)"
      },
      {
        "title": "Context Sources",
        "body": "Skill references information from:\n\nPrior conversation: ViewModels discussed or recently created\nViewModel code: If Claude has read ViewModel files into context\nYAML files: From codebase analysis of existing localizations\nTest patterns: From existing test files in project"
      },
      {
        "title": "File Templates",
        "body": "See reference.md for complete file templates."
      },
      {
        "title": "Testing a Single Top-Level ViewModel",
        "body": "@Test func dashboardViewModel() throws {\n    try expectFullViewModelTests(DashboardViewModel.self)\n}"
      },
      {
        "title": "Testing Multiple Related ViewModels",
        "body": "@Test func boardViewModels() throws {\n    try expectFullViewModelTests(BoardViewModel.self)\n    try expectFullViewModelTests(ColumnViewModel.self)\n    try expectFullViewModelTests(CardViewModel.self)\n}"
      },
      {
        "title": "Testing with Custom Locales",
        "body": "var locales: Set<Locale> { [en, es, enGB] }  // Override default\n\n@Test func multiLocaleViewModel() throws {\n    try expectFullViewModelTests(MyViewModel.self)\n    // Tests en, es, AND en-GB\n}"
      },
      {
        "title": "Testing Substitution Behavior",
        "body": "@Test func greetingSubstitutions() throws {\n    try expectFullViewModelTests(GreetingViewModel.self)\n\n    let vm: GreetingViewModel = try .stub(userName: \"Alice\")\n        .toJSON(encoder: encoder(locale: en))\n        .fromJSON()\n\n    #expect(try vm.welcomeMessage.localizedString == \"Welcome, Alice!\")\n}"
      },
      {
        "title": "Testing Embedded ViewModels",
        "body": "@Test func parentWithChildren() throws {\n    // Tests parent AND verifies children can be encoded/decoded\n    try expectFullViewModelTests(ParentViewModel.self)\n\n    // Optionally verify specific child values\n    let vm: ParentViewModel = try .stub()\n        .toJSON(encoder: encoder(locale: en))\n        .fromJSON()\n\n    #expect(try vm.children[0].label.localizedString == \"Child 1\")\n}"
      },
      {
        "title": "\"Missing Translation\" Error",
        "body": "FOSLocalizableError: _pageTitle -- Missing Translation -- en\n\nCause: YAML entry missing for a @LocalizedString property.\n\nFix: Add the property to the YAML file:\n\nen:\n  MyViewModel:\n    pageTitle: \"Page Title\"  # Add this"
      },
      {
        "title": "\"Is pending localization\" Error",
        "body": "Cause: The ViewModel wasn't encoded with a localizing encoder.\n\nFix: Ensure using encoder(locale:) or expectFullViewModelTests()."
      },
      {
        "title": "Test Passes But Translations Seem Wrong",
        "body": "Cause: YAML values exist but may have typos or wrong content.\n\nFix: Add specific assertions to verify exact values:\n\nlet vm = try .stub().toJSON(encoder: encoder(locale: en)).fromJSON()\n#expect(try vm.title.localizedString == \"Expected Value\")"
      },
      {
        "title": "Naming Conventions",
        "body": "ConceptConventionExampleTest suite{Feature}ViewModelTestsDashboardViewModelTestsTest file{Feature}ViewModelTests.swiftDashboardViewModelTests.swiftYAML file{ViewModelName}.ymlDashboardViewModel.ymlTest method{viewModelName}() or descriptivedashboardViewModel()"
      },
      {
        "title": "See Also",
        "body": "FOSMVVMArchitecture.md - Testing Support - Architecture overview\nfosmvvm-viewmodel-generator - For creating ViewModels\nfosmvvm-fields-generator - For form validation testing\nreference.md - Complete file templates"
      },
      {
        "title": "Version History",
        "body": "VersionDateChanges1.02025-01-02Initial skill1.12026-01-19Updated LocalizableTestCase example to use {ViewModelsTarget}.resourceAccess pattern.1.22026-01-24Update to context-aware approach (remove file-parsing/Q&A). Skill references conversation context instead of asking questions or accepting file paths."
      }
    ],
    "body": "FOSMVVM ViewModel Test Generator\n\nGenerate test files for ViewModels following FOSMVVM testing patterns.\n\nConceptual Foundation\n\nFor full architecture context, see FOSMVVMArchitecture.md | OpenClaw reference\n\nViewModel testing in FOSMVVM verifies three critical aspects:\n\nCodable round-trip - ViewModel encodes and decodes without data loss\nVersioning stability - Structure hasn't changed unexpectedly\nMulti-locale translations - All @LocalizedString properties have values in all supported locales\n\nThe LocalizableTestCase protocol provides infrastructure that tests all three in a single call.\n\nWhen to Use This Skill\nCreating tests for new ViewModels\nAdding test coverage to existing ViewModels\nVerifying localization completeness across locales\nTesting ViewModels with embedded/nested child ViewModels\nVerifying @LocalizedSubs substitution behavior\nWhat This Skill Generates\nFile\tLocation\tPurpose\n{Name}ViewModelTests.swift\tTests/{Target}Tests/Localization/\tTest suite conforming to LocalizableTestCase\n{Name}ViewModel.yml\tTests/{Target}Tests/TestYAML/\tYAML translations for test (if needed)\nThe Testing Pattern\nStandard Pattern (Most Tests)\n\nFor most ViewModels, a single line provides complete coverage:\n\n@Test func dashboardViewModel() throws {\n    try expectFullViewModelTests(DashboardViewModel.self)\n}\n\n\nThis verifies:\n\nCodable encoding/decoding\nVersioned ViewModel stability\nTranslations exist for all locales (en, es by default)\n\nThis is sufficient for the vast majority of ViewModel tests.\n\nExtended Pattern (Specific Formatting Verification)\n\nWhen testing specific formatting behavior (substitutions, compound strings), add locale-specific assertions:\n\n@Test func greetingWithSubstitution() throws {\n    try expectFullViewModelTests(GreetingViewModel.self)\n\n    // Verify specific substitution behavior\n    let vm: GreetingViewModel = try .stub()\n        .toJSON(encoder: encoder(locale: en))\n        .fromJSON()\n\n    #expect(try vm.welcomeMessage.localizedString == \"Welcome, John!\")\n}\n\n\nThis is optional - use only when verifying specific formatting techniques.\n\nLocalizableTestCase Protocol\n\nTest suites conform to LocalizableTestCase to access testing infrastructure:\n\nimport FOSFoundation\n@testable import FOSMVVM\nimport FOSTesting\nimport Foundation\nimport Testing\n@testable import {ViewModelsTarget}\n\n@Suite(\"My ViewModel Tests\")\nstruct MyViewModelTests: LocalizableTestCase {\n    let locStore: LocalizationStore\n\n    init() throws {\n        self.locStore = try Self.loadLocalizationStore(\n            bundle: {ViewModelsTarget}.resourceAccess,\n            resourceDirectoryName: \"\"\n        )\n    }\n}\n\n\nThe {ViewModelsTarget}.resourceAccess is the resource accessor defined when creating the ViewModels SPM target (via FOSResourceAccessor build tool plugin).\n\nWhat LocalizableTestCase Provides\nProperty/Method\tPurpose\nlocStore\tRequired - the localization store\nlocales\tOptional - locales to test (default: en, es)\nencoder(locale:)\tCreates a localizing JSONEncoder\nen, es, enGB, enUS\tLocale constants\nTesting Methods\nMethod\tUse When\nexpectFullViewModelTests(_:)\tPrimary - complete ViewModel testing\nexpectTranslations(_:)\tTranslation-only verification\nexpectFullFieldValidationModelTests(_:)\tTesting FieldValidationModel types\nexpectFullFormFieldTests(_:)\tTesting FormField instances\nexpectCodable(_:encoder:)\tCodable round-trip only\nexpectVersionedViewModel(_:encoder:)\tVersioning stability only\nYAML Requirements\nViewModels with @LocalizedString\n\nEvery ViewModel with @LocalizedString properties needs YAML entries:\n\n@ViewModel\npublic struct DashboardViewModel: RequestableViewModel {\n    @LocalizedString public var pageTitle      // Needs YAML entry\n    @LocalizedString public var emptyMessage   // Needs YAML entry\n    public let itemCount: Int                   // No YAML needed\n}\n\n# DashboardViewModel.yml\nen:\n  DashboardViewModel:\n    pageTitle: \"Dashboard\"\n    emptyMessage: \"No items yet\"\n\nes:\n  DashboardViewModel:\n    pageTitle: \"Tablero\"\n    emptyMessage: \"No hay elementos todavía\"\n\nEmbedded ViewModels\n\nWhen a ViewModel contains child ViewModels, all types in the hierarchy need YAML entries:\n\n@ViewModel\npublic struct BoardViewModel: RequestableViewModel {\n    @LocalizedString public var title\n    public let cards: [CardViewModel]  // Child ViewModel\n}\n\n@ViewModel\npublic struct CardViewModel {\n    @LocalizedString public var cardTitle\n}\n\n\nBoth BoardViewModel and CardViewModel need YAML entries (can be in same or separate files).\n\nPrivate Test ViewModels\n\nWhen tests define private ViewModel structs for testing specific scenarios, those also need YAML:\n\n// In test file\nprivate struct TestParentViewModel: ViewModel {\n    @LocalizedString var title\n    let children: [TestChildViewModel]\n}\n\nprivate struct TestChildViewModel: ViewModel {\n    @LocalizedString var label\n}\n\n\nAdd entries to a test YAML file for these private types.\n\nHow to Use This Skill\n\nInvocation: /fosmvvm-viewmodel-test-generator\n\nPrerequisites:\n\nViewModel structure understood from conversation context\nLocalization properties identified (@LocalizedString, @LocalizedSubs, etc.)\nYAML localization files exist or will be created\nChild ViewModels identified (if any)\n\nWorkflow integration: This skill is used when adding test coverage for ViewModels. The skill references conversation context automatically—no file paths or Q&A needed. Typically follows fosmvvm-viewmodel-generator.\n\nPattern Implementation\n\nThis skill references conversation context to determine test structure:\n\nViewModel Analysis\n\nFrom conversation context, the skill identifies:\n\nViewModels to test (from prior discussion or codebase)\nLocalization requirements (@LocalizedString properties)\nChild ViewModels (embedded within parent)\nSubstitution behavior (@LocalizedSubs needing specific verification)\nYAML Coverage Check\n\nVerifies completeness:\n\nViewModel YAML entries (all @LocalizedString properties)\nChild ViewModel entries (nested types)\nLocale coverage (en, es, or project-specific locales)\nTest File Generation\n\nCreates test suite with:\n\nLocalizableTestCase conformance\nLocalization store initialization\nexpectFullViewModelTests() calls for each ViewModel\nOptional specific formatting tests (substitutions, compound strings)\nContext Sources\n\nSkill references information from:\n\nPrior conversation: ViewModels discussed or recently created\nViewModel code: If Claude has read ViewModel files into context\nYAML files: From codebase analysis of existing localizations\nTest patterns: From existing test files in project\nFile Templates\n\nSee reference.md for complete file templates.\n\nCommon Scenarios\nTesting a Single Top-Level ViewModel\n@Test func dashboardViewModel() throws {\n    try expectFullViewModelTests(DashboardViewModel.self)\n}\n\nTesting Multiple Related ViewModels\n@Test func boardViewModels() throws {\n    try expectFullViewModelTests(BoardViewModel.self)\n    try expectFullViewModelTests(ColumnViewModel.self)\n    try expectFullViewModelTests(CardViewModel.self)\n}\n\nTesting with Custom Locales\nvar locales: Set<Locale> { [en, es, enGB] }  // Override default\n\n@Test func multiLocaleViewModel() throws {\n    try expectFullViewModelTests(MyViewModel.self)\n    // Tests en, es, AND en-GB\n}\n\nTesting Substitution Behavior\n@Test func greetingSubstitutions() throws {\n    try expectFullViewModelTests(GreetingViewModel.self)\n\n    let vm: GreetingViewModel = try .stub(userName: \"Alice\")\n        .toJSON(encoder: encoder(locale: en))\n        .fromJSON()\n\n    #expect(try vm.welcomeMessage.localizedString == \"Welcome, Alice!\")\n}\n\nTesting Embedded ViewModels\n@Test func parentWithChildren() throws {\n    // Tests parent AND verifies children can be encoded/decoded\n    try expectFullViewModelTests(ParentViewModel.self)\n\n    // Optionally verify specific child values\n    let vm: ParentViewModel = try .stub()\n        .toJSON(encoder: encoder(locale: en))\n        .fromJSON()\n\n    #expect(try vm.children[0].label.localizedString == \"Child 1\")\n}\n\nTroubleshooting\n\"Missing Translation\" Error\nFOSLocalizableError: _pageTitle -- Missing Translation -- en\n\n\nCause: YAML entry missing for a @LocalizedString property.\n\nFix: Add the property to the YAML file:\n\nen:\n  MyViewModel:\n    pageTitle: \"Page Title\"  # Add this\n\n\"Is pending localization\" Error\n\nCause: The ViewModel wasn't encoded with a localizing encoder.\n\nFix: Ensure using encoder(locale:) or expectFullViewModelTests().\n\nTest Passes But Translations Seem Wrong\n\nCause: YAML values exist but may have typos or wrong content.\n\nFix: Add specific assertions to verify exact values:\n\nlet vm = try .stub().toJSON(encoder: encoder(locale: en)).fromJSON()\n#expect(try vm.title.localizedString == \"Expected Value\")\n\nNaming Conventions\nConcept\tConvention\tExample\nTest suite\t{Feature}ViewModelTests\tDashboardViewModelTests\nTest file\t{Feature}ViewModelTests.swift\tDashboardViewModelTests.swift\nYAML file\t{ViewModelName}.yml\tDashboardViewModel.yml\nTest method\t{viewModelName}() or descriptive\tdashboardViewModel()\nSee Also\nFOSMVVMArchitecture.md - Testing Support - Architecture overview\nfosmvvm-viewmodel-generator - For creating ViewModels\nfosmvvm-fields-generator - For form validation testing\nreference.md - Complete file templates\nVersion History\nVersion\tDate\tChanges\n1.0\t2025-01-02\tInitial skill\n1.1\t2026-01-19\tUpdated LocalizableTestCase example to use {ViewModelsTarget}.resourceAccess pattern.\n1.2\t2026-01-24\tUpdate to context-aware approach (remove file-parsing/Q&A). Skill references conversation context instead of asking questions or accepting file paths."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/foscomputerservices/fosmvvm-viewmodel-test-generator",
    "publisherUrl": "https://clawhub.ai/foscomputerservices/fosmvvm-viewmodel-test-generator",
    "owner": "foscomputerservices",
    "version": "2.0.6",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/fosmvvm-viewmodel-test-generator",
    "downloadUrl": "https://openagent3.xyz/downloads/fosmvvm-viewmodel-test-generator",
    "agentUrl": "https://openagent3.xyz/skills/fosmvvm-viewmodel-test-generator/agent",
    "manifestUrl": "https://openagent3.xyz/skills/fosmvvm-viewmodel-test-generator/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/fosmvvm-viewmodel-test-generator/agent.md"
  }
}