@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: DB-007
|
|
3
|
+
title: Sensitive actions are written to an append-only audit trail
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: database
|
|
7
|
+
priority: P1
|
|
8
|
+
source:
|
|
9
|
+
- OWASP ASVS 5.0 V7
|
|
10
|
+
applies_to:
|
|
11
|
+
- database
|
|
12
|
+
- service
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
Authentication events, permission changes, money movement, data export and administrative overrides MUST be recorded with actor, timestamp, target and outcome, in a store that is append-only.
|
|
17
|
+
validation:
|
|
18
|
+
automated: false
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: documented-only
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# DB-007 — Sensitive actions are written to an append-only audit trail
|
|
24
|
+
|
|
25
|
+
**Requirement:** Authentication events, permission changes, money movement, data export and administrative overrides MUST be recorded with actor, timestamp, target and outcome, in a store that is append-only.
|
|
26
|
+
|
|
27
|
+
**Bad:** An admin changes a payout and nothing anywhere records who did it.
|
|
28
|
+
|
|
29
|
+
**Good:** An `audit_log` row written in the same transaction as the change, never updated afterwards.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
- The action appears in the audit list in `.devia/04_PERMISSIONS.md`
|
|
34
|
+
- A test asserts the row is written
|
|
35
|
+
|
|
36
|
+
## Lifecycle
|
|
37
|
+
|
|
38
|
+
- Status: `active`
|
|
39
|
+
- Priority: `P1`
|
|
40
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: DB-008
|
|
3
|
+
title: Queries are parameterised
|
|
4
|
+
severity: MUST NOT
|
|
5
|
+
status: active
|
|
6
|
+
domain: database
|
|
7
|
+
priority: P0
|
|
8
|
+
source:
|
|
9
|
+
- OWASP ASVS 5.0 V5
|
|
10
|
+
applies_to:
|
|
11
|
+
- database
|
|
12
|
+
- service
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
SQL MUST NOT be assembled by concatenating user-controlled values. Use parameters or a query builder that parameterises.
|
|
17
|
+
validation:
|
|
18
|
+
automated: true
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: none
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# DB-008 — Queries are parameterised
|
|
24
|
+
|
|
25
|
+
**Requirement:** SQL MUST NOT be assembled by concatenating user-controlled values. Use parameters or a query builder that parameterises.
|
|
26
|
+
|
|
27
|
+
**Bad:** `"select * from users where email = '" + email + "'"`.
|
|
28
|
+
|
|
29
|
+
**Good:** `select * from users where email = $1` with the value passed as a parameter.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
- Grep the diff for string-built SQL
|
|
34
|
+
- Static analysis rule enabled
|
|
35
|
+
|
|
36
|
+
## Lifecycle
|
|
37
|
+
|
|
38
|
+
- Status: `active`
|
|
39
|
+
- Priority: `P0`
|
|
40
|
+
- Exceptions: `none`
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: DS-001
|
|
3
|
+
title: Git is source of truth for tokens
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
priority: P1
|
|
7
|
+
domain: design-system
|
|
8
|
+
source:
|
|
9
|
+
- DTCG
|
|
10
|
+
applies_to:
|
|
11
|
+
- tokens
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Token definitions MUST live in version control. Penpot imports/exports — it does not replace Git.
|
|
16
|
+
validation:
|
|
17
|
+
automated: true
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# DS-001 — Git is source of truth for tokens
|
|
23
|
+
|
|
24
|
+
**Requirement:** Token definitions MUST live in version control. Penpot imports/exports — it does not replace Git.
|
|
25
|
+
|
|
26
|
+
**Bad:** Colors only exist inside a closed design file.
|
|
27
|
+
|
|
28
|
+
**Good:** tokens/*.json in repo; Penpot synced from them.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Automated checks / lint / a11y tooling where applicable
|
|
33
|
+
- Design or engineering review
|
|
34
|
+
|
|
35
|
+
## Lifecycle
|
|
36
|
+
|
|
37
|
+
- Status: `active`
|
|
38
|
+
- Priority: `P1`
|
|
39
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: DS-002
|
|
3
|
+
title: Semantic tokens in components
|
|
4
|
+
severity: SHOULD
|
|
5
|
+
status: active
|
|
6
|
+
priority: P2
|
|
7
|
+
domain: design-system
|
|
8
|
+
source:
|
|
9
|
+
- Carbon
|
|
10
|
+
- DTCG
|
|
11
|
+
applies_to:
|
|
12
|
+
- tokens
|
|
13
|
+
- components
|
|
14
|
+
success_criteria:
|
|
15
|
+
[]
|
|
16
|
+
requirement: >
|
|
17
|
+
App components SHOULD reference semantic tokens, not primitives.
|
|
18
|
+
validation:
|
|
19
|
+
automated: false
|
|
20
|
+
manual: true
|
|
21
|
+
exceptions: documented-only
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# DS-002 — Semantic tokens in components
|
|
25
|
+
|
|
26
|
+
**Requirement:** App components SHOULD reference semantic tokens, not primitives.
|
|
27
|
+
|
|
28
|
+
**Bad:** color.blue.600 in Button.
|
|
29
|
+
|
|
30
|
+
**Good:** color.primary / button.primary.bg.
|
|
31
|
+
|
|
32
|
+
## Validation
|
|
33
|
+
|
|
34
|
+
- Design or engineering review
|
|
35
|
+
|
|
36
|
+
## Lifecycle
|
|
37
|
+
|
|
38
|
+
- Status: `active`
|
|
39
|
+
- Priority: `P2`
|
|
40
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: DS-003
|
|
3
|
+
title: Breaking token changes versioned
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
priority: P1
|
|
7
|
+
domain: design-system
|
|
8
|
+
source:
|
|
9
|
+
- SemVer
|
|
10
|
+
applies_to:
|
|
11
|
+
- tokens
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Breaking token renames/removals MUST bump major (or documented migration) and CHANGELOG.
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# DS-003 — Breaking token changes versioned
|
|
23
|
+
|
|
24
|
+
**Requirement:** Breaking token renames/removals MUST bump major (or documented migration) and CHANGELOG.
|
|
25
|
+
|
|
26
|
+
**Bad:** Silent rename of color.primary in place.
|
|
27
|
+
|
|
28
|
+
**Good:** Major bump + migration note + dual-write window if needed.
|
|
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,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: OPS-001
|
|
3
|
+
title: CI runs on every pull request with required gates
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: devops
|
|
7
|
+
priority: P0
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- repository
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Lint, typecheck, tests, dependency audit, secret scan and `devia check` MUST run on every pull request, and the critical ones MUST be required checks that block the merge.
|
|
16
|
+
validation:
|
|
17
|
+
automated: true
|
|
18
|
+
manual: false
|
|
19
|
+
exceptions: none
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# OPS-001 — CI runs on every pull request with required gates
|
|
23
|
+
|
|
24
|
+
**Requirement:** Lint, typecheck, tests, dependency audit, secret scan and `devia check` MUST run on every pull request, and the critical ones MUST be required checks that block the merge.
|
|
25
|
+
|
|
26
|
+
**Bad:** A workflow that exists but is not required, so a red build merges.
|
|
27
|
+
|
|
28
|
+
**Good:** Branch protection lists the gates; a failure blocks the merge.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Workflow file present
|
|
33
|
+
- Checks marked required in branch protection
|
|
34
|
+
|
|
35
|
+
## Lifecycle
|
|
36
|
+
|
|
37
|
+
- Status: `active`
|
|
38
|
+
- Priority: `P0`
|
|
39
|
+
- Exceptions: `none`
|
|
40
|
+
|
|
41
|
+
## See also
|
|
42
|
+
|
|
43
|
+
- [app-ci.yml](../../templates/github/workflows/app-ci.yml)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: OPS-002
|
|
3
|
+
title: No direct pushes to the default branch
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: devops
|
|
7
|
+
priority: P0
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- repository
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Work MUST reach the default branch through a pull request from a branch. Agents MUST NOT commit to the default branch, force-push a shared branch, or rewrite published history.
|
|
16
|
+
validation:
|
|
17
|
+
automated: true
|
|
18
|
+
manual: false
|
|
19
|
+
exceptions: none
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# OPS-002 — No direct pushes to the default branch
|
|
23
|
+
|
|
24
|
+
**Requirement:** Work MUST reach the default branch through a pull request from a branch. Agents MUST NOT commit to the default branch, force-push a shared branch, or rewrite published history.
|
|
25
|
+
|
|
26
|
+
**Bad:** An agent commits straight to `main` because the change 'is small'.
|
|
27
|
+
|
|
28
|
+
**Good:** `feat/invoice-currency` → pull request → review → merge.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Branch protection enabled
|
|
33
|
+
- The change is on a branch
|
|
34
|
+
|
|
35
|
+
## Lifecycle
|
|
36
|
+
|
|
37
|
+
- Status: `active`
|
|
38
|
+
- Priority: `P0`
|
|
39
|
+
- Exceptions: `none`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: OPS-003
|
|
3
|
+
title: Never bypass a hook or a check
|
|
4
|
+
severity: MUST NOT
|
|
5
|
+
status: active
|
|
6
|
+
domain: devops
|
|
7
|
+
priority: P0
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- repository
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
`--no-verify`, disabled hooks, `[skip ci]` on a gated change, and locally silenced linters are forbidden. A hook that blocks is either right, or a bug to fix in the open.
|
|
16
|
+
validation:
|
|
17
|
+
automated: true
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: none
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# OPS-003 — Never bypass a hook or a check
|
|
23
|
+
|
|
24
|
+
**Requirement:** `--no-verify`, disabled hooks, `[skip ci]` on a gated change, and locally silenced linters are forbidden. A hook that blocks is either right, or a bug to fix in the open.
|
|
25
|
+
|
|
26
|
+
**Bad:** `git commit --no-verify` because the formatter is slow.
|
|
27
|
+
|
|
28
|
+
**Good:** The formatter runs; if it is wrong, the rule is fixed in the repository.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- No bypass flag in the command history or scripts
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
- Status: `active`
|
|
37
|
+
- Priority: `P0`
|
|
38
|
+
- Exceptions: `none`
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: OPS-004
|
|
3
|
+
title: Builds are reproducible
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: devops
|
|
7
|
+
priority: P1
|
|
8
|
+
source:
|
|
9
|
+
- SLSA
|
|
10
|
+
applies_to:
|
|
11
|
+
- repository
|
|
12
|
+
- devops
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
The lockfile MUST be committed and installs MUST use it. Container base images MUST be pinned by digest or an immutable tag. A build MUST NOT depend on a floating latest.
|
|
17
|
+
validation:
|
|
18
|
+
automated: true
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: documented-only
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# OPS-004 — Builds are reproducible
|
|
24
|
+
|
|
25
|
+
**Requirement:** The lockfile MUST be committed and installs MUST use it. Container base images MUST be pinned by digest or an immutable tag. A build MUST NOT depend on a floating latest.
|
|
26
|
+
|
|
27
|
+
**Bad:** `FROM node:latest` and an install that resolves new versions on every run.
|
|
28
|
+
|
|
29
|
+
**Good:** `npm ci` against the committed lockfile; a base image pinned by digest.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
- Lockfile in the diff when the manifest changed
|
|
34
|
+
- No floating image tags
|
|
35
|
+
|
|
36
|
+
## Lifecycle
|
|
37
|
+
|
|
38
|
+
- Status: `active`
|
|
39
|
+
- Priority: `P1`
|
|
40
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: OPS-005
|
|
3
|
+
title: There is a rollback path and it has been used
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: devops
|
|
7
|
+
priority: P1
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- devops
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Every deployable MUST have a documented way back to the previous good state, including what happens to migrations, and it MUST have been exercised at least once.
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# OPS-005 — There is a rollback path and it has been used
|
|
23
|
+
|
|
24
|
+
**Requirement:** Every deployable MUST have a documented way back to the previous good state, including what happens to migrations, and it MUST have been exercised at least once.
|
|
25
|
+
|
|
26
|
+
**Bad:** 'We would just redeploy the old commit' — never attempted, and the migration is irreversible.
|
|
27
|
+
|
|
28
|
+
**Good:** A documented rollback, an expand-then-contract migration strategy, and a rehearsal on record.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Rollback documented
|
|
33
|
+
- Rehearsal recorded with a date
|
|
34
|
+
|
|
35
|
+
## Lifecycle
|
|
36
|
+
|
|
37
|
+
- Status: `active`
|
|
38
|
+
- Priority: `P1`
|
|
39
|
+
- Exceptions: `documented-only`
|
|
40
|
+
|
|
41
|
+
## See also
|
|
42
|
+
|
|
43
|
+
- [ROLLBACK.md](../../standard/engineering/devops/ROLLBACK.md)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: OPS-006
|
|
3
|
+
title: Staging behaves like production
|
|
4
|
+
severity: SHOULD
|
|
5
|
+
status: active
|
|
6
|
+
domain: devops
|
|
7
|
+
priority: P2
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- devops
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
The pre-production environment SHOULD run the same build artifact, the same migrations and the same configuration shape as production, with its own data and credentials.
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# OPS-006 — Staging behaves like production
|
|
23
|
+
|
|
24
|
+
**Requirement:** The pre-production environment SHOULD run the same build artifact, the same migrations and the same configuration shape as production, with its own data and credentials.
|
|
25
|
+
|
|
26
|
+
**Bad:** Staging runs a different Node version and skips the migration step.
|
|
27
|
+
|
|
28
|
+
**Good:** Same image, same pipeline, different secrets and data.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Diff the environment configuration
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
- Status: `active`
|
|
37
|
+
- Priority: `P2`
|
|
38
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: OPS-007
|
|
3
|
+
title: Production state is never mutated by hand
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: devops
|
|
7
|
+
priority: P0
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- devops
|
|
12
|
+
- database
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
Production data and schema MUST be changed through reviewed, repeatable, logged mechanisms — a migration, a scripted job, an admin action that writes an audit row — never by an ad-hoc console command.
|
|
17
|
+
validation:
|
|
18
|
+
automated: false
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: none
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# OPS-007 — Production state is never mutated by hand
|
|
24
|
+
|
|
25
|
+
**Requirement:** Production data and schema MUST be changed through reviewed, repeatable, logged mechanisms — a migration, a scripted job, an admin action that writes an audit row — never by an ad-hoc console command.
|
|
26
|
+
|
|
27
|
+
**Bad:** A quick `UPDATE` in a production console to fix one customer.
|
|
28
|
+
|
|
29
|
+
**Good:** A scripted, reviewed fix that logs what it changed and can run again safely.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
- The change is a committed artifact
|
|
34
|
+
- The action is auditable
|
|
35
|
+
|
|
36
|
+
## Lifecycle
|
|
37
|
+
|
|
38
|
+
- Status: `active`
|
|
39
|
+
- Priority: `P0`
|
|
40
|
+
- Exceptions: `none`
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: INT-001
|
|
3
|
+
title: Touch primary targets
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
priority: P1
|
|
7
|
+
domain: interaction
|
|
8
|
+
source:
|
|
9
|
+
- WCAG-2.2
|
|
10
|
+
applies_to:
|
|
11
|
+
- touch
|
|
12
|
+
- touchscreen
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
On touch-primary surfaces, primary actions MUST meet comfortable touch sizing (prefer 44×44).
|
|
17
|
+
validation:
|
|
18
|
+
automated: false
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: documented-only
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# INT-001 — Touch primary targets
|
|
24
|
+
|
|
25
|
+
**Requirement:** On touch-primary surfaces, primary actions MUST meet comfortable touch sizing (prefer 44×44).
|
|
26
|
+
|
|
27
|
+
**Bad:** Desktop-dense toolbar on POS touchscreen.
|
|
28
|
+
|
|
29
|
+
**Good:** Large hit targets, spacing, no hover-only.
|
|
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: INT-002
|
|
3
|
+
title: Keyboard parity for pointer features
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
priority: P1
|
|
7
|
+
domain: interaction
|
|
8
|
+
source:
|
|
9
|
+
- WCAG-2.2
|
|
10
|
+
applies_to:
|
|
11
|
+
- keyboard
|
|
12
|
+
- mouse
|
|
13
|
+
success_criteria:
|
|
14
|
+
- "2.1.1"
|
|
15
|
+
requirement: >
|
|
16
|
+
Pointer-driven features MUST have a keyboard equivalent when required by WCAG.
|
|
17
|
+
validation:
|
|
18
|
+
automated: false
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: documented-only
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# INT-002 — Keyboard parity for pointer features
|
|
24
|
+
|
|
25
|
+
**Requirement:** Pointer-driven features MUST have a keyboard equivalent when required by WCAG.
|
|
26
|
+
|
|
27
|
+
**Bad:** Context menu mouse-only.
|
|
28
|
+
|
|
29
|
+
**Good:** Keyboard menu button + arrows.
|
|
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: I18N-001
|
|
3
|
+
title: No concatenated sentences
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
priority: P1
|
|
7
|
+
domain: localization
|
|
8
|
+
source:
|
|
9
|
+
- i18n-best-practice
|
|
10
|
+
applies_to:
|
|
11
|
+
- content
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
UI strings MUST NOT be built by concatenating translated fragments in ways that break grammar.
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# I18N-001 — No concatenated sentences
|
|
23
|
+
|
|
24
|
+
**Requirement:** UI strings MUST NOT be built by concatenating translated fragments in ways that break grammar.
|
|
25
|
+
|
|
26
|
+
**Bad:** 'Delete ' + name + ' now' across locales.
|
|
27
|
+
|
|
28
|
+
**Good:** Single message with placeholder: Delete {name}?
|
|
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,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: I18N-002
|
|
3
|
+
title: Text expansion safe layouts
|
|
4
|
+
severity: SHOULD
|
|
5
|
+
status: active
|
|
6
|
+
priority: P2
|
|
7
|
+
domain: localization
|
|
8
|
+
source:
|
|
9
|
+
- Material
|
|
10
|
+
- i18n-best-practice
|
|
11
|
+
applies_to:
|
|
12
|
+
- layout
|
|
13
|
+
- buttons
|
|
14
|
+
success_criteria:
|
|
15
|
+
[]
|
|
16
|
+
requirement: >
|
|
17
|
+
Layouts SHOULD tolerate ~30–40% text expansion without truncation of critical labels.
|
|
18
|
+
validation:
|
|
19
|
+
automated: false
|
|
20
|
+
manual: true
|
|
21
|
+
exceptions: documented-only
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# I18N-002 — Text expansion safe layouts
|
|
25
|
+
|
|
26
|
+
**Requirement:** Layouts SHOULD tolerate ~30–40% text expansion without truncation of critical labels.
|
|
27
|
+
|
|
28
|
+
**Bad:** Fixed-width button cutting German labels.
|
|
29
|
+
|
|
30
|
+
**Good:** Flexible buttons; allow wrap where needed.
|
|
31
|
+
|
|
32
|
+
## Validation
|
|
33
|
+
|
|
34
|
+
- Design or engineering review
|
|
35
|
+
|
|
36
|
+
## Lifecycle
|
|
37
|
+
|
|
38
|
+
- Status: `active`
|
|
39
|
+
- Priority: `P2`
|
|
40
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: I18N-003
|
|
3
|
+
title: RTL readiness for mirrored UI
|
|
4
|
+
severity: SHOULD
|
|
5
|
+
status: active
|
|
6
|
+
priority: P2
|
|
7
|
+
domain: localization
|
|
8
|
+
source:
|
|
9
|
+
- WCAG-2.2
|
|
10
|
+
- Material
|
|
11
|
+
applies_to:
|
|
12
|
+
- layout
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
If RTL locales are in scope, layout MUST mirror logically (start/end, not left/right hardcoding).
|
|
17
|
+
validation:
|
|
18
|
+
automated: false
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: documented-only
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# I18N-003 — RTL readiness for mirrored UI
|
|
24
|
+
|
|
25
|
+
**Requirement:** If RTL locales are in scope, layout MUST mirror logically (start/end, not left/right hardcoding).
|
|
26
|
+
|
|
27
|
+
**Bad:** margin-left everywhere; broken RTL.
|
|
28
|
+
|
|
29
|
+
**Good:** Logical properties / start-end tokens.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
- Design or engineering review
|
|
34
|
+
|
|
35
|
+
## Lifecycle
|
|
36
|
+
|
|
37
|
+
- Status: `active`
|
|
38
|
+
- Priority: `P2`
|
|
39
|
+
- Exceptions: `documented-only`
|