@schneiderjoseph/devia 0.1.0
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/AGENTS.md +149 -0
- package/CHANGELOG.md +78 -0
- package/GOVERNANCE.md +51 -0
- package/LEVELS.md +78 -0
- package/LICENSE +21 -0
- package/MATURITY.md +79 -0
- package/MEMORY.md +122 -0
- package/MIGRATION.md +62 -0
- package/PRINCIPLES.md +110 -0
- package/README.md +125 -0
- package/REFERENCES.md +30 -0
- package/VERSION +5 -0
- package/bin/devia.mjs +13 -0
- package/checklists/README.md +39 -0
- package/checklists/design/accessibility-review.md +11 -0
- package/checklists/design/design-to-code-review.md +10 -0
- package/checklists/design/responsive-review.md +7 -0
- package/checklists/design/ui-review.md +8 -0
- package/checklists/design/ux-review.md +10 -0
- package/checklists/engineering/accessibility.md +8 -0
- package/checklists/engineering/api.md +12 -0
- package/checklists/engineering/architecture.md +8 -0
- package/checklists/engineering/database.md +11 -0
- package/checklists/engineering/devops.md +9 -0
- package/checklists/engineering/disaster-recovery.md +9 -0
- package/checklists/engineering/frontend.md +9 -0
- package/checklists/engineering/incident.md +9 -0
- package/checklists/engineering/performance.md +7 -0
- package/checklists/engineering/production.md +26 -0
- package/checklists/engineering/release.md +17 -0
- package/checklists/engineering/security.md +33 -0
- package/checklists/engineering/testing.md +8 -0
- package/compliance/COVERAGE.md +46 -0
- package/compliance/REQUIREMENTS.md +8 -0
- package/compliance/TRACEABILITY.md +160 -0
- package/compliance/WAIVERS.md +13 -0
- package/package.json +74 -0
- package/rules/LIFECYCLE.md +16 -0
- package/rules/README.md +166 -0
- package/rules/accessibility/A11Y-001.md +42 -0
- package/rules/accessibility/A11Y-002.md +41 -0
- package/rules/accessibility/A11Y-003.md +40 -0
- package/rules/accessibility/A11Y-004.md +40 -0
- package/rules/accessibility/A11Y-005.md +39 -0
- package/rules/accessibility/A11Y-006.md +42 -0
- package/rules/accessibility/A11Y-007.md +39 -0
- package/rules/accessibility/A11Y-008.md +40 -0
- package/rules/accessibility/A11Y-009.md +41 -0
- package/rules/accessibility/A11Y-010.md +40 -0
- package/rules/accessibility/A11Y-011.md +39 -0
- package/rules/accessibility/A11Y-012.md +39 -0
- package/rules/agent/AGT-001.md +42 -0
- package/rules/agent/AGT-002.md +39 -0
- package/rules/agent/AGT-003.md +38 -0
- package/rules/agent/AGT-004.md +39 -0
- package/rules/agent/AGT-005.md +38 -0
- package/rules/agent/AGT-006.md +38 -0
- package/rules/agent/AGT-007.md +38 -0
- package/rules/agent/AGT-008.md +38 -0
- package/rules/agent/AGT-009.md +39 -0
- package/rules/agent/AGT-010.md +38 -0
- package/rules/agent/AGT-011.md +38 -0
- package/rules/ai/AI-001.md +44 -0
- package/rules/ai/AI-002.md +39 -0
- package/rules/ai/AI-003.md +40 -0
- package/rules/ai/AI-004.md +39 -0
- package/rules/ai/AI-005.md +38 -0
- package/rules/api/API-001.md +39 -0
- package/rules/api/API-002.md +39 -0
- package/rules/api/API-003.md +39 -0
- package/rules/api/API-004.md +38 -0
- package/rules/api/API-005.md +39 -0
- package/rules/api/API-006.md +40 -0
- package/rules/architecture/ARC-001.md +41 -0
- package/rules/architecture/ARC-002.md +43 -0
- package/rules/architecture/ARC-003.md +43 -0
- package/rules/architecture/ARC-004.md +40 -0
- package/rules/architecture/ARC-005.md +39 -0
- package/rules/architecture/ARC-006.md +39 -0
- package/rules/components/CMP-001.md +39 -0
- package/rules/components/CMP-002.md +38 -0
- package/rules/components/CMP-003.md +39 -0
- package/rules/components/CMP-004.md +40 -0
- package/rules/components/CMP-005.md +39 -0
- package/rules/content/CNT-001.md +39 -0
- package/rules/data-display/DATA-001.md +39 -0
- package/rules/data-display/DATA-002.md +39 -0
- package/rules/data-display/DATA-003.md +40 -0
- package/rules/data-display/DATA-004.md +40 -0
- package/rules/database/DB-001.md +43 -0
- package/rules/database/DB-002.md +38 -0
- package/rules/database/DB-003.md +40 -0
- package/rules/database/DB-004.md +44 -0
- package/rules/database/DB-005.md +39 -0
- package/rules/database/DB-006.md +38 -0
- package/rules/database/DB-007.md +40 -0
- package/rules/database/DB-008.md +40 -0
- package/rules/design-system/DS-001.md +39 -0
- package/rules/design-system/DS-002.md +40 -0
- package/rules/design-system/DS-003.md +38 -0
- package/rules/devops/OPS-001.md +43 -0
- package/rules/devops/OPS-002.md +39 -0
- package/rules/devops/OPS-003.md +38 -0
- package/rules/devops/OPS-004.md +40 -0
- package/rules/devops/OPS-005.md +43 -0
- package/rules/devops/OPS-006.md +38 -0
- package/rules/devops/OPS-007.md +40 -0
- package/rules/interaction/INT-001.md +39 -0
- package/rules/interaction/INT-002.md +39 -0
- package/rules/localization/I18N-001.md +38 -0
- package/rules/localization/I18N-002.md +40 -0
- package/rules/localization/I18N-003.md +39 -0
- package/rules/memory/MEM-001.md +44 -0
- package/rules/memory/MEM-002.md +39 -0
- package/rules/memory/MEM-003.md +38 -0
- package/rules/memory/MEM-004.md +38 -0
- package/rules/memory/MEM-005.md +38 -0
- package/rules/memory/MEM-006.md +38 -0
- package/rules/memory/MEM-007.md +38 -0
- package/rules/memory/MEM-008.md +38 -0
- package/rules/memory/MEM-009.md +39 -0
- package/rules/memory/MEM-010.md +38 -0
- package/rules/memory/MEM-011.md +38 -0
- package/rules/motion/MOT-001.md +38 -0
- package/rules/observability/OBS-001.md +40 -0
- package/rules/observability/OBS-002.md +40 -0
- package/rules/observability/OBS-003.md +38 -0
- package/rules/observability/OBS-004.md +38 -0
- package/rules/privacy/PRIV-001.md +38 -0
- package/rules/privacy/PRIV-002.md +44 -0
- package/rules/privacy/PRIV-003.md +40 -0
- package/rules/privacy/PRIV-004.md +41 -0
- package/rules/responsive/RWD-001.md +40 -0
- package/rules/responsive/RWD-002.md +39 -0
- package/rules/responsive/RWD-003.md +39 -0
- package/rules/security/SEC-001.md +44 -0
- package/rules/security/SEC-002.md +44 -0
- package/rules/security/SEC-003.md +41 -0
- package/rules/security/SEC-004.md +40 -0
- package/rules/security/SEC-005.md +42 -0
- package/rules/security/SEC-006.md +40 -0
- package/rules/security/SEC-007.md +44 -0
- package/rules/security/SEC-008.md +39 -0
- package/rules/security/SEC-009.md +40 -0
- package/rules/security/SEC-010.md +40 -0
- package/rules/security/SEC-011.md +40 -0
- package/rules/security/SEC-012.md +40 -0
- package/rules/states/STATE-001.md +38 -0
- package/rules/states/STATE-002.md +39 -0
- package/rules/states/STATE-003.md +39 -0
- package/rules/states/STATE-004.md +38 -0
- package/rules/testing/TST-001.md +39 -0
- package/rules/testing/TST-002.md +39 -0
- package/rules/testing/TST-003.md +39 -0
- package/rules/testing/TST-004.md +38 -0
- package/rules/testing/TST-005.md +40 -0
- package/rules/testing/TST-006.md +39 -0
- package/rules/ui/UI-001.md +40 -0
- package/rules/ui/UI-002.md +38 -0
- package/rules/ui/UI-003.md +41 -0
- package/rules/ui/UI-004.md +41 -0
- package/rules/ui/UI-005.md +41 -0
- package/rules/ui/UI-006.md +40 -0
- package/rules/ui/UI-007.md +41 -0
- package/rules/ux/UX-001.md +41 -0
- package/rules/ux/UX-002.md +41 -0
- package/rules/ux/UX-003.md +39 -0
- package/rules/ux/UX-004.md +39 -0
- package/rules/ux/UX-005.md +40 -0
- package/rules/ux/UX-006.md +40 -0
- package/rules/ux/UX-007.md +44 -0
- package/rules/ux/UX-008.md +41 -0
- package/rules/ux/UX-009.md +39 -0
- package/rules/ux/UX-010.md +40 -0
- package/rules/ux/UX-011.md +40 -0
- package/rules/ux/UX-012.md +40 -0
- package/rules/ux/UX-013.md +39 -0
- package/schema/README.md +19 -0
- package/schema/checklist.schema.json +34 -0
- package/schema/component.schema.json +37 -0
- package/schema/project-config.schema.json +70 -0
- package/schema/rule.schema.json +104 -0
- package/schema/token.schema.json +15 -0
- package/schema/waiver.schema.json +33 -0
- package/scripts/build-index.mjs +178 -0
- package/scripts/validate-links.mjs +43 -0
- package/scripts/validate-rules.mjs +42 -0
- package/skills/devia/SKILL.md +114 -0
- package/src/cli.mjs +107 -0
- package/src/commands/check.mjs +483 -0
- package/src/commands/doctor.mjs +139 -0
- package/src/commands/init.mjs +186 -0
- package/src/commands/registry.mjs +154 -0
- package/src/commands/rules.mjs +101 -0
- package/src/commands/skills.mjs +97 -0
- package/src/commands/sync.mjs +83 -0
- package/src/commands/validate.mjs +194 -0
- package/src/lib/fs.mjs +89 -0
- package/src/lib/git.mjs +31 -0
- package/src/lib/rules.mjs +85 -0
- package/src/lib/ui.mjs +52 -0
- package/src/lib/vendor.mjs +74 -0
- package/src/lib/version.mjs +19 -0
- package/src/lib/yaml.mjs +152 -0
- package/standard/README.md +31 -0
- package/standard/design/README.md +51 -0
- package/standard/design/REFERENCES.md +39 -0
- package/standard/design/accessibility/aria.md +7 -0
- package/standard/design/accessibility/contrast.md +6 -0
- package/standard/design/accessibility/focus.md +6 -0
- package/standard/design/accessibility/forms.md +3 -0
- package/standard/design/accessibility/keyboard.md +6 -0
- package/standard/design/accessibility/reduced-motion.md +3 -0
- package/standard/design/accessibility/reflow.md +3 -0
- package/standard/design/accessibility/screen-readers.md +3 -0
- package/standard/design/accessibility/target-size.md +3 -0
- package/standard/design/accessibility/testing.md +3 -0
- package/standard/design/accessibility/wcag-2.2.md +16 -0
- package/standard/design/accessibility/zoom.md +3 -0
- package/standard/design/ai/ai-design-rules.md +8 -0
- package/standard/design/ai/anti-patterns.md +1 -0
- package/standard/design/ai/compliance-format.md +22 -0
- package/standard/design/ai/design-review.md +10 -0
- package/standard/design/ai/evals/README.md +1 -0
- package/standard/design/ai/instructions.md +7 -0
- package/standard/design/ai/prompts/accessibility-review.md +5 -0
- package/standard/design/ai/prompts/design-system-review.md +5 -0
- package/standard/design/ai/prompts/ui-review.md +5 -0
- package/standard/design/ai/prompts/ux-review.md +5 -0
- package/standard/design/ai/review-protocol.md +11 -0
- package/standard/design/anti-patterns/accessibility.md +7 -0
- package/standard/design/anti-patterns/ai-generated.md +6 -0
- package/standard/design/anti-patterns/dashboards.md +5 -0
- package/standard/design/anti-patterns/forms.md +5 -0
- package/standard/design/anti-patterns/responsive.md +5 -0
- package/standard/design/anti-patterns/ui.md +6 -0
- package/standard/design/anti-patterns/ux.md +5 -0
- package/standard/design/components/buttons.md +6 -0
- package/standard/design/components/dialogs.md +5 -0
- package/standard/design/components/feedback.md +3 -0
- package/standard/design/components/forms.md +3 -0
- package/standard/design/components/navigation.md +3 -0
- package/standard/design/components/tables.md +6 -0
- package/standard/design/content/error-messages.md +4 -0
- package/standard/design/content/ux-writing.md +5 -0
- package/standard/design/data-display/README.md +5 -0
- package/standard/design/data-display/currency.md +3 -0
- package/standard/design/data-display/dates.md +3 -0
- package/standard/design/data-display/density.md +3 -0
- package/standard/design/data-display/filtering.md +3 -0
- package/standard/design/data-display/localization.md +3 -0
- package/standard/design/data-display/numbers.md +3 -0
- package/standard/design/data-display/pagination.md +3 -0
- package/standard/design/data-display/percentages.md +3 -0
- package/standard/design/data-display/sorting.md +3 -0
- package/standard/design/data-display/tables.md +3 -0
- package/standard/design/data-display/time.md +3 -0
- package/standard/design/decisions/ADR-001-token-naming.md +13 -0
- package/standard/design/decisions/ADR-002-radius-scale.md +9 -0
- package/standard/design/decisions/ADR-003-color-system.md +9 -0
- package/standard/design/decisions/ADR-004-component-versioning.md +9 -0
- package/standard/design/decisions/README.md +3 -0
- package/standard/design/design-system/components.md +9 -0
- package/standard/design/design-system/naming.md +19 -0
- package/standard/design/design-system/tokens.md +7 -0
- package/standard/design/design-system/variants.md +5 -0
- package/standard/design/design-system/versioning.md +5 -0
- package/standard/design/health/coverage.md +1 -0
- package/standard/design/health/dashboard.md +14 -0
- package/standard/design/health/maturity-model.md +9 -0
- package/standard/design/health/score.md +14 -0
- package/standard/design/interaction/README.md +10 -0
- package/standard/design/interaction/keyboard.md +3 -0
- package/standard/design/interaction/mouse.md +2 -0
- package/standard/design/interaction/pen.md +1 -0
- package/standard/design/interaction/touch.md +3 -0
- package/standard/design/interaction/touchscreen.md +6 -0
- package/standard/design/interaction/voice.md +2 -0
- package/standard/design/localization/README.md +5 -0
- package/standard/design/localization/currency.md +3 -0
- package/standard/design/localization/date-time.md +3 -0
- package/standard/design/localization/i18n.md +3 -0
- package/standard/design/localization/locale-testing.md +3 -0
- package/standard/design/localization/number-formatting.md +3 -0
- package/standard/design/localization/pluralization.md +3 -0
- package/standard/design/localization/rtl.md +3 -0
- package/standard/design/localization/text-expansion.md +3 -0
- package/standard/design/motion/animation.md +6 -0
- package/standard/design/penpot/WORKFLOW.md +27 -0
- package/standard/design/platforms/README.md +12 -0
- package/standard/design/platforms/desktop/README.md +5 -0
- package/standard/design/platforms/mobile/android.md +5 -0
- package/standard/design/platforms/mobile/ios.md +5 -0
- package/standard/design/platforms/tablet/README.md +5 -0
- package/standard/design/platforms/web/README.md +1 -0
- package/standard/design/principles/design-principles.md +9 -0
- package/standard/design/principles/ui-principles.md +7 -0
- package/standard/design/principles/ux-principles.md +14 -0
- package/standard/design/references/atlassian.md +3 -0
- package/standard/design/references/carbon.md +3 -0
- package/standard/design/references/figma-sds.md +5 -0
- package/standard/design/references/govuk.md +3 -0
- package/standard/design/references/material.md +3 -0
- package/standard/design/references/nng.md +3 -0
- package/standard/design/references/openui.md +3 -0
- package/standard/design/references/primer.md +5 -0
- package/standard/design/references/storybook.md +3 -0
- package/standard/design/references/uswds.md +3 -0
- package/standard/design/references/w3c.md +3 -0
- package/standard/design/responsive/desktop.md +4 -0
- package/standard/design/responsive/mobile.md +6 -0
- package/standard/design/responsive/tablet.md +3 -0
- package/standard/design/states/async.md +3 -0
- package/standard/design/states/conflict.md +3 -0
- package/standard/design/states/empty.md +3 -0
- package/standard/design/states/error.md +3 -0
- package/standard/design/states/interaction.md +5 -0
- package/standard/design/states/loading.md +3 -0
- package/standard/design/states/offline.md +3 -0
- package/standard/design/states/optimistic.md +3 -0
- package/standard/design/states/partial.md +3 -0
- package/standard/design/states/permission-denied.md +3 -0
- package/standard/design/states/rate-limited.md +3 -0
- package/standard/design/states/read-only.md +3 -0
- package/standard/design/states/retry.md +3 -0
- package/standard/design/states/skeleton.md +3 -0
- package/standard/design/states/stale.md +3 -0
- package/standard/design/states/success.md +3 -0
- package/standard/design/states/timeout.md +3 -0
- package/standard/design/states/unsaved-changes.md +3 -0
- package/standard/design/ui/color.md +6 -0
- package/standard/design/ui/grids.md +5 -0
- package/standard/design/ui/icons.md +5 -0
- package/standard/design/ui/imagery.md +5 -0
- package/standard/design/ui/layout.md +5 -0
- package/standard/design/ui/spacing.md +5 -0
- package/standard/design/ui/typography.md +6 -0
- package/standard/design/ui/visual-design.md +7 -0
- package/standard/design/ux/cognitive-load.md +5 -0
- package/standard/design/ux/errors.md +6 -0
- package/standard/design/ux/feedback.md +5 -0
- package/standard/design/ux/forms.md +7 -0
- package/standard/design/ux/heuristics.md +14 -0
- package/standard/design/ux/information-architecture.md +6 -0
- package/standard/design/ux/navigation.md +6 -0
- package/standard/design/ux/usability.md +6 -0
- package/standard/engineering/README.md +29 -0
- package/standard/engineering/REFERENCES.md +42 -0
- package/standard/engineering/ai/AI_SECURITY.md +15 -0
- package/standard/engineering/ai/PROMPT_SECURITY.md +6 -0
- package/standard/engineering/architecture/ADR.md +11 -0
- package/standard/engineering/architecture/ARCHITECTURE.md +25 -0
- package/standard/engineering/architecture/PRINCIPLES.md +17 -0
- package/standard/engineering/architecture/THREAT_MODEL.md +14 -0
- package/standard/engineering/backend/API.md +29 -0
- package/standard/engineering/backend/BACKGROUND_JOBS.md +12 -0
- package/standard/engineering/backend/ERROR_HANDLING.md +26 -0
- package/standard/engineering/backend/LOGGING.md +12 -0
- package/standard/engineering/compliance/DATA_RETENTION.md +10 -0
- package/standard/engineering/compliance/PRIVACY.md +11 -0
- package/standard/engineering/database/BACKUPS.md +19 -0
- package/standard/engineering/database/DATABASE.md +30 -0
- package/standard/engineering/database/MIGRATIONS.md +12 -0
- package/standard/engineering/devops/BRANCH_PROTECTION.md +17 -0
- package/standard/engineering/devops/CI_CD.md +48 -0
- package/standard/engineering/devops/DEPLOYMENT.md +12 -0
- package/standard/engineering/devops/DOCKER.md +9 -0
- package/standard/engineering/devops/ENVIRONMENTS.md +12 -0
- package/standard/engineering/devops/RELEASE.md +6 -0
- package/standard/engineering/devops/ROLLBACK.md +9 -0
- package/standard/engineering/frontend/ACCESSIBILITY.md +16 -0
- package/standard/engineering/frontend/DESIGN_SYSTEM.md +10 -0
- package/standard/engineering/frontend/FRONTEND.md +17 -0
- package/standard/engineering/frontend/UX.md +15 -0
- package/standard/engineering/observability/ALERTING.md +11 -0
- package/standard/engineering/observability/INCIDENTS.md +10 -0
- package/standard/engineering/observability/MONITORING.md +17 -0
- package/standard/engineering/payments/PAYMENTS.md +15 -0
- package/standard/engineering/performance/PERFORMANCE.md +19 -0
- package/standard/engineering/security/API_SECURITY.md +22 -0
- package/standard/engineering/security/ASVS_5.0/V10_MALICIOUS_CODE.md +31 -0
- package/standard/engineering/security/ASVS_5.0/V11_BUSINESS_LOGIC.md +31 -0
- package/standard/engineering/security/ASVS_5.0/V12_FILES.md +31 -0
- package/standard/engineering/security/ASVS_5.0/V13_API.md +31 -0
- package/standard/engineering/security/ASVS_5.0/V14_CONFIGURATION.md +31 -0
- package/standard/engineering/security/ASVS_5.0/V1_ARCHITECTURE.md +31 -0
- package/standard/engineering/security/ASVS_5.0/V2_AUTHENTICATION.md +31 -0
- package/standard/engineering/security/ASVS_5.0/V3_SESSION.md +31 -0
- package/standard/engineering/security/ASVS_5.0/V4_ACCESS_CONTROL.md +31 -0
- package/standard/engineering/security/ASVS_5.0/V5_VALIDATION.md +31 -0
- package/standard/engineering/security/ASVS_5.0/V6_CRYPTOGRAPHY.md +31 -0
- package/standard/engineering/security/ASVS_5.0/V7_ERROR_HANDLING.md +31 -0
- package/standard/engineering/security/ASVS_5.0/V8_DATA_PROTECTION.md +31 -0
- package/standard/engineering/security/ASVS_5.0/V9_COMMUNICATION.md +31 -0
- package/standard/engineering/security/ASVS_REGISTRY.md +31 -0
- package/standard/engineering/security/AUTHENTICATION.md +28 -0
- package/standard/engineering/security/AUTHORIZATION.md +27 -0
- package/standard/engineering/security/DATA_SECURITY.md +14 -0
- package/standard/engineering/security/OWASP_ASVS.md +31 -0
- package/standard/engineering/security/SECRETS.md +28 -0
- package/standard/engineering/security/SECURITY.md +28 -0
- package/standard/engineering/testing/TESTING.md +27 -0
- package/templates/agents/AGENTS.md +34 -0
- package/templates/agents/CLAUDE.md +33 -0
- package/templates/agents/copilot-instructions.md +15 -0
- package/templates/agents/cursor.mdc +27 -0
- package/templates/agents/windsurfrules.md +17 -0
- package/templates/docs/ADR.md +16 -0
- package/templates/docs/FEATURE.md +19 -0
- package/templates/docs/SECURITY_REPORT.md +15 -0
- package/templates/docs/accessibility-review.md +9 -0
- package/templates/docs/component.md +9 -0
- package/templates/docs/decision-record.md +9 -0
- package/templates/docs/design-review.md +9 -0
- package/templates/docs/exception.md +9 -0
- package/templates/docs/page.md +9 -0
- package/templates/docs/pattern.md +9 -0
- package/templates/docs/user-flow.md +9 -0
- package/templates/github/workflows/app-ci.yml +91 -0
- package/templates/project/00_OVERVIEW.md +51 -0
- package/templates/project/01_ARCHITECTURE.md +37 -0
- package/templates/project/02_SURFACES.md +30 -0
- package/templates/project/03_DATA_MODEL.md +31 -0
- package/templates/project/04_PERMISSIONS.md +32 -0
- package/templates/project/05_FLOWS.md +20 -0
- package/templates/project/06_INTEGRATIONS.md +21 -0
- package/templates/project/07_DESIGN.md +33 -0
- package/templates/project/10_NEVER_ALWAYS.md +26 -0
- package/templates/project/11_GAPS.md +18 -0
- package/templates/project/12_DEBT.md +19 -0
- package/templates/project/13_RECIPES.md +35 -0
- package/templates/project/14_INDEX.md +50 -0
- package/templates/project/AGENTS.md +51 -0
- package/templates/project/README.md +49 -0
- package/templates/project/impact-map.yaml +41 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: SEC-011
|
|
3
|
+
title: Dependency and secret scanning run in CI
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: security
|
|
7
|
+
priority: P1
|
|
8
|
+
source:
|
|
9
|
+
- OpenSSF Scorecard
|
|
10
|
+
- OWASP ASVS 5.0 V14
|
|
11
|
+
applies_to:
|
|
12
|
+
- repository
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
CI MUST run a dependency audit and a secret scan on every pull request, and MUST fail the build on a known critical finding unless a human records an explicit, time-bounded acceptance.
|
|
17
|
+
validation:
|
|
18
|
+
automated: true
|
|
19
|
+
manual: false
|
|
20
|
+
exceptions: documented-only
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# SEC-011 — Dependency and secret scanning run in CI
|
|
24
|
+
|
|
25
|
+
**Requirement:** CI MUST run a dependency audit and a secret scan on every pull request, and MUST fail the build on a known critical finding unless a human records an explicit, time-bounded acceptance.
|
|
26
|
+
|
|
27
|
+
**Bad:** The audit runs weekly by email and nobody reads it.
|
|
28
|
+
|
|
29
|
+
**Good:** The audit is a required check; a critical advisory blocks the merge.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
- The workflow contains both jobs
|
|
34
|
+
- Both are required checks in branch protection
|
|
35
|
+
|
|
36
|
+
## Lifecycle
|
|
37
|
+
|
|
38
|
+
- Status: `active`
|
|
39
|
+
- Priority: `P1`
|
|
40
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: SEC-012
|
|
3
|
+
title: Credentials are stored irreversibly and compared safely
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: security
|
|
7
|
+
priority: P0
|
|
8
|
+
source:
|
|
9
|
+
- OWASP ASVS 5.0 V6
|
|
10
|
+
applies_to:
|
|
11
|
+
- service
|
|
12
|
+
- database
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
Passwords MUST be stored with a current memory-hard hash (argon2id or bcrypt with a modern cost). API tokens MUST be stored hashed. Secret comparisons MUST be constant time.
|
|
17
|
+
validation:
|
|
18
|
+
automated: false
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: none
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# SEC-012 — Credentials are stored irreversibly and compared safely
|
|
24
|
+
|
|
25
|
+
**Requirement:** Passwords MUST be stored with a current memory-hard hash (argon2id or bcrypt with a modern cost). API tokens MUST be stored hashed. Secret comparisons MUST be constant time.
|
|
26
|
+
|
|
27
|
+
**Bad:** SHA-256 without a salt, or `token === storedToken`.
|
|
28
|
+
|
|
29
|
+
**Good:** argon2id with per-credential salt; tokens stored as hashes; comparisons use a timing-safe function.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
- Read the hashing configuration
|
|
34
|
+
- Confirm no reversible storage of a credential
|
|
35
|
+
|
|
36
|
+
## Lifecycle
|
|
37
|
+
|
|
38
|
+
- Status: `active`
|
|
39
|
+
- Priority: `P0`
|
|
40
|
+
- Exceptions: `none`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: STATE-001
|
|
3
|
+
title: Interaction state set
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
priority: P1
|
|
7
|
+
domain: states
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- components
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Interactive components MUST define default, hover (if pointer), focus-visible, active, and disabled as applicable.
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# STATE-001 — Interaction state set
|
|
23
|
+
|
|
24
|
+
**Requirement:** Interactive components MUST define default, hover (if pointer), focus-visible, active, and disabled as applicable.
|
|
25
|
+
|
|
26
|
+
**Bad:** Only default styles shipped.
|
|
27
|
+
|
|
28
|
+
**Good:** Full interaction matrix in component spec.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Design or engineering review
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
- Status: `active`
|
|
37
|
+
- Priority: `P1`
|
|
38
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: STATE-002
|
|
3
|
+
title: Async outcome states
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
priority: P1
|
|
7
|
+
domain: states
|
|
8
|
+
source:
|
|
9
|
+
- NN/g
|
|
10
|
+
applies_to:
|
|
11
|
+
- async
|
|
12
|
+
- forms
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
Async operations MUST expose pending, success, and failure (with retry when safe).
|
|
17
|
+
validation:
|
|
18
|
+
automated: false
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: documented-only
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# STATE-002 — Async outcome states
|
|
24
|
+
|
|
25
|
+
**Requirement:** Async operations MUST expose pending, success, and failure (with retry when safe).
|
|
26
|
+
|
|
27
|
+
**Bad:** Spinner forever on failure.
|
|
28
|
+
|
|
29
|
+
**Good:** Error + Retry.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
- Design or engineering review
|
|
34
|
+
|
|
35
|
+
## Lifecycle
|
|
36
|
+
|
|
37
|
+
- Status: `active`
|
|
38
|
+
- Priority: `P1`
|
|
39
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: STATE-003
|
|
3
|
+
title: Permission-denied and read-only
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
priority: P1
|
|
7
|
+
domain: states
|
|
8
|
+
source:
|
|
9
|
+
- NN/g
|
|
10
|
+
applies_to:
|
|
11
|
+
- page
|
|
12
|
+
- forms
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
When the user lacks permission, the UI MUST explain denial (not a blank/broken page).
|
|
17
|
+
validation:
|
|
18
|
+
automated: false
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: documented-only
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# STATE-003 — Permission-denied and read-only
|
|
24
|
+
|
|
25
|
+
**Requirement:** When the user lacks permission, the UI MUST explain denial (not a blank/broken page).
|
|
26
|
+
|
|
27
|
+
**Bad:** Empty screen for forbidden resource.
|
|
28
|
+
|
|
29
|
+
**Good:** Permission denied message + next step.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
- Design or engineering review
|
|
34
|
+
|
|
35
|
+
## Lifecycle
|
|
36
|
+
|
|
37
|
+
- Status: `active`
|
|
38
|
+
- Priority: `P1`
|
|
39
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: STATE-004
|
|
3
|
+
title: Unsaved changes
|
|
4
|
+
severity: SHOULD
|
|
5
|
+
status: active
|
|
6
|
+
priority: P2
|
|
7
|
+
domain: states
|
|
8
|
+
source:
|
|
9
|
+
- NN/g
|
|
10
|
+
applies_to:
|
|
11
|
+
- forms
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Views with unsaved edits SHOULD warn before destructive navigation.
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# STATE-004 — Unsaved changes
|
|
23
|
+
|
|
24
|
+
**Requirement:** Views with unsaved edits SHOULD warn before destructive navigation.
|
|
25
|
+
|
|
26
|
+
**Bad:** Back discards form silently.
|
|
27
|
+
|
|
28
|
+
**Good:** Leave without saving? confirm.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Design or engineering review
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
- Status: `active`
|
|
37
|
+
- Priority: `P2`
|
|
38
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: TST-001
|
|
3
|
+
title: Business rules are covered by automated tests
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: testing
|
|
7
|
+
priority: P0
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- repository
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Every rule that decides money, access, state transitions or eligibility MUST have an automated test, including the boundary and the refusal path — not only the happy case.
|
|
16
|
+
validation:
|
|
17
|
+
automated: true
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: none
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# TST-001 — Business rules are covered by automated tests
|
|
23
|
+
|
|
24
|
+
**Requirement:** Every rule that decides money, access, state transitions or eligibility MUST have an automated test, including the boundary and the refusal path — not only the happy case.
|
|
25
|
+
|
|
26
|
+
**Bad:** A discount rule with one test that proves it applies, and none that prove it stops applying.
|
|
27
|
+
|
|
28
|
+
**Good:** Tests for below, at, and above the threshold, plus the rejection path.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- The rule's boundaries appear in the test names
|
|
33
|
+
- The test fails when the rule is inverted
|
|
34
|
+
|
|
35
|
+
## Lifecycle
|
|
36
|
+
|
|
37
|
+
- Status: `active`
|
|
38
|
+
- Priority: `P0`
|
|
39
|
+
- Exceptions: `none`
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: TST-002
|
|
3
|
+
title: Authorization and isolation paths are tested
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: testing
|
|
7
|
+
priority: P0
|
|
8
|
+
source:
|
|
9
|
+
- OWASP ASVS 5.0 V4
|
|
10
|
+
applies_to:
|
|
11
|
+
- repository
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Tests MUST prove that an unauthorized actor is refused and that one tenant cannot reach another's data. Absence of such a test is a P0 gap even when the code looks correct.
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: none
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# TST-002 — Authorization and isolation paths are tested
|
|
23
|
+
|
|
24
|
+
**Requirement:** Tests MUST prove that an unauthorized actor is refused and that one tenant cannot reach another's data. Absence of such a test is a P0 gap even when the code looks correct.
|
|
25
|
+
|
|
26
|
+
**Bad:** Only the authenticated-happy-path is tested; the 403 case is assumed.
|
|
27
|
+
|
|
28
|
+
**Good:** A test per sensitive route asserting 401/403, plus a cross-tenant read and write test.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Refusal tests exist for the routes touched
|
|
33
|
+
- Cross-tenant tests exist
|
|
34
|
+
|
|
35
|
+
## Lifecycle
|
|
36
|
+
|
|
37
|
+
- Status: `active`
|
|
38
|
+
- Priority: `P0`
|
|
39
|
+
- Exceptions: `none`
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: TST-003
|
|
3
|
+
title: Never disable or weaken a test to make CI pass
|
|
4
|
+
severity: MUST NOT
|
|
5
|
+
status: active
|
|
6
|
+
domain: testing
|
|
7
|
+
priority: P0
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- repository
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Skipping, deleting, loosening an assertion, or widening a tolerance to turn CI green is forbidden. Either fix the code, or record the failure as debt and stop.
|
|
16
|
+
validation:
|
|
17
|
+
automated: true
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: none
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# TST-003 — Never disable or weaken a test to make CI pass
|
|
23
|
+
|
|
24
|
+
**Requirement:** Skipping, deleting, loosening an assertion, or widening a tolerance to turn CI green is forbidden. Either fix the code, or record the failure as debt and stop.
|
|
25
|
+
|
|
26
|
+
**Bad:** `it.skip` added in the same commit as the feature that broke it.
|
|
27
|
+
|
|
28
|
+
**Good:** The regression is fixed, or the change is reverted and a debt line is opened.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Diff contains no new skip, `only`, or removed assertion
|
|
33
|
+
- Coverage did not drop silently
|
|
34
|
+
|
|
35
|
+
## Lifecycle
|
|
36
|
+
|
|
37
|
+
- Status: `active`
|
|
38
|
+
- Priority: `P0`
|
|
39
|
+
- Exceptions: `none`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: TST-004
|
|
3
|
+
title: Every bug fix ships with a regression test
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: testing
|
|
7
|
+
priority: P1
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- repository
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
A defect fix MUST include a test that fails before the fix and passes after it.
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# TST-004 — Every bug fix ships with a regression test
|
|
23
|
+
|
|
24
|
+
**Requirement:** A defect fix MUST include a test that fails before the fix and passes after it.
|
|
25
|
+
|
|
26
|
+
**Bad:** A one-line fix with the note 'tested manually'.
|
|
27
|
+
|
|
28
|
+
**Good:** A test reproducing the reported input, committed with the fix.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- The test fails when the fix is reverted
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
- Status: `active`
|
|
37
|
+
- Priority: `P1`
|
|
38
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: TST-005
|
|
3
|
+
title: Critical journeys are covered end to end
|
|
4
|
+
severity: SHOULD
|
|
5
|
+
status: active
|
|
6
|
+
domain: testing
|
|
7
|
+
priority: P2
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- web
|
|
12
|
+
- api
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
The few journeys the product cannot afford to break — sign in, pay, submit, export — SHOULD have an end-to-end test that exercises the real stack.
|
|
17
|
+
validation:
|
|
18
|
+
automated: false
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: documented-only
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# TST-005 — Critical journeys are covered end to end
|
|
24
|
+
|
|
25
|
+
**Requirement:** The few journeys the product cannot afford to break — sign in, pay, submit, export — SHOULD have an end-to-end test that exercises the real stack.
|
|
26
|
+
|
|
27
|
+
**Bad:** Thorough unit tests and a checkout that has never been driven end to end.
|
|
28
|
+
|
|
29
|
+
**Good:** One end-to-end test per critical journey, run before release.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
- The journey list exists in `.devia/05_FLOWS.md`
|
|
34
|
+
- Each has a test or a named manual step
|
|
35
|
+
|
|
36
|
+
## Lifecycle
|
|
37
|
+
|
|
38
|
+
- Status: `active`
|
|
39
|
+
- Priority: `P2`
|
|
40
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: TST-006
|
|
3
|
+
title: Tests are deterministic and independent
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: testing
|
|
7
|
+
priority: P1
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- repository
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Tests MUST NOT depend on execution order, wall-clock time, network access, or state left by another test. A flaky test is fixed or removed, never retried into green.
|
|
16
|
+
validation:
|
|
17
|
+
automated: true
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# TST-006 — Tests are deterministic and independent
|
|
23
|
+
|
|
24
|
+
**Requirement:** Tests MUST NOT depend on execution order, wall-clock time, network access, or state left by another test. A flaky test is fixed or removed, never retried into green.
|
|
25
|
+
|
|
26
|
+
**Bad:** A test that passes locally and fails in CI because it assumes today's date.
|
|
27
|
+
|
|
28
|
+
**Good:** Time and randomness are injected; each test sets up and tears down its own data.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Run the suite twice in a different order
|
|
33
|
+
- No retry loop hides a flake
|
|
34
|
+
|
|
35
|
+
## Lifecycle
|
|
36
|
+
|
|
37
|
+
- Status: `active`
|
|
38
|
+
- Priority: `P1`
|
|
39
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: UI-001
|
|
3
|
+
title: Type from tokens
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
priority: P1
|
|
7
|
+
domain: ui
|
|
8
|
+
source:
|
|
9
|
+
- Carbon
|
|
10
|
+
- Material
|
|
11
|
+
applies_to:
|
|
12
|
+
- typography
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
UI text sizes/weights/line-heights MUST use design tokens (or the system type scale), not random px values.
|
|
17
|
+
validation:
|
|
18
|
+
automated: true
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: documented-only
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# UI-001 — Type from tokens
|
|
24
|
+
|
|
25
|
+
**Requirement:** UI text sizes/weights/line-heights MUST use design tokens (or the system type scale), not random px values.
|
|
26
|
+
|
|
27
|
+
**Bad:** font-size: 13.5px inline on one card.
|
|
28
|
+
|
|
29
|
+
**Good:** --font-size-sm / role token.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
- Automated checks / lint / a11y tooling where applicable
|
|
34
|
+
- Design or engineering review
|
|
35
|
+
|
|
36
|
+
## Lifecycle
|
|
37
|
+
|
|
38
|
+
- Status: `active`
|
|
39
|
+
- Priority: `P1`
|
|
40
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: UI-002
|
|
3
|
+
title: Readable body measure
|
|
4
|
+
severity: SHOULD
|
|
5
|
+
status: active
|
|
6
|
+
priority: P2
|
|
7
|
+
domain: ui
|
|
8
|
+
source:
|
|
9
|
+
- NN/g
|
|
10
|
+
applies_to:
|
|
11
|
+
- typography
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Long-form reading SHOULD keep a comfortable line length (roughly 45–75 characters where practical).
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# UI-002 — Readable body measure
|
|
23
|
+
|
|
24
|
+
**Requirement:** Long-form reading SHOULD keep a comfortable line length (roughly 45–75 characters where practical).
|
|
25
|
+
|
|
26
|
+
**Bad:** Full-bleed 200-char lines of body text.
|
|
27
|
+
|
|
28
|
+
**Good:** Constrained content width for articles/help.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Design or engineering review
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
- Status: `active`
|
|
37
|
+
- Priority: `P2`
|
|
38
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: UI-003
|
|
3
|
+
title: Semantic tokens over raw hex
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
priority: P1
|
|
7
|
+
domain: ui
|
|
8
|
+
source:
|
|
9
|
+
- DTCG
|
|
10
|
+
- Carbon
|
|
11
|
+
applies_to:
|
|
12
|
+
- color
|
|
13
|
+
- components
|
|
14
|
+
success_criteria:
|
|
15
|
+
[]
|
|
16
|
+
requirement: >
|
|
17
|
+
Product UI MUST consume semantic tokens, not scattered raw hex (except in token definitions).
|
|
18
|
+
validation:
|
|
19
|
+
automated: true
|
|
20
|
+
manual: true
|
|
21
|
+
exceptions: documented-only
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# UI-003 — Semantic tokens over raw hex
|
|
25
|
+
|
|
26
|
+
**Requirement:** Product UI MUST consume semantic tokens, not scattered raw hex (except in token definitions).
|
|
27
|
+
|
|
28
|
+
**Bad:** #ff3b30 hard-coded in 12 components.
|
|
29
|
+
|
|
30
|
+
**Good:** Components reference danger / primary tokens.
|
|
31
|
+
|
|
32
|
+
## Validation
|
|
33
|
+
|
|
34
|
+
- Automated checks / lint / a11y tooling where applicable
|
|
35
|
+
- Design or engineering review
|
|
36
|
+
|
|
37
|
+
## Lifecycle
|
|
38
|
+
|
|
39
|
+
- Status: `active`
|
|
40
|
+
- Priority: `P1`
|
|
41
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: UI-004
|
|
3
|
+
title: Not color alone
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
priority: P0
|
|
7
|
+
domain: ui
|
|
8
|
+
source:
|
|
9
|
+
- WCAG-2.2
|
|
10
|
+
applies_to:
|
|
11
|
+
- status
|
|
12
|
+
- forms
|
|
13
|
+
- charts
|
|
14
|
+
success_criteria:
|
|
15
|
+
- "1.4.1"
|
|
16
|
+
requirement: >
|
|
17
|
+
Status and meaning MUST NOT be conveyed by color alone.
|
|
18
|
+
validation:
|
|
19
|
+
automated: true
|
|
20
|
+
manual: true
|
|
21
|
+
exceptions: documented-only
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# UI-004 — Not color alone
|
|
25
|
+
|
|
26
|
+
**Requirement:** Status and meaning MUST NOT be conveyed by color alone.
|
|
27
|
+
|
|
28
|
+
**Bad:** Red/green dots only for status.
|
|
29
|
+
|
|
30
|
+
**Good:** Color + text/icon/pattern.
|
|
31
|
+
|
|
32
|
+
## Validation
|
|
33
|
+
|
|
34
|
+
- Automated checks / lint / a11y tooling where applicable
|
|
35
|
+
- Design or engineering review
|
|
36
|
+
|
|
37
|
+
## Lifecycle
|
|
38
|
+
|
|
39
|
+
- Status: `active`
|
|
40
|
+
- Priority: `P0`
|
|
41
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: UI-005
|
|
3
|
+
title: Spacing scale
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
priority: P1
|
|
7
|
+
domain: ui
|
|
8
|
+
source:
|
|
9
|
+
- Carbon
|
|
10
|
+
- Material
|
|
11
|
+
applies_to:
|
|
12
|
+
- layout
|
|
13
|
+
- components
|
|
14
|
+
success_criteria:
|
|
15
|
+
[]
|
|
16
|
+
requirement: >
|
|
17
|
+
Spacing MUST use the system scale (e.g. 4/8-based tokens), not arbitrary values.
|
|
18
|
+
validation:
|
|
19
|
+
automated: true
|
|
20
|
+
manual: true
|
|
21
|
+
exceptions: documented-only
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# UI-005 — Spacing scale
|
|
25
|
+
|
|
26
|
+
**Requirement:** Spacing MUST use the system scale (e.g. 4/8-based tokens), not arbitrary values.
|
|
27
|
+
|
|
28
|
+
**Bad:** margin: 13px 7px.
|
|
29
|
+
|
|
30
|
+
**Good:** space.3 / --space-3.
|
|
31
|
+
|
|
32
|
+
## Validation
|
|
33
|
+
|
|
34
|
+
- Automated checks / lint / a11y tooling where applicable
|
|
35
|
+
- Design or engineering review
|
|
36
|
+
|
|
37
|
+
## Lifecycle
|
|
38
|
+
|
|
39
|
+
- Status: `active`
|
|
40
|
+
- Priority: `P1`
|
|
41
|
+
- Exceptions: `documented-only`
|