devendra-skill-package 1.0.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/.github/skills/boiler-project-generator/SKILL.md +103 -0
- package/.github/skills/boiler-project-generator/assets/templates/android/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/angular/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/flutter/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/ios/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/react/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/README.md +3 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/api-setup.ts +76 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/component-primary-button.tsx +29 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/env-config.env +4 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-auth-screen.tsx +45 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-dashboard-screen.tsx +45 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/feature-profile-screen.tsx +45 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/hook-use-app-boot.ts +11 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/navigation-setup.tsx +25 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/project-structure.md +24 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-hooks.ts +5 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-session-slice.ts +29 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/redux-store.ts +15 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/theme-index.ts +23 -0
- package/.github/skills/boiler-project-generator/assets/templates/react-native/utils-helpers.ts +7 -0
- package/.github/skills/boiler-project-generator/metadata.yaml +29 -0
- package/.github/skills/boiler-project-generator/references/android.md +19 -0
- package/.github/skills/boiler-project-generator/references/angular.md +14 -0
- package/.github/skills/boiler-project-generator/references/flutter.md +17 -0
- package/.github/skills/boiler-project-generator/references/ios.md +17 -0
- package/.github/skills/boiler-project-generator/references/react-native.md +103 -0
- package/.github/skills/boiler-project-generator/references/react.md +17 -0
- package/.github/skills/boiler-project-generator/scripts/angular.js +43 -0
- package/.github/skills/boiler-project-generator/scripts/generate-project.mjs +107 -0
- package/.github/skills/boiler-project-generator/scripts/init.js +105 -0
- package/.github/skills/boiler-project-generator/scripts/react-native.js +1041 -0
- package/.github/skills/boiler-project-generator/scripts/react.js +32 -0
- package/.github/skills/clean-architecture-generator/SKILL.md +235 -0
- package/.github/skills/clean-architecture-generator/references/architecture-core.md +126 -0
- package/.github/skills/clean-architecture-generator/references/platform-angular.md +374 -0
- package/.github/skills/clean-architecture-generator/references/platform-flutter.md +366 -0
- package/.github/skills/clean-architecture-generator/references/platform-react-native.md +590 -0
- package/.github/skills/clean-architecture-generator/references/platform-react.md +261 -0
- package/.github/skills/code-test-coverage-analyzer/SKILL.md +1358 -0
- package/.github/skills/code-test-coverage-analyzer/assets/config-questionnaire.md +118 -0
- package/.github/skills/code-test-coverage-analyzer/assets/conflict-resolution-protocol.md +99 -0
- package/.github/skills/code-test-coverage-analyzer/assets/coverage-calculation-rules.md +294 -0
- package/.github/skills/code-test-coverage-analyzer/assets/multi-strategy-search.md +145 -0
- package/.github/skills/code-test-coverage-analyzer/assets/output-file-contracts.md +651 -0
- package/.github/skills/code-test-coverage-analyzer/assets/status-definitions.md +273 -0
- package/.github/skills/code-test-coverage-analyzer/examples/example-invocation.md +208 -0
- package/.github/skills/code-test-coverage-analyzer/references/android-patterns.md +229 -0
- package/.github/skills/code-test-coverage-analyzer/references/angular-patterns.md +177 -0
- package/.github/skills/code-test-coverage-analyzer/references/backend-patterns.md +383 -0
- package/.github/skills/code-test-coverage-analyzer/references/flutter-patterns.md +254 -0
- package/.github/skills/code-test-coverage-analyzer/references/ios-patterns.md +228 -0
- package/.github/skills/code-test-coverage-analyzer/references/react-native-patterns.md +431 -0
- package/.github/skills/code-test-coverage-analyzer/references/react-patterns.md +206 -0
- package/.github/skills/code-test-coverage-analyzer/scripts/detect-platform.ps1 +261 -0
- package/.github/skills/code-test-coverage-analyzer/scripts/scan-repository.ps1 +242 -0
- package/.github/skills/code-test-coverage-analyzer/templates/brd-compliance-row.md +107 -0
- package/.github/skills/code-test-coverage-analyzer/templates/test-case-row.md +130 -0
- package/.github/skills/code-test-coverage-analyzer/templates/user-story-compliance-row.md +170 -0
- package/.github/skills/custom-font-integrator/SKILL.md +373 -0
- package/.github/skills/custom-font-integrator/assets/FontTestScreen.js +150 -0
- package/.github/skills/custom-font-integrator/references/example-info-plist.xml +21 -0
- package/.github/skills/custom-font-integrator/scripts/setup-fonts.sh +99 -0
- package/.github/skills/encryption-decryption-utility/Instructions.md +282 -0
- package/.github/skills/encryption-decryption-utility/README.md +222 -0
- package/.github/skills/encryption-decryption-utility/SKILL.md +645 -0
- package/.github/skills/encryption-decryption-utility/assets/encryption-config-template.json +13 -0
- package/.github/skills/encryption-decryption-utility/assets/platform-matrix.json +180 -0
- package/.github/skills/encryption-decryption-utility/metadata.yaml +51 -0
- package/.github/skills/encryption-decryption-utility/references/android-crypto.md +157 -0
- package/.github/skills/encryption-decryption-utility/references/angular-crypto.md +130 -0
- package/.github/skills/encryption-decryption-utility/references/approach-1-webcrypto.md +95 -0
- package/.github/skills/encryption-decryption-utility/references/approach-2-rsa-aes-cbc.md +111 -0
- package/.github/skills/encryption-decryption-utility/references/approach-3-aes-sharedkey.md +114 -0
- package/.github/skills/encryption-decryption-utility/references/architecture.md +233 -0
- package/.github/skills/encryption-decryption-utility/references/backend-alignment.md +506 -0
- package/.github/skills/encryption-decryption-utility/references/dependency-guidance.md +234 -0
- package/.github/skills/encryption-decryption-utility/references/ec-implementation.md +832 -0
- package/.github/skills/encryption-decryption-utility/references/error-handling-playbook.md +234 -0
- package/.github/skills/encryption-decryption-utility/references/flutter-crypto.md +105 -0
- package/.github/skills/encryption-decryption-utility/references/ios-crypto.md +338 -0
- package/.github/skills/encryption-decryption-utility/references/native-rsa-implementation.md +373 -0
- package/.github/skills/encryption-decryption-utility/references/node-crypto.md +86 -0
- package/.github/skills/encryption-decryption-utility/references/react-crypto.md +105 -0
- package/.github/skills/encryption-decryption-utility/references/react-native-crypto.md +1001 -0
- package/.github/skills/encryption-decryption-utility/references/react-web-crypto.md +668 -0
- package/.github/skills/encryption-decryption-utility/references/security-checklist.md +176 -0
- package/.github/skills/encryption-decryption-utility/references/web-crypto.md +74 -0
- package/.github/skills/encryption-decryption-utility/scripts/detect.js +128 -0
- package/.github/skills/encryption-decryption-utility/scripts/install.js +1713 -0
- package/.github/skills/encryption-decryption-utility/scripts/setup.js +800 -0
- package/.github/skills/encryption-decryption-utility/template.md +241 -0
- package/.github/skills/encryption-decryption-utility/templates/config-questionnaire.md +467 -0
- package/.github/skills/encryption-decryption-utility/templates/delivery-checklist.md +206 -0
- package/.github/skills/encryption-decryption-utility/templates/implementation-plan.md +304 -0
- package/.github/skills/feature-generator/SKILL.MD +2741 -0
- package/.github/skills/feature-generator/assets/fingerprint-schema.json +385 -0
- package/.github/skills/feature-generator/assets/spec-template.md +172 -0
- package/.github/skills/feature-generator/assets/transform-rules.json +82 -0
- package/.github/skills/feature-generator/references/api-envelope-patterns.md +327 -0
- package/.github/skills/feature-generator/references/screen-logic-patterns.md +399 -0
- package/.github/skills/feature-generator/references/state-library-patterns.md +464 -0
- package/.github/skills/figma-ui-mapper/README.md +34 -0
- package/.github/skills/figma-ui-mapper/SKILL.md +101 -0
- package/.github/skills/figma-ui-mapper/assets/templates/component-map-template.md +30 -0
- package/.github/skills/figma-ui-mapper/assets/templates/generation-report-template.md +49 -0
- package/.github/skills/figma-ui-mapper/metadata.yaml +22 -0
- package/.github/skills/figma-ui-mapper/references/android.md +11 -0
- package/.github/skills/figma-ui-mapper/references/angular.md +18 -0
- package/.github/skills/figma-ui-mapper/references/capacitor.md +18 -0
- package/.github/skills/figma-ui-mapper/references/common.md +23 -0
- package/.github/skills/figma-ui-mapper/references/expo.md +18 -0
- package/.github/skills/figma-ui-mapper/references/flutter.md +18 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/angular/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/capacitor/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/expo/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/flutter/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/ionic/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/kotlin-multiplatform/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/native-android/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/native-ios/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/next/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/nuxt/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/react/rules.md +19 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/react-native/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/svelte/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/frameworks/vue/rules.md +23 -0
- package/.github/skills/figma-ui-mapper/references/ionic.md +18 -0
- package/.github/skills/figma-ui-mapper/references/ios.md +11 -0
- package/.github/skills/figma-ui-mapper/references/kotlin-multiplatform.md +18 -0
- package/.github/skills/figma-ui-mapper/references/native-android.md +18 -0
- package/.github/skills/figma-ui-mapper/references/native-ios.md +18 -0
- package/.github/skills/figma-ui-mapper/references/next.md +18 -0
- package/.github/skills/figma-ui-mapper/references/nuxt.md +18 -0
- package/.github/skills/figma-ui-mapper/references/react-figma-guideline.md +21 -0
- package/.github/skills/figma-ui-mapper/references/react-native.md +18 -0
- package/.github/skills/figma-ui-mapper/references/react.md +18 -0
- package/.github/skills/figma-ui-mapper/references/script-usage.md +46 -0
- package/.github/skills/figma-ui-mapper/references/svelte.md +18 -0
- package/.github/skills/figma-ui-mapper/references/vue.md +18 -0
- package/.github/skills/figma-ui-mapper/references/workflow.md +74 -0
- package/.github/skills/figma-ui-mapper/scripts/generate-page-through-figma.js +635 -0
- package/.github/skills/figma-ui-mapper/scripts/generate-react-page-through-figma.js +4 -0
- package/.github/skills/frontend-task-breakdown/SKILL.md +734 -0
- package/.github/skills/md-file-converter/SKILL.md +291 -0
- package/.github/skills/md-file-converter/config/formats.json +114 -0
- package/.github/skills/md-file-converter/extractors/extract-docx.sh +120 -0
- package/.github/skills/md-file-converter/extractors/extract-eml.py +108 -0
- package/.github/skills/md-file-converter/extractors/extract-pdf.sh +97 -0
- package/.github/skills/md-file-converter/extractors/extract-pptx.py +143 -0
- package/.github/skills/md-file-converter/extractors/extract-xlsx.py +175 -0
- package/.github/skills/md-file-converter/scripts/check-tools.sh +47 -0
- package/.github/skills/md-file-converter/scripts/extract-archive.sh +83 -0
- package/.github/skills/md-file-converter/scripts/extract-ocr.sh +77 -0
- package/.github/skills/md-file-converter/scripts/get-metadata.sh +57 -0
- package/.github/skills/md-file-converter/templates/output.md +73 -0
- package/.github/skills/md-file-converter/templates/unsupported-object.md +6 -0
- package/.github/skills/mockAPI-contract-generator/SKILL.md +607 -0
- package/.github/skills/test-case-validator/CHANGELOG.md +155 -0
- package/.github/skills/test-case-validator/CONFIGURATION.md +130 -0
- package/.github/skills/test-case-validator/EXAMPLES.md +50 -0
- package/.github/skills/test-case-validator/QUALITY_SCORING.md +98 -0
- package/.github/skills/test-case-validator/README.md +111 -0
- package/.github/skills/test-case-validator/REPORT_TEMPLATE.md +116 -0
- package/.github/skills/test-case-validator/SKILL.md +209 -0
- package/.github/skills/test-case-validator/SYSTEM_PROMPT.md +127 -0
- package/.github/skills/test-case-validator/TRACEABILITY_ENGINE.md +152 -0
- package/.github/skills/test-case-validator/VALIDATION_RULES.md +411 -0
- package/.github/skills/test-case-validator/config/default.config.yaml +62 -0
- package/.github/skills/test-case-validator/docs/ARCHITECTURE.md +66 -0
- package/.github/skills/test-case-validator/docs/EXTENDING.md +85 -0
- package/.github/skills/test-case-validator/docs/FAQ.md +88 -0
- package/.github/skills/test-case-validator/docs/VERSIONING.md +55 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-brd.md +43 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-test-cases.csv +9 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/input-user-story.md +29 -0
- package/.github/skills/test-case-validator/examples/example-1-manual-qa-ecommerce/output-report.md +303 -0
- package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/input-spec.md +43 -0
- package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/input-test-files-index.md +56 -0
- package/.github/skills/test-case-validator/examples/example-2-automated-frontend-suite/output-report.md +274 -0
- package/.github/skills/test-case-validator/prompts/00-applicability-resolution.md +61 -0
- package/.github/skills/test-case-validator/prompts/01-extraction-user-story.md +58 -0
- package/.github/skills/test-case-validator/prompts/02-extraction-brd.md +64 -0
- package/.github/skills/test-case-validator/prompts/03-extraction-test-cases.md +92 -0
- package/.github/skills/test-case-validator/prompts/04-traceability-matrix.md +41 -0
- package/.github/skills/test-case-validator/prompts/05-coverage-analysis.md +46 -0
- package/.github/skills/test-case-validator/prompts/06-missing-scenario-detection.md +32 -0
- package/.github/skills/test-case-validator/prompts/07-duplicate-detection.md +36 -0
- package/.github/skills/test-case-validator/prompts/08-risk-analysis.md +39 -0
- package/.github/skills/test-case-validator/prompts/09-gated-wiring-validation.md +53 -0
- package/.github/skills/test-case-validator/prompts/10-observation-report.md +56 -0
- package/.github/skills/test-case-validator/prompts/11-final-report-assembly.md +57 -0
- package/.github/skills/test-case-validator/templates/coverage-table.md +25 -0
- package/.github/skills/test-case-validator/templates/executive-summary.md +38 -0
- package/.github/skills/test-case-validator/templates/final-summary-block.md +87 -0
- package/.github/skills/test-case-validator/templates/observation-entry.md +41 -0
- package/.github/skills/test-case-validator/templates/rtm-row.md +25 -0
- package/.github/skills/validation-engine-builder/README.md +50 -0
- package/.github/skills/validation-engine-builder/SKILL.md +241 -0
- package/.github/skills/validation-engine-builder/references/core.md +158 -0
- package/.github/skills/validation-engine-builder/references/platform-angular.md +166 -0
- package/.github/skills/validation-engine-builder/references/platform-flutter.md +118 -0
- package/.github/skills/validation-engine-builder/references/platform-react-native.md +170 -0
- package/.github/skills/validation-engine-builder/references/platform-react.md +94 -0
- package/.github/skills/validation-engine-builder/scripts/apply-to-project.js +80 -0
- package/.github/skills/validation-engine-builder/scripts/generate-angular.js +271 -0
- package/.github/skills/validation-engine-builder/scripts/generate-flutter.js +298 -0
- package/.github/skills/validation-engine-builder/scripts/generate-react-native.js +217 -0
- package/.github/skills/validation-engine-builder/scripts/generate-react.js +163 -0
- package/.github/skills/validation-engine-builder/scripts/install-deps.js +53 -0
- package/.github/skills/validation-engine-builder/scripts/shared/detect-platform.js +68 -0
- package/.github/skills/validation-engine-builder/scripts/shared/npm-deps.js +103 -0
- package/.github/skills/validation-engine-builder/scripts/shared/rhf-hook.js +43 -0
- package/.github/skills/validation-engine-builder/scripts/shared/ts-messages-regex.js +62 -0
- package/.github/skills/validation-engine-builder/scripts/shared/util.js +44 -0
- package/.github/skills/validation-engine-builder/scripts/shared/yup-schemas.js +80 -0
- package/.github/skills/validation-engine-builder/template.md +73 -0
- package/.github/skills/validation-engine-builder/templates/messages.json +22 -0
- package/.github/skills/validation-engine-builder/templates/regex.json +16 -0
- package/.github/skills/validation-engine-builder/templates/schemas.json +48 -0
- package/bin/index.js +145 -0
- package/package.json +22 -0
- package/readme.md +0 -0
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
# Test Case Validation Report — Beta Features Toggle
|
|
2
|
+
|
|
3
|
+
Generated: 2026-07-08 · Project Profile: `frontend_automated` (auto-detected
|
|
4
|
+
— `TEST_CASE_INPUT` matched a Jest source glob with React component
|
|
5
|
+
imports) · BRD Mode: **Combined Spec Mode** (no `BRD_INPUT` provided;
|
|
6
|
+
`input-spec.md` serves as both User Story and BRD source)
|
|
7
|
+
|
|
8
|
+
## 1. Executive Summary
|
|
9
|
+
|
|
10
|
+
This validates 9 in-scope automated tests (across 5 files) against 4
|
|
11
|
+
functional requirements, 3 acceptance criteria, and 2 success criteria in
|
|
12
|
+
`input-spec.md`. **Headline finding**: every individual piece of this
|
|
13
|
+
feature is unit-tested and green — persistence, the toggle component, the
|
|
14
|
+
entry-card component, and the deep-link guard all pass their own tests in
|
|
15
|
+
isolation — but the Home screen's actual, real-preference-driven decision to
|
|
16
|
+
show or hide the Beta Dashboard entry card (FR-003) is never exercised by
|
|
17
|
+
any test. This is a textbook **Gated-Behavior Wiring Gap** (Rule 16): a user
|
|
18
|
+
could toggle the feature on, the toggle would correctly persist `true`, and
|
|
19
|
+
the entry card would still never appear, because nothing verifies the Home
|
|
20
|
+
screen actually reads that persisted value — and every existing test would
|
|
21
|
+
stay green.
|
|
22
|
+
|
|
23
|
+
**Scope**
|
|
24
|
+
|
|
25
|
+
| Category | Applicable? | Reason if N/A |
|
|
26
|
+
|---|---|---|
|
|
27
|
+
| Database Coverage | N/A | `frontend_automated` profile — preference persistence uses local storage, covered under Backend/Data-Layer Coverage instead |
|
|
28
|
+
| Browser Compatibility, Localization | N/A | `frontend_automated` profile default exclusions; not in scope of this spec |
|
|
29
|
+
| All other Rule 2-11 categories | Applicable | |
|
|
30
|
+
|
|
31
|
+
**Configuration used**: Project Profile `frontend_automated` (auto-detected)
|
|
32
|
+
· BRD Mode: Combined Spec Mode · Scoring weights: default.
|
|
33
|
+
|
|
34
|
+
## 2. Requirement Traceability Matrix
|
|
35
|
+
|
|
36
|
+
| Requirement ID | Requirement | Mapped Test Cases | Status | Observation |
|
|
37
|
+
|---|---|---|---|---|
|
|
38
|
+
| FR-001 | Toggle defaults off | `betaFeaturePreference.test.ts::...defaults to false...(FR-001)` (T1), `BetaFeatureToggle.test.tsx::...renders as off by default` (T2) | Full | — |
|
|
39
|
+
| FR-002 | Toggling persists preference | `betaFeaturePreference.test.ts::...(FR-002)` ×2 (T1) | Full | — |
|
|
40
|
+
| FR-003 | Entry card shown/hidden by real preference; tap navigates | `BetaDashboardEntryCard.test.tsx` ×2 (T2, logic-level only) | **Partial** | Component renders and its `onClick` fires correctly in isolation, but no test confirms `HomeScreen` actually reads the real preference and conditionally renders/hides this component — see §17 |
|
|
41
|
+
| FR-004 | Deep-link redirect when preference is false | `betaDashboardGuard.test.ts::...(FR-004)` ×2 — both true/false states (T1) | Full | Genuine integration-level evidence — the guard test drives the real preference value, not a mock |
|
|
42
|
+
| US-01-AC1 | Toggle on → persisted + entry card shown | betaFeaturePreference tests + BetaDashboardEntryCard tests | Partial | Persistence half is Full; entry-card-on-real-Home half is the FR-003 wiring gap |
|
|
43
|
+
| US-01-AC2 | Toggle off → entry card hidden | Same as AC1 | Partial | Same wiring gap, inverse direction |
|
|
44
|
+
| US-01-AC3 | Deep link while off → redirect to Home | `betaDashboardGuard.test.ts` | Full | — |
|
|
45
|
+
| SC-001 | Never-toggled user sees no entry card | None directly | Partial | Depends on the same untested Home-screen wiring as FR-003 |
|
|
46
|
+
| SC-002 | Toggle-on survives reload, entry card still shown | `betaFeaturePreference.test.ts` (persistence only) | Partial | Persistence confirmed; post-reload Home rendering not confirmed |
|
|
47
|
+
|
|
48
|
+
**Excluded from this RTM (correctly, not as orphans)**: `HomeScreen.test.tsx`'s
|
|
49
|
+
"shows the standard home content" and "shows the refresh button" — these
|
|
50
|
+
test pre-existing Home screen behavior unrelated to beta features and are
|
|
51
|
+
out of this spec's scope, not orphan test cases for *this* feature.
|
|
52
|
+
|
|
53
|
+
## 3. User Story Validation
|
|
54
|
+
|
|
55
|
+
| Story | Priority | ACs Covered | Status |
|
|
56
|
+
|---|---|---|---|
|
|
57
|
+
| US-01 — Enable Beta Features | P2 | 1 Full / 2 Partial of 3 | Partial |
|
|
58
|
+
|
|
59
|
+
## 4. BRD Validation
|
|
60
|
+
|
|
61
|
+
**N/A — Combined Spec Mode.** No separate BRD was provided; `input-spec.md`
|
|
62
|
+
serves as the sole requirements source and is fully covered by Section 2.
|
|
63
|
+
|
|
64
|
+
## 5. Acceptance Criteria Validation
|
|
65
|
+
|
|
66
|
+
| AC | Positive | Negative | Status |
|
|
67
|
+
|---|---|---|---|
|
|
68
|
+
| AC1 (toggle on) | Partial — persistence yes, real-Home rendering no | n/a | Partial |
|
|
69
|
+
| AC2 (toggle off) | Partial — same gap, inverse | n/a | Partial |
|
|
70
|
+
| AC3 (deep link while off) | n/a | ✓ `betaDashboardGuard.test.ts` | Full |
|
|
71
|
+
|
|
72
|
+
## 6. Frontend Coverage Report
|
|
73
|
+
|
|
74
|
+
| Category | Status | Evidence |
|
|
75
|
+
|---|---|---|
|
|
76
|
+
| UI Rendering | Full | Toggle and entry-card components both render-tested |
|
|
77
|
+
| Button Clicks | Full | Toggle `onToggle` and entry-card `onClick` both tested |
|
|
78
|
+
| Navigation | Partial | Deep-link redirect (FR-004) fully tested; entry-card-triggered navigation to Beta Dashboard is asserted only as a called callback, not as an actual route change |
|
|
79
|
+
| Loading / Empty / Error States | N/A | Not applicable to this feature — no async load in the toggle flow |
|
|
80
|
+
| Accessibility, Keyboard Navigation | Missing | Not referenced in any test in the provided suite |
|
|
81
|
+
|
|
82
|
+
## 7. Backend / Data-Layer Coverage Report
|
|
83
|
+
|
|
84
|
+
*(Reinterpreted per `VALIDATION_RULES.md` Rule 3's no-real-backend note — no
|
|
85
|
+
server-side component exists for this feature; persistence is local.)*
|
|
86
|
+
|
|
87
|
+
| Category | Status | Evidence |
|
|
88
|
+
|---|---|---|
|
|
89
|
+
| Preference persistence (write) | Full | `betaFeaturePreference.test.ts` |
|
|
90
|
+
| Preference persistence (read, at Home-mount time) | **Missing** | No test confirms `HomeScreen` reads the persisted value on mount — see §17 |
|
|
91
|
+
| Route guard logic | Full | `betaDashboardGuard.test.ts` |
|
|
92
|
+
|
|
93
|
+
## 8. Functional Coverage Report
|
|
94
|
+
|
|
95
|
+
| Dimension | Status |
|
|
96
|
+
|---|---|
|
|
97
|
+
| Positive | Partial — see FR-003 gap |
|
|
98
|
+
| Negative | Full — off-state and redirect-while-off both tested |
|
|
99
|
+
| Boundary | N/A — no numeric/length limits in this feature |
|
|
100
|
+
| Business Rule | N/A — see Section 12 |
|
|
101
|
+
|
|
102
|
+
## 9. API Coverage
|
|
103
|
+
|
|
104
|
+
N/A — this feature has no network API surface.
|
|
105
|
+
|
|
106
|
+
## 10. Database Coverage
|
|
107
|
+
|
|
108
|
+
N/A — see Scope table, Section 1.
|
|
109
|
+
|
|
110
|
+
## 11. Security Coverage
|
|
111
|
+
|
|
112
|
+
No security-sensitive behavior in this feature beyond the deep-link guard
|
|
113
|
+
(FR-004), which is fully and correctly tested at the integration level.
|
|
114
|
+
|
|
115
|
+
## 12. Business Rule Coverage
|
|
116
|
+
|
|
117
|
+
No calculation, eligibility, or approval-flow business rules are documented
|
|
118
|
+
in this spec — this feature is a preference toggle with a visibility gate,
|
|
119
|
+
not a business-rule-bearing feature. Section marked complete by default
|
|
120
|
+
(nothing to test) rather than silently omitted.
|
|
121
|
+
|
|
122
|
+
## 13. Missing Scenario Report
|
|
123
|
+
|
|
124
|
+
| Category | Applicable? | Present? | Affected Requirement(s) | Note |
|
|
125
|
+
|---|---|---|---|---|
|
|
126
|
+
| Refresh / Reload | Yes | No | SC-002 | No test confirms the entry card survives a simulated app reload with the preference already persisted true |
|
|
127
|
+
| Race Condition | Yes | No | FR-002 | Rapid double-toggle (on-then-off before the first persist completes) is untested |
|
|
128
|
+
|
|
129
|
+
## 14. Duplicate Test Case Report
|
|
130
|
+
|
|
131
|
+
No duplicate test cases found across the 9 in-scope tests.
|
|
132
|
+
|
|
133
|
+
## 15. Test Case Quality Report
|
|
134
|
+
|
|
135
|
+
| Test Case | Issue | Impact |
|
|
136
|
+
|---|---|---|
|
|
137
|
+
| `BetaFeatureToggle.test.tsx`, `BetaDashboardEntryCard.test.tsx` (4 tests) | No inline `(FR-NNN)` tag, relying on Tier-2 structural mapping | Low — mapping is still `confirmed`-tier via unambiguous folder structure, but if this module ever splits into more files, structural mapping could become ambiguous; recommend adding explicit tags proactively |
|
|
138
|
+
|
|
139
|
+
## 16. Risk Coverage Report
|
|
140
|
+
|
|
141
|
+
| Requirement/Feature | Risk Tier (+ why) | Test Count | Meets Minimum? |
|
|
142
|
+
|---|---|---|---|
|
|
143
|
+
| FR-003 (entry card visibility) | Medium — a visible-feature bug, not security/financial, but affects every user of the feature | 2 (both logic-level only) | Meets numeric minimum (3) — no, 2 present; **and** neither is integration-level — see §17 |
|
|
144
|
+
| FR-004 (deep-link guard) | Medium — prevents unauthorized early access to beta functionality | 2 | Yes, and both are integration-level |
|
|
145
|
+
|
|
146
|
+
## 17. Gated-Behavior Wiring Report
|
|
147
|
+
|
|
148
|
+
| Requirement ID | Gate Condition | Logic-Level Test | Integration-Level Test | Status | Severity |
|
|
149
|
+
|---|---|---|---|---|---|
|
|
150
|
+
| FR-003 | `betaFeaturesPreference === true` read by `HomeScreen` to decide whether to render `BetaDashboardEntryCard` | `BetaDashboardEntryCard.test.tsx` (component renders and fires `onClick` when directly mounted) | **None** — no `HomeScreen.test.tsx` test sets the real preference to `true`/`false` and asserts the card's presence/absence | **Wiring Gap** | Medium |
|
|
151
|
+
| FR-004 | `betaFeaturesPreference === false` read by the Beta Dashboard route guard | `betaDashboardGuard.test.ts` (both states) | `betaDashboardGuard.test.ts` (both states) — this test *is* the integration point | Full | — |
|
|
152
|
+
|
|
153
|
+
This is the report's central finding: FR-003 and FR-004 look identically
|
|
154
|
+
"done" by ordinary traceability counting (each has 2 mapped tests), but only
|
|
155
|
+
FR-004's tests actually exercise the real gate. FR-003's tests exercise a
|
|
156
|
+
component that *could* be wired correctly or incorrectly with no observable
|
|
157
|
+
difference in test results either way.
|
|
158
|
+
|
|
159
|
+
## 18. Observation Report
|
|
160
|
+
|
|
161
|
+
### Beta Dashboard entry card's visibility is never tested against the real preference (FR-003)
|
|
162
|
+
**Severity**: Medium
|
|
163
|
+
**Evidence**: `BetaDashboardEntryCard.test.tsx` renders the component
|
|
164
|
+
directly and asserts its label and `onClick` behavior. No test in
|
|
165
|
+
`HomeScreen.test.tsx` (or anywhere else in the suite) sets the real
|
|
166
|
+
persisted `betaFeaturesPreference` value and asserts the card's presence at
|
|
167
|
+
`true` and absence at `false`.
|
|
168
|
+
**Affected Requirement(s)**: FR-003, US-01-AC1, US-01-AC2, SC-001, SC-002
|
|
169
|
+
**Affected Test Case(s)**: `BetaDashboardEntryCard.test.tsx` (covers the
|
|
170
|
+
component, not the wiring), `HomeScreen.test.tsx` (covers unrelated Home
|
|
171
|
+
behavior, not this feature)
|
|
172
|
+
**Impact**: A future refactor of `HomeScreen`'s mount logic (e.g. a typo in
|
|
173
|
+
the preference-key string, a forgotten `useEffect` dependency, an
|
|
174
|
+
accidentally-removed conditional) would break this feature for every user
|
|
175
|
+
who enables it, and every existing test — including this feature's own
|
|
176
|
+
"passing" ones — would remain green.
|
|
177
|
+
**Recommendation**: Add a `HomeScreen.test.tsx` test that mocks the
|
|
178
|
+
preference read to `true`, renders `HomeScreen`, and asserts the entry card
|
|
179
|
+
is present; and a second test with the mock at `false` asserting it's
|
|
180
|
+
absent. Model this directly on `betaDashboardGuard.test.ts`'s pattern, which
|
|
181
|
+
already does this correctly for FR-004.
|
|
182
|
+
**Suggested Test Case**: "Given the beta-features preference is `true`, when
|
|
183
|
+
`HomeScreen` mounts, then the Beta Dashboard entry card is rendered; given
|
|
184
|
+
the preference is `false`, when `HomeScreen` mounts, then it is absent."
|
|
185
|
+
|
|
186
|
+
### Reload/persistence-survival scenario (SC-002) untested end to end
|
|
187
|
+
**Severity**: Low
|
|
188
|
+
**Evidence**: `betaFeaturePreference.test.ts` confirms the write; no test
|
|
189
|
+
simulates a reload (fresh mount reading the already-persisted value) and
|
|
190
|
+
confirms the Home screen reflects it — this is really the same root
|
|
191
|
+
integration point as the Medium-severity finding above, so consider it
|
|
192
|
+
resolved by the same fix rather than a separate one.
|
|
193
|
+
**Affected Requirement(s)**: SC-002
|
|
194
|
+
**Affected Test Case(s)**: None directly
|
|
195
|
+
**Impact**: Low incremental risk beyond the finding above — same underlying
|
|
196
|
+
gap.
|
|
197
|
+
**Recommendation**: The `HomeScreen` test added for the finding above
|
|
198
|
+
naturally covers this too, since it mounts fresh with a pre-set preference
|
|
199
|
+
value (functionally equivalent to "after reload").
|
|
200
|
+
**Suggested Test Case**: Covered by the suggested test above.
|
|
201
|
+
|
|
202
|
+
## 19. Recommendations
|
|
203
|
+
|
|
204
|
+
1. **Add the two `HomeScreen` integration tests** (real preference → entry
|
|
205
|
+
card presence/absence) — closes the report's central finding and both
|
|
206
|
+
observations above in one change.
|
|
207
|
+
2. **Add explicit `(FR-NNN)` tags** to `BetaFeatureToggle.test.tsx` and
|
|
208
|
+
`BetaDashboardEntryCard.test.tsx` — low effort, removes reliance on
|
|
209
|
+
structural (Tier 2) mapping.
|
|
210
|
+
3. **Add a rapid-double-toggle test** for FR-002 if this preference write is
|
|
211
|
+
not already debounced/sequenced at the state-management layer.
|
|
212
|
+
|
|
213
|
+
## 20. Overall Quality Score
|
|
214
|
+
|
|
215
|
+
| Category | Weight | Fraction | Points |
|
|
216
|
+
|---|---|---|---|
|
|
217
|
+
| Requirement Traceability | 25 | 0.72 | 18 |
|
|
218
|
+
| Coverage | 20 | 0.78 | 16 |
|
|
219
|
+
| Acceptance Criteria | 15 | 0.67 | 10 |
|
|
220
|
+
| Frontend Coverage | 10 | 0.75 | 8 |
|
|
221
|
+
| Backend/Data-Layer Coverage | 10 | 1.00 | 10 |
|
|
222
|
+
| Business Rules | 10 | 1.00 | 10 |
|
|
223
|
+
| Quality | 5 | 0.89 | 4 |
|
|
224
|
+
| Duplicates | 5 | 1.00 | 5 |
|
|
225
|
+
| **Total** | | | **81** |
|
|
226
|
+
|
|
227
|
+
A genuinely well-tested small feature — no duplicates, no missing business
|
|
228
|
+
rules, strong frontend/data-layer scores — held out of `PASS` almost
|
|
229
|
+
entirely by one Rule 16 finding. This is the intended behavior of Rule 16:
|
|
230
|
+
it should be possible for an otherwise-excellent suite to fall short of 95
|
|
231
|
+
specifically because of an unverified wiring point, since that's exactly
|
|
232
|
+
the kind of gap that erodes confidence in an all-green test run.
|
|
233
|
+
|
|
234
|
+
## Final Summary
|
|
235
|
+
|
|
236
|
+
TEST CASE VALIDATION SUMMARY
|
|
237
|
+
|
|
238
|
+
Project Profile: frontend_automated
|
|
239
|
+
BRD Mode: Combined Spec Mode
|
|
240
|
+
|
|
241
|
+
Total Requirements: 4
|
|
242
|
+
Covered Requirements: 4 (3 Full + 1 Partial)
|
|
243
|
+
Missing Requirements: 0
|
|
244
|
+
|
|
245
|
+
Total User Stories: 1
|
|
246
|
+
Covered User Stories: 1 (Partial)
|
|
247
|
+
|
|
248
|
+
Total Acceptance Criteria: 3
|
|
249
|
+
Covered Acceptance Criteria: 3 (1 Full + 2 Partial)
|
|
250
|
+
|
|
251
|
+
Total Test Cases: 9 (in scope; 2 additional pre-existing tests excluded as out of scope)
|
|
252
|
+
|
|
253
|
+
Requirement Coverage: 72%
|
|
254
|
+
Acceptance Criteria Coverage: 67%
|
|
255
|
+
Frontend Coverage: 75%
|
|
256
|
+
Backend/Data-Layer Coverage: 100%
|
|
257
|
+
Functional Coverage: ~85%
|
|
258
|
+
Negative Coverage: 100%
|
|
259
|
+
Boundary Coverage: N/A — no boundary conditions in this feature
|
|
260
|
+
Business Rule Coverage: N/A — no business rules documented
|
|
261
|
+
API Coverage: N/A — no network API surface
|
|
262
|
+
Database Coverage: N/A — local persistence only, see Backend/Data-Layer
|
|
263
|
+
Security Coverage: Full (only security-relevant path is FR-004, fully tested)
|
|
264
|
+
Automation Coverage: 100% (all 9 are automated source tests)
|
|
265
|
+
|
|
266
|
+
Duplicate Test Cases: 0
|
|
267
|
+
|
|
268
|
+
Missing Scenarios: 2 categories (see Section 13)
|
|
269
|
+
|
|
270
|
+
Gated-Behavior Wiring Gaps: 1 (FR-003 — see Section 17)
|
|
271
|
+
|
|
272
|
+
Overall Quality Score: 81/100
|
|
273
|
+
|
|
274
|
+
Status: **NEEDS IMPROVEMENT**
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Prompt 00 — Applicability Resolution
|
|
2
|
+
|
|
3
|
+
**Input**: `TEST_CASE_INPUT` (for auto-detection signal), `PROJECT_PROFILE_INPUT`
|
|
4
|
+
(if explicit), `config/default.config.yaml`.
|
|
5
|
+
**Output**: `RESOLVED_PROFILE` (the active profile name) and
|
|
6
|
+
`APPLICABILITY_MAP` (category → `Applicable` | `N/A` + reason), consumed by
|
|
7
|
+
every later step per `VALIDATION_RULES.md` Rule 17.
|
|
8
|
+
|
|
9
|
+
This is Rule 17's procedure. It has its own file — and runs first, before
|
|
10
|
+
extraction even completes — because every other rule (2 through 11, and the
|
|
11
|
+
Missing-Scenario categories in Rule 7) depends on knowing what's in scope
|
|
12
|
+
*before* it can correctly classify anything as `Missing` rather than `N/A`.
|
|
13
|
+
Rule 1 (Requirement Traceability) does not depend on this step — it
|
|
14
|
+
operates on specific requirement IDs, not on the category checklist — but
|
|
15
|
+
running this step before Rule 1 anyway is harmless and keeps the pipeline's
|
|
16
|
+
step order simple to reason about.
|
|
17
|
+
|
|
18
|
+
## Procedure
|
|
19
|
+
|
|
20
|
+
1. **Resolve the profile.**
|
|
21
|
+
- If `PROJECT_PROFILE_INPUT` names a profile in
|
|
22
|
+
`config/default.config.yaml`'s `profiles` map, use it directly.
|
|
23
|
+
- Otherwise, evaluate `auto_detect.order` (see `CONFIGURATION.md` for the
|
|
24
|
+
exact structure) top to bottom against `TEST_CASE_INPUT`'s shape; use
|
|
25
|
+
the first matching rule's profile. If none match, use
|
|
26
|
+
`auto_detect.fallback_profile`.
|
|
27
|
+
- Record which path was taken (`explicit` vs. `auto-detected`, and if
|
|
28
|
+
auto-detected, which signal matched) — this must be stated in the
|
|
29
|
+
Executive Summary per `templates/executive-summary.md`.
|
|
30
|
+
|
|
31
|
+
2. **Build `APPLICABILITY_MAP`.** For every category referenced anywhere in
|
|
32
|
+
`VALIDATION_RULES.md` Rules 2, 3, 7, and 9-11, look up its entry in
|
|
33
|
+
`CONFIGURATION.md`'s Applicability Matrix for `RESOLVED_PROFILE`:
|
|
34
|
+
- Present in the resolved profile's `disabled_categories` (config key,
|
|
35
|
+
snake_case) → `N/A`, with the matrix's stated reason.
|
|
36
|
+
- Not present → `Applicable`.
|
|
37
|
+
- **Not found in the Applicability Matrix at all** (a category newly
|
|
38
|
+
added to `VALIDATION_RULES.md` without a corresponding matrix row) →
|
|
39
|
+
default to `Applicable`, and separately record it as
|
|
40
|
+
`unclassified: true` — this must surface in the final report's
|
|
41
|
+
Recommendations section ("category X is not yet classified in the
|
|
42
|
+
Applicability Matrix — please confirm and add it"), per
|
|
43
|
+
`VALIDATION_RULES.md` Rule 17 step 4. Do not silently guess which
|
|
44
|
+
profiles should exclude it.
|
|
45
|
+
|
|
46
|
+
3. **Category name mapping.** Config keys are snake_case
|
|
47
|
+
(`browser_compatibility`); prose/report category names are Title Case
|
|
48
|
+
("Browser Compatibility"). Convert deterministically
|
|
49
|
+
(`snake_case → Title Case` by replacing underscores with spaces and
|
|
50
|
+
capitalizing each word) — do not introduce a second, inconsistent
|
|
51
|
+
naming scheme. If a category's natural prose name doesn't
|
|
52
|
+
round-trip cleanly through this conversion (e.g. an acronym like "API"),
|
|
53
|
+
the Applicability Matrix's prose column is authoritative for display;
|
|
54
|
+
the config key is authoritative for matching.
|
|
55
|
+
|
|
56
|
+
## Output
|
|
57
|
+
|
|
58
|
+
`APPLICABILITY_MAP`: one entry per category —
|
|
59
|
+
`{ category: string, applicable: boolean, reason: string | null, unclassified: boolean }`.
|
|
60
|
+
Feed this into every later rule; a category never gets a second, ad hoc
|
|
61
|
+
applicability judgment call inside an individual rule's prompt file.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Prompt 01 — User Story Extraction
|
|
2
|
+
|
|
3
|
+
**Input**: `USER_STORY_INPUT` (raw document, any supported format).
|
|
4
|
+
**Output**: `US_MODEL` conforming to `TRACEABILITY_ENGINE.md` §1's
|
|
5
|
+
`UserStory`/`AcceptanceCriterion`/`Requirement` shapes.
|
|
6
|
+
|
|
7
|
+
## Procedure
|
|
8
|
+
|
|
9
|
+
1. **Detect structure first.** Is this a prose user-story document ("As a
|
|
10
|
+
..., I want ..., so that ..."), a Spec-Kit-style `spec.md` (User Stories +
|
|
11
|
+
`FR-NNN` Functional Requirements + `SC-NNN` Success Criteria), or a
|
|
12
|
+
requirements table? The extraction target is the same regardless; the
|
|
13
|
+
parsing path differs.
|
|
14
|
+
|
|
15
|
+
2. **Extract per user story**:
|
|
16
|
+
- ID (explicit, or synthesize `US-<n>` per `TRACEABILITY_ENGINE.md` §2.5)
|
|
17
|
+
- Title / one-line summary
|
|
18
|
+
- Priority (P1/P2/... or High/Medium/Low if stated; `null` if absent —
|
|
19
|
+
never invent one)
|
|
20
|
+
- Actor(s) / role(s)
|
|
21
|
+
- Business goal ("so that ...")
|
|
22
|
+
- Acceptance Criteria — extract every "Given/When/Then" or numbered
|
|
23
|
+
criterion as its own `AcceptanceCriterion`, synthesizing
|
|
24
|
+
`<story-id>-AC-<m>` IDs if the source doesn't number them
|
|
25
|
+
- Functional Requirements referenced or implied within the story (if the
|
|
26
|
+
document has a separate FR-NNN list, cross-link rather than duplicate)
|
|
27
|
+
- Non-Functional Requirements (performance, security, accessibility,
|
|
28
|
+
compliance) stated for this story specifically
|
|
29
|
+
- Business Rules embedded in the story's prose
|
|
30
|
+
- Validation Rules (input constraints, format rules)
|
|
31
|
+
- Workflow / state-transition steps described
|
|
32
|
+
- Calculations described (capture the exact formula text verbatim — do
|
|
33
|
+
not paraphrase a formula, paraphrasing risks silently changing it)
|
|
34
|
+
- APIs referenced (endpoint names/paths if given)
|
|
35
|
+
- UI elements referenced (screens, components, specific labels/copy)
|
|
36
|
+
- Navigation flow (what leads to this screen, what it leads to)
|
|
37
|
+
- Dependencies (on other stories, other systems, other teams)
|
|
38
|
+
- Error handling described
|
|
39
|
+
- Security requirements described (auth, authorization, data handling)
|
|
40
|
+
|
|
41
|
+
3. **Also extract document-level items** not tied to one story: a shared
|
|
42
|
+
glossary, cross-cutting NFRs, an explicit Out-of-Scope section (capture
|
|
43
|
+
this — Rule 1's Document Integrity check needs to know what was
|
|
44
|
+
deliberately excluded vs. accidentally uncovered).
|
|
45
|
+
|
|
46
|
+
4. **Flag extraction uncertainty inline.** If a sentence could be read as
|
|
47
|
+
either a requirement or a design note, extract it but mark
|
|
48
|
+
`category: "ambiguous"` rather than silently picking one classification —
|
|
49
|
+
surface this in the Executive Summary's Document Integrity note.
|
|
50
|
+
|
|
51
|
+
## Do Not
|
|
52
|
+
|
|
53
|
+
- Do not infer an acceptance criterion that "should" exist based on the
|
|
54
|
+
story's title if it isn't written in the document.
|
|
55
|
+
- Do not merge two similarly-worded stories into one unless the document
|
|
56
|
+
itself presents them as one.
|
|
57
|
+
- Do not resolve a `[NEEDS CLARIFICATION]`-style marker in the source
|
|
58
|
+
document — extract it as-is and flag it as an open item.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Prompt 02 — BRD Extraction
|
|
2
|
+
|
|
3
|
+
**Input**: `BRD_INPUT`, if provided.
|
|
4
|
+
**Output**: `BRD_MODEL` conforming to `TRACEABILITY_ENGINE.md` §1's
|
|
5
|
+
`Requirement` shape (plus the BRD-specific fields below).
|
|
6
|
+
|
|
7
|
+
## Step 0 — Combined Spec Mode Check
|
|
8
|
+
|
|
9
|
+
If `BRD_INPUT` was not provided (per `SKILL.md` step 2, `COMBINED_SPEC_MODE =
|
|
10
|
+
true`): **do not run this extraction**. Produce
|
|
11
|
+
`BRD_MODEL = { combined_spec_mode: true, requirements: [] }` and move on.
|
|
12
|
+
Report sections 4 and 10 (BRD Validation, Database Coverage if it was
|
|
13
|
+
BRD-sourced) must read this flag and render
|
|
14
|
+
`N/A — Combined Spec Mode` rather than iterating an empty list and reporting
|
|
15
|
+
0% coverage.
|
|
16
|
+
|
|
17
|
+
## Procedure (when a separate BRD exists)
|
|
18
|
+
|
|
19
|
+
1. **Extract per requirement**:
|
|
20
|
+
- Requirement ID (explicit; never synthesize a BRD ID without flagging it
|
|
21
|
+
as synthesized — BRD IDs are usually load-bearing elsewhere, e.g. in a
|
|
22
|
+
compliance sign-off, so guessing one is riskier than guessing a user
|
|
23
|
+
story ID)
|
|
24
|
+
- Requirement text (verbatim for calculations/eligibility rules)
|
|
25
|
+
- Functional vs. Non-Functional classification
|
|
26
|
+
- Business Rules (eligibility, calculation, workflow, approval,
|
|
27
|
+
status-transition — capture each as its own `BusinessRule` entry per
|
|
28
|
+
`VALIDATION_RULES.md` Rule 9, with the exact source citation)
|
|
29
|
+
- Process Flow / Status Flow / Decision Trees — extract every branch of a
|
|
30
|
+
decision tree individually; a tree with 4 branches and only the "happy"
|
|
31
|
+
branch documented in prose is itself a Document Integrity finding
|
|
32
|
+
- Approval Flow (who approves, what triggers escalation)
|
|
33
|
+
- Eligibility Rules
|
|
34
|
+
- UI Rules (if the BRD specifies UI behavior distinct from the user
|
|
35
|
+
story — common when BRD is the compliance-owned document and user
|
|
36
|
+
story is the product-owned one; note any conflict between the two as
|
|
37
|
+
a Document Integrity finding, never silently prefer one)
|
|
38
|
+
- API Details (contract-level: endpoint, method, request/response shape,
|
|
39
|
+
status codes)
|
|
40
|
+
- Integration Points (external systems, third-party services)
|
|
41
|
+
- Database Requirements (entities, retention rules, migration
|
|
42
|
+
implications)
|
|
43
|
+
- Configuration Rules (feature flags, environment-specific behavior)
|
|
44
|
+
- Exception Handling
|
|
45
|
+
- Security requirements
|
|
46
|
+
- Compliance requirements (regulatory citations if given — extract the
|
|
47
|
+
citation verbatim, do not summarize a legal requirement in your own
|
|
48
|
+
words)
|
|
49
|
+
- Logging / Audit requirements
|
|
50
|
+
- Reporting requirements
|
|
51
|
+
|
|
52
|
+
2. **Cross-reference against `US_MODEL`** (already extracted by Prompt 01):
|
|
53
|
+
for every requirement mentioned in both documents, confirm the two
|
|
54
|
+
descriptions agree. Any material disagreement is a Document Integrity
|
|
55
|
+
finding (Rule 1) — cite both locations, do not adjudicate which is
|
|
56
|
+
"correct" unless one document explicitly supersedes the other.
|
|
57
|
+
|
|
58
|
+
## Do Not
|
|
59
|
+
|
|
60
|
+
- Do not treat a BRD requirement's absence from the user story (or vice
|
|
61
|
+
versa) as an error by default — a BRD legitimately contains
|
|
62
|
+
requirements no single user story covers (e.g. cross-cutting compliance
|
|
63
|
+
rules). Only flag a genuine contradiction, not a difference in scope.
|
|
64
|
+
- Do not paraphrase a compliance/legal citation.
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Prompt 03 — Test Case Extraction
|
|
2
|
+
|
|
3
|
+
**Input**: `TEST_CASE_INPUT` — either manually-authored test cases or a
|
|
4
|
+
path/glob to automated test source files.
|
|
5
|
+
**Output**: `TEST_CASE_MODEL`, a list of `TestCase` per
|
|
6
|
+
`TRACEABILITY_ENGINE.md` §1.
|
|
7
|
+
|
|
8
|
+
## Step 0 — Determine Input Shape
|
|
9
|
+
|
|
10
|
+
- Matches a source-code glob or is explicitly framed as "our test suite" /
|
|
11
|
+
"our test files" → **Automated Source path** (§B).
|
|
12
|
+
- Is a spreadsheet, CSV, Markdown table, or Gherkin `.feature` file with
|
|
13
|
+
human-authored steps → **Manual path** (§A).
|
|
14
|
+
- Ambiguous → ask, or default to Manual path and state the assumption in the
|
|
15
|
+
Executive Summary (per Auto Mode conventions of the calling context —
|
|
16
|
+
don't silently guess without saying so).
|
|
17
|
+
|
|
18
|
+
## A. Manual Path
|
|
19
|
+
|
|
20
|
+
Extract per row/case: Test Case ID, Title, Module, Requirement ID(s), User
|
|
21
|
+
Story, BRD Reference, Preconditions, Test Data, Steps, Expected Result,
|
|
22
|
+
Priority, Severity, Test Type, Automation Candidate, Owner, Tags, Status.
|
|
23
|
+
Any column absent from the source is `null`/`not tracked` — never fabricate
|
|
24
|
+
a plausible-looking value for a missing Priority or Owner.
|
|
25
|
+
|
|
26
|
+
Infer `Test Type` (positive/negative/boundary/...) from the steps + expected
|
|
27
|
+
result when not explicitly labeled, but mark it `inferred` (see
|
|
28
|
+
`TRACEABILITY_ENGINE.md` confidence tiers — the same confidence-tiering
|
|
29
|
+
concept applies to inferred test type, not just inferred requirement
|
|
30
|
+
mapping).
|
|
31
|
+
|
|
32
|
+
## B. Automated Source Path
|
|
33
|
+
|
|
34
|
+
This is the extraction procedure v1 of this skill did not define — added in
|
|
35
|
+
v2.0.0 after real use against a Jest/TypeScript suite; adapt the pattern
|
|
36
|
+
names below to the actual framework/language found.
|
|
37
|
+
|
|
38
|
+
1. **Locate test declarations.** Search recursively for the target
|
|
39
|
+
language's test-block syntax:
|
|
40
|
+
- JS/TS (Jest/Mocha/Vitest): `describe(...)`, `it(...)`, `test(...)`
|
|
41
|
+
- Python (pytest): `def test_*`, `class Test*`
|
|
42
|
+
- Java/Kotlin (JUnit): `@Test`-annotated methods, nested `@Nested` classes
|
|
43
|
+
- Go: `func Test*(t *testing.T)`
|
|
44
|
+
- Ruby (RSpec): `describe`, `context`, `it`
|
|
45
|
+
- Adapt for whatever else is present — the shape is always "a named,
|
|
46
|
+
nested grouping of individually-titled assertions."
|
|
47
|
+
|
|
48
|
+
2. **Build the Test Case ID** as
|
|
49
|
+
`<relative-file-path>::<full nested block path>` (e.g.
|
|
50
|
+
`presentation/screens/HoldingsView/HoldingsViewScreen.test.tsx::HoldingsViewScreen > shows the movers carousel only when the feature flag is enabled (FR-013)`).
|
|
51
|
+
This must be stable across reruns — see `TRACEABILITY_ENGINE.md` §2.5 for
|
|
52
|
+
why line numbers are not used.
|
|
53
|
+
|
|
54
|
+
3. **Title** = the innermost block's string argument, verbatim (including
|
|
55
|
+
any inline `(FR-NNN)`/`(USn ACn)` tag — this is the primary signal for
|
|
56
|
+
Tier-1 mapping in `TRACEABILITY_ENGINE.md` §2.1).
|
|
57
|
+
|
|
58
|
+
4. **Steps / Expected Result** = summarize the test body: what is
|
|
59
|
+
arranged/mocked (Preconditions + Test Data), what action is taken
|
|
60
|
+
(Steps), and what is asserted (`expect(...)` or equivalent calls →
|
|
61
|
+
Expected Result). Do not just paste raw code as the "steps" — translate
|
|
62
|
+
it into the same human-readable shape a manual test case would have, so
|
|
63
|
+
Rule 5/6/11 can be applied uniformly regardless of source.
|
|
64
|
+
|
|
65
|
+
5. **Requirement mapping**: run Tier 1 (explicit tag in title) → Tier 2
|
|
66
|
+
(folder/module structural match) → Tier 3 (fuzzy keyword match) per
|
|
67
|
+
`TRACEABILITY_ENGINE.md` §2. Record the tier used as `mapping_confidence`.
|
|
68
|
+
|
|
69
|
+
6. **Fields not present in source code**: Priority, Severity, Owner, Tags,
|
|
70
|
+
Status, and (usually) BRD Reference have no natural home in a test file.
|
|
71
|
+
Report these as `"not tracked in this suite"` per
|
|
72
|
+
`VALIDATION_RULES.md` Rule 5 — this is a property of the team's process,
|
|
73
|
+
not a defect in any individual test, and `QUALITY_SCORING.md`'s Quality
|
|
74
|
+
fraction must not penalize a suite for a field class the language/
|
|
75
|
+
framework has no place to put, only for fields the *team's own
|
|
76
|
+
convention* implies should exist (e.g. if some tests do tag an FR and
|
|
77
|
+
others in the same file don't, that inconsistency is a legitimate Rule 11
|
|
78
|
+
finding).
|
|
79
|
+
|
|
80
|
+
7. **Automation Candidate** = always `"Already Automated"` for this path —
|
|
81
|
+
don't ask whether an existing automated test "should" be automated.
|
|
82
|
+
|
|
83
|
+
## Do Not
|
|
84
|
+
|
|
85
|
+
- Do not run the actual test suite to determine pass/fail status as part of
|
|
86
|
+
extraction — this skill validates *coverage against requirements*, not
|
|
87
|
+
*current pass/fail health*. If the user also wants pass/fail health, that
|
|
88
|
+
is a distinct request (point them at their CI/test-runner output).
|
|
89
|
+
- Do not silently drop a `.skip`/`.todo`/`@Disabled` test from the model —
|
|
90
|
+
extract it and mark `status: "disabled"`; a disabled test that would have
|
|
91
|
+
covered a requirement is a coverage gap in practice even though it exists
|
|
92
|
+
in source, and Rule 1 needs to know the difference.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Prompt 04 — Requirement Traceability Matrix Assembly
|
|
2
|
+
|
|
3
|
+
**Input**: `US_MODEL`, `BRD_MODEL`, `TEST_CASE_MODEL`.
|
|
4
|
+
**Output**: `RTM` — the master list every later step reads from.
|
|
5
|
+
|
|
6
|
+
## Procedure
|
|
7
|
+
|
|
8
|
+
1. Build the unified requirement list: every `Requirement` from `BRD_MODEL`
|
|
9
|
+
(empty if Combined Spec Mode) plus every `UserStory`/`AcceptanceCriterion`
|
|
10
|
+
from `US_MODEL`, each retaining its `source_document` tag.
|
|
11
|
+
|
|
12
|
+
2. For each item in the unified list, run the linking algorithm in
|
|
13
|
+
`TRACEABILITY_ENGINE.md` §2 against every `TestCase` in `TEST_CASE_MODEL`.
|
|
14
|
+
Record all matches found (not just the first), with their tier/confidence.
|
|
15
|
+
|
|
16
|
+
3. Classify each item's `Status` per `TRACEABILITY_ENGINE.md` §4
|
|
17
|
+
(`Full`/`Partial`/`Missing`/`N/A`) — apply Rule 17's Applicability check
|
|
18
|
+
before classifying `Missing`; an inapplicable item is `N/A`, full stop.
|
|
19
|
+
|
|
20
|
+
4. Populate the `Observation` field for every row that is not cleanly `Full`:
|
|
21
|
+
state *why* in one sentence (e.g. "only an `inferred_medium` match found,
|
|
22
|
+
no explicit ID reference" or "logic tested, no integration-level test —
|
|
23
|
+
see Rule 16").
|
|
24
|
+
|
|
25
|
+
5. Identify orphan test cases: any `TestCase` in `TEST_CASE_MODEL` with zero
|
|
26
|
+
matches after all three tiers. List these separately — they don't get a
|
|
27
|
+
row in the main RTM (which is organized by requirement), but they must
|
|
28
|
+
appear in the report (Section 2, as a trailing "Orphan Test Cases" list,
|
|
29
|
+
or in Section 18 as their own Observation).
|
|
30
|
+
|
|
31
|
+
6. Compute per-row coverage % is not applicable at the row level (a
|
|
32
|
+
requirement either has matches or doesn't) — row-level coverage nuance
|
|
33
|
+
belongs in the `Observation` field; the numeric coverage percentages
|
|
34
|
+
(Rule 13) are aggregate, computed once across the whole `RTM` in
|
|
35
|
+
`TRACEABILITY_ENGINE.md` §3, not per row.
|
|
36
|
+
|
|
37
|
+
## Output Shape
|
|
38
|
+
|
|
39
|
+
One `templates/rtm-row.md` row per unified requirement/AC item, grouped in
|
|
40
|
+
the report by the source document's own organizing structure (by user story,
|
|
41
|
+
then by BRD section if Combined Spec Mode is false).
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Prompt 05 — Coverage Analysis
|
|
2
|
+
|
|
3
|
+
**Input**: `RTM`, `TEST_CASE_MODEL`, `RESOLVED_CONFIG`.
|
|
4
|
+
**Output**: Filled tables for `VALIDATION_RULES.md` Rules 1-4 and 9, ready
|
|
5
|
+
for Report Template sections 2-8 and 12.
|
|
6
|
+
|
|
7
|
+
## Procedure
|
|
8
|
+
|
|
9
|
+
1. **Run Rule 17 first** (if not already resolved earlier in the pipeline) —
|
|
10
|
+
produce the per-category Applicable/N/A determination for this project's
|
|
11
|
+
resolved profile. Every step below reads this determination before
|
|
12
|
+
reporting anything as a gap.
|
|
13
|
+
|
|
14
|
+
2. **Rule 1 (Traceability)** — already substantially produced by Prompt 04;
|
|
15
|
+
this step adds the "No orphan test cases" check output and the Document
|
|
16
|
+
Integrity findings collected during Prompts 01-02.
|
|
17
|
+
|
|
18
|
+
3. **Rule 2 (Frontend Coverage)** — for each Applicable category, scan
|
|
19
|
+
`TEST_CASE_MODEL` for evidence (an explicit test, or — for automated
|
|
20
|
+
source — a test whose body/assertions match the category's code-level
|
|
21
|
+
signature per `VALIDATION_RULES.md` Rule 2's automated-suite note).
|
|
22
|
+
Status per category: `Full` (multiple tests, including edge cases) /
|
|
23
|
+
`Partial` (some evidence, not exhaustive — say what's missing) /
|
|
24
|
+
`Missing` (Applicable, zero evidence) / `N/A`.
|
|
25
|
+
|
|
26
|
+
4. **Rule 3 (Backend/Data-Layer Coverage)** — same procedure, reinterpreted
|
|
27
|
+
per `VALIDATION_RULES.md` Rule 3's no-real-backend note when applicable.
|
|
28
|
+
|
|
29
|
+
5. **Rule 4 (Requirement Coverage breadth)** — for each requirement in
|
|
30
|
+
`RTM`, check which of the 18 test-type categories (Positive through
|
|
31
|
+
Sanity) have at least one matched test case exhibiting that type
|
|
32
|
+
(from the `test_type` field extracted in Prompt 03, or inferred from the
|
|
33
|
+
manual test case's steps/expected result).
|
|
34
|
+
|
|
35
|
+
6. **Rule 9 (Business Rule Validation)** — for each `BusinessRule` extracted
|
|
36
|
+
in Prompts 01-02, locate test evidence and independently verify the
|
|
37
|
+
formula/logic match: recompute the rule's stated formula against the
|
|
38
|
+
test's own worked example/fixture values, and confirm they agree.
|
|
39
|
+
A test that merely asserts *a* value without the report-writer having
|
|
40
|
+
independently checked that value against the source formula is not
|
|
41
|
+
sufficient evidence of a "Yes" match — do the arithmetic.
|
|
42
|
+
|
|
43
|
+
## Output
|
|
44
|
+
|
|
45
|
+
Populates Report Template Sections 2 (partially — RTM itself comes from
|
|
46
|
+
Prompt 04), 3, 4, 6, 7, 8, and 12.
|