@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,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: ARC-006
|
|
3
|
+
title: Environment-specific values come from configuration
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: architecture
|
|
7
|
+
priority: P1
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- repository
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Hosts, URLs, credentials, feature flags and limits MUST come from configuration, never from literals in application code, and MUST have a documented default for local development.
|
|
16
|
+
validation:
|
|
17
|
+
automated: true
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# ARC-006 — Environment-specific values come from configuration
|
|
23
|
+
|
|
24
|
+
**Requirement:** Hosts, URLs, credentials, feature flags and limits MUST come from configuration, never from literals in application code, and MUST have a documented default for local development.
|
|
25
|
+
|
|
26
|
+
**Bad:** `https://api.staging.example.com` hardcoded in a client module.
|
|
27
|
+
|
|
28
|
+
**Good:** `config.apiBaseUrl`, sourced from the environment, documented in `.env.example`.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Grep the diff for environment hostnames and absolute paths
|
|
33
|
+
- `.env.example` updated
|
|
34
|
+
|
|
35
|
+
## Lifecycle
|
|
36
|
+
|
|
37
|
+
- Status: `active`
|
|
38
|
+
- Priority: `P1`
|
|
39
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: CMP-001
|
|
3
|
+
title: Button hierarchy
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
priority: P1
|
|
7
|
+
domain: components
|
|
8
|
+
source:
|
|
9
|
+
- GOV.UK
|
|
10
|
+
- Carbon
|
|
11
|
+
applies_to:
|
|
12
|
+
- button
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
A view MUST NOT present multiple primary buttons of equal weight for competing actions.
|
|
17
|
+
validation:
|
|
18
|
+
automated: false
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: documented-only
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# CMP-001 — Button hierarchy
|
|
24
|
+
|
|
25
|
+
**Requirement:** A view MUST NOT present multiple primary buttons of equal weight for competing actions.
|
|
26
|
+
|
|
27
|
+
**Bad:** Three filled primary buttons in one toolbar.
|
|
28
|
+
|
|
29
|
+
**Good:** One primary; others secondary/tertiary/ghost.
|
|
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: CMP-002
|
|
3
|
+
title: Disabled action explains enablement
|
|
4
|
+
severity: SHOULD
|
|
5
|
+
status: active
|
|
6
|
+
priority: P2
|
|
7
|
+
domain: components
|
|
8
|
+
source:
|
|
9
|
+
- NN/g
|
|
10
|
+
applies_to:
|
|
11
|
+
- button
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
If a primary action is disabled, the UI SHOULD explain how to enable it.
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# CMP-002 — Disabled action explains enablement
|
|
23
|
+
|
|
24
|
+
**Requirement:** If a primary action is disabled, the UI SHOULD explain how to enable it.
|
|
25
|
+
|
|
26
|
+
**Bad:** Gray Save with no hint.
|
|
27
|
+
|
|
28
|
+
**Good:** Inline hint: ‘Complete required fields to save’.
|
|
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: CMP-003
|
|
3
|
+
title: Data table headers
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
priority: P1
|
|
7
|
+
domain: components
|
|
8
|
+
source:
|
|
9
|
+
- WCAG-2.2
|
|
10
|
+
applies_to:
|
|
11
|
+
- table
|
|
12
|
+
success_criteria:
|
|
13
|
+
- "1.3.1"
|
|
14
|
+
requirement: >
|
|
15
|
+
Data tables MUST use proper header cells associated with data.
|
|
16
|
+
validation:
|
|
17
|
+
automated: true
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# CMP-003 — Data table headers
|
|
23
|
+
|
|
24
|
+
**Requirement:** Data tables MUST use proper header cells associated with data.
|
|
25
|
+
|
|
26
|
+
**Bad:** Bold first row of td only.
|
|
27
|
+
|
|
28
|
+
**Good:** th scope="col" (or row headers when needed).
|
|
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: CMP-004
|
|
3
|
+
title: Row actions usable on small widths
|
|
4
|
+
severity: SHOULD
|
|
5
|
+
status: active
|
|
6
|
+
priority: P2
|
|
7
|
+
domain: components
|
|
8
|
+
source:
|
|
9
|
+
- Carbon
|
|
10
|
+
- Atlassian
|
|
11
|
+
applies_to:
|
|
12
|
+
- table
|
|
13
|
+
- mobile
|
|
14
|
+
success_criteria:
|
|
15
|
+
[]
|
|
16
|
+
requirement: >
|
|
17
|
+
Row actions SHOULD remain usable at common widths (overflow menu or alternative).
|
|
18
|
+
validation:
|
|
19
|
+
automated: false
|
|
20
|
+
manual: true
|
|
21
|
+
exceptions: documented-only
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# CMP-004 — Row actions usable on small widths
|
|
25
|
+
|
|
26
|
+
**Requirement:** Row actions SHOULD remain usable at common widths (overflow menu or alternative).
|
|
27
|
+
|
|
28
|
+
**Bad:** Six icon actions crushed on mobile with no menu.
|
|
29
|
+
|
|
30
|
+
**Good:** Overflow menu or responsive action pattern.
|
|
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: CMP-005
|
|
3
|
+
title: Dialog accessibility pattern
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
priority: P0
|
|
7
|
+
domain: components
|
|
8
|
+
source:
|
|
9
|
+
- WAI-ARIA-APG
|
|
10
|
+
applies_to:
|
|
11
|
+
- dialog
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Modal dialogs MUST: label the dialog, trap focus, close on Escape, restore focus, and inert background content.
|
|
16
|
+
validation:
|
|
17
|
+
automated: true
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# CMP-005 — Dialog accessibility pattern
|
|
23
|
+
|
|
24
|
+
**Requirement:** Modal dialogs MUST: label the dialog, trap focus, close on Escape, restore focus, and inert background content.
|
|
25
|
+
|
|
26
|
+
**Bad:** Div overlay, focus escapes, no Escape.
|
|
27
|
+
|
|
28
|
+
**Good:** APG-compliant dialog component.
|
|
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: `P0`
|
|
39
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: CNT-001
|
|
3
|
+
title: Action-oriented labels
|
|
4
|
+
severity: SHOULD
|
|
5
|
+
status: active
|
|
6
|
+
priority: P2
|
|
7
|
+
domain: content
|
|
8
|
+
source:
|
|
9
|
+
- GOV.UK
|
|
10
|
+
applies_to:
|
|
11
|
+
- button
|
|
12
|
+
- dialogs
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
Buttons SHOULD say the outcome (‘Save changes’), not vague OK/Submit when context is unclear.
|
|
17
|
+
validation:
|
|
18
|
+
automated: false
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: documented-only
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# CNT-001 — Action-oriented labels
|
|
24
|
+
|
|
25
|
+
**Requirement:** Buttons SHOULD say the outcome (‘Save changes’), not vague OK/Submit when context is unclear.
|
|
26
|
+
|
|
27
|
+
**Bad:** Modal: OK / Cancel with ambiguous title.
|
|
28
|
+
|
|
29
|
+
**Good:** Delete customer / Keep customer.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
- Design or engineering review
|
|
34
|
+
|
|
35
|
+
## Lifecycle
|
|
36
|
+
|
|
37
|
+
- Status: `active`
|
|
38
|
+
- Priority: `P2`
|
|
39
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: DATA-001
|
|
3
|
+
title: Currency context explicit
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
priority: P1
|
|
7
|
+
domain: data-display
|
|
8
|
+
source:
|
|
9
|
+
- i18n-best-practice
|
|
10
|
+
applies_to:
|
|
11
|
+
- currency
|
|
12
|
+
- tables
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
Currency values MUST retain explicit currency context (code or symbol+locale-aware formatting).
|
|
17
|
+
validation:
|
|
18
|
+
automated: false
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: documented-only
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# DATA-001 — Currency context explicit
|
|
24
|
+
|
|
25
|
+
**Requirement:** Currency values MUST retain explicit currency context (code or symbol+locale-aware formatting).
|
|
26
|
+
|
|
27
|
+
**Bad:** 1,250.00
|
|
28
|
+
|
|
29
|
+
**Good:** HTG 1,250.00 / USD 1,250.00 (locale-aware).
|
|
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: DATA-002
|
|
3
|
+
title: Dates unambiguous
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
priority: P1
|
|
7
|
+
domain: data-display
|
|
8
|
+
source:
|
|
9
|
+
- i18n-best-practice
|
|
10
|
+
applies_to:
|
|
11
|
+
- dates
|
|
12
|
+
- tables
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
Dates MUST be unambiguous for the audience locale (avoid 03/04/05 without context).
|
|
17
|
+
validation:
|
|
18
|
+
automated: false
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: documented-only
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# DATA-002 — Dates unambiguous
|
|
24
|
+
|
|
25
|
+
**Requirement:** Dates MUST be unambiguous for the audience locale (avoid 03/04/05 without context).
|
|
26
|
+
|
|
27
|
+
**Bad:** 03/04/05 in mixed FR/EN teams.
|
|
28
|
+
|
|
29
|
+
**Good:** 4 Mar 2026 or ISO date in dense tables with legend.
|
|
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,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: DATA-003
|
|
3
|
+
title: Numeric alignment
|
|
4
|
+
severity: SHOULD
|
|
5
|
+
status: active
|
|
6
|
+
priority: P2
|
|
7
|
+
domain: data-display
|
|
8
|
+
source:
|
|
9
|
+
- Carbon
|
|
10
|
+
- Atlassian
|
|
11
|
+
applies_to:
|
|
12
|
+
- tables
|
|
13
|
+
- numbers
|
|
14
|
+
success_criteria:
|
|
15
|
+
[]
|
|
16
|
+
requirement: >
|
|
17
|
+
Columns of comparable numbers SHOULD be right-aligned (or tabular lining) for scanability.
|
|
18
|
+
validation:
|
|
19
|
+
automated: false
|
|
20
|
+
manual: true
|
|
21
|
+
exceptions: documented-only
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# DATA-003 — Numeric alignment
|
|
25
|
+
|
|
26
|
+
**Requirement:** Columns of comparable numbers SHOULD be right-aligned (or tabular lining) for scanability.
|
|
27
|
+
|
|
28
|
+
**Bad:** Left-aligned money column wandering.
|
|
29
|
+
|
|
30
|
+
**Good:** Tabular nums, consistent decimals.
|
|
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,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: DATA-004
|
|
3
|
+
title: Sort and filter feedback
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
priority: P1
|
|
7
|
+
domain: data-display
|
|
8
|
+
source:
|
|
9
|
+
- NN/g
|
|
10
|
+
- Atlassian
|
|
11
|
+
applies_to:
|
|
12
|
+
- tables
|
|
13
|
+
- filtering
|
|
14
|
+
success_criteria:
|
|
15
|
+
[]
|
|
16
|
+
requirement: >
|
|
17
|
+
Active sort/filter MUST be visible; empty filtered results MUST explain how to reset.
|
|
18
|
+
validation:
|
|
19
|
+
automated: false
|
|
20
|
+
manual: true
|
|
21
|
+
exceptions: documented-only
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# DATA-004 — Sort and filter feedback
|
|
25
|
+
|
|
26
|
+
**Requirement:** Active sort/filter MUST be visible; empty filtered results MUST explain how to reset.
|
|
27
|
+
|
|
28
|
+
**Bad:** Invisible filters leaving an empty table.
|
|
29
|
+
|
|
30
|
+
**Good:** Filter chips + Clear filters.
|
|
31
|
+
|
|
32
|
+
## Validation
|
|
33
|
+
|
|
34
|
+
- Design or engineering review
|
|
35
|
+
|
|
36
|
+
## Lifecycle
|
|
37
|
+
|
|
38
|
+
- Status: `active`
|
|
39
|
+
- Priority: `P1`
|
|
40
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: DB-001
|
|
3
|
+
title: Every schema change is a versioned migration
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: database
|
|
7
|
+
priority: P0
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- database
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Schema changes MUST ship as ordered, committed migration files that run in CI and in every environment. Schema MUST NOT be changed by hand in any environment, least of all production.
|
|
16
|
+
validation:
|
|
17
|
+
automated: true
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: none
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# DB-001 — Every schema change is a versioned migration
|
|
23
|
+
|
|
24
|
+
**Requirement:** Schema changes MUST ship as ordered, committed migration files that run in CI and in every environment. Schema MUST NOT be changed by hand in any environment, least of all production.
|
|
25
|
+
|
|
26
|
+
**Bad:** A column added through a database console; the next deploy fails on a machine nobody touched.
|
|
27
|
+
|
|
28
|
+
**Good:** `migrations/20260903_add_invoice_currency.sql`, applied by the deploy pipeline.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Migration file present in the diff
|
|
33
|
+
- Migration runs on a clean database in CI
|
|
34
|
+
|
|
35
|
+
## Lifecycle
|
|
36
|
+
|
|
37
|
+
- Status: `active`
|
|
38
|
+
- Priority: `P0`
|
|
39
|
+
- Exceptions: `none`
|
|
40
|
+
|
|
41
|
+
## See also
|
|
42
|
+
|
|
43
|
+
- [MIGRATIONS.md](../../standard/engineering/database/MIGRATIONS.md)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: DB-002
|
|
3
|
+
title: Applied migrations are immutable
|
|
4
|
+
severity: MUST NOT
|
|
5
|
+
status: active
|
|
6
|
+
domain: database
|
|
7
|
+
priority: P0
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- database
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
A migration that has run in any shared environment MUST NOT be edited. Corrections ship as a new migration.
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: none
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# DB-002 — Applied migrations are immutable
|
|
23
|
+
|
|
24
|
+
**Requirement:** A migration that has run in any shared environment MUST NOT be edited. Corrections ship as a new migration.
|
|
25
|
+
|
|
26
|
+
**Bad:** Editing yesterday's migration so it 'works now' — silently diverging every environment that already ran it.
|
|
27
|
+
|
|
28
|
+
**Good:** A new corrective migration that brings every environment to the same state.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Confirm no already-applied migration file is modified in the diff
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
- Status: `active`
|
|
37
|
+
- Priority: `P0`
|
|
38
|
+
- Exceptions: `none`
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: DB-003
|
|
3
|
+
title: Money is exact and carries its currency
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: database
|
|
7
|
+
priority: P0
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- database
|
|
12
|
+
- service
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
Monetary amounts MUST use an exact type (decimal or minor-unit integer), never a float, and MUST be stored with an explicit currency. Rounding MUST happen at a single documented point.
|
|
17
|
+
validation:
|
|
18
|
+
automated: true
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: none
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# DB-003 — Money is exact and carries its currency
|
|
24
|
+
|
|
25
|
+
**Requirement:** Monetary amounts MUST use an exact type (decimal or minor-unit integer), never a float, and MUST be stored with an explicit currency. Rounding MUST happen at a single documented point.
|
|
26
|
+
|
|
27
|
+
**Bad:** `price REAL` and a currency inferred from the user's locale at render time.
|
|
28
|
+
|
|
29
|
+
**Good:** `amount numeric(14,2)` plus `currency char(3)`, rounded once in the pricing service.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
- Grep the migration for float or double on money columns
|
|
34
|
+
- Confirm currency is stored, not inferred
|
|
35
|
+
|
|
36
|
+
## Lifecycle
|
|
37
|
+
|
|
38
|
+
- Status: `active`
|
|
39
|
+
- Priority: `P0`
|
|
40
|
+
- Exceptions: `none`
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: DB-004
|
|
3
|
+
title: Backups exist and restore has been rehearsed
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: database
|
|
7
|
+
priority: P0
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- database
|
|
12
|
+
- devops
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
Production data MUST be backed up on a defined schedule, and the restore MUST have been performed at least once, with the date and the result recorded. An untested backup is not a backup.
|
|
17
|
+
validation:
|
|
18
|
+
automated: false
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: none
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# DB-004 — Backups exist and restore has been rehearsed
|
|
24
|
+
|
|
25
|
+
**Requirement:** Production data MUST be backed up on a defined schedule, and the restore MUST have been performed at least once, with the date and the result recorded. An untested backup is not a backup.
|
|
26
|
+
|
|
27
|
+
**Bad:** Nightly snapshots nobody has ever restored.
|
|
28
|
+
|
|
29
|
+
**Good:** Snapshots plus a rehearsed restore into a scratch environment, recorded with the elapsed time.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
- Backup schedule documented
|
|
34
|
+
- Restore drill recorded with a date
|
|
35
|
+
|
|
36
|
+
## Lifecycle
|
|
37
|
+
|
|
38
|
+
- Status: `active`
|
|
39
|
+
- Priority: `P0`
|
|
40
|
+
- Exceptions: `none`
|
|
41
|
+
|
|
42
|
+
## See also
|
|
43
|
+
|
|
44
|
+
- [disaster-recovery.md](../../checklists/engineering/disaster-recovery.md)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: DB-005
|
|
3
|
+
title: Destructive operations are recoverable where the domain requires it
|
|
4
|
+
severity: SHOULD
|
|
5
|
+
status: active
|
|
6
|
+
domain: database
|
|
7
|
+
priority: P2
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- database
|
|
12
|
+
- service
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
Records that carry history, money or accountability SHOULD be archived or soft-deleted rather than hard-deleted, and the choice SHOULD be recorded in the data model.
|
|
17
|
+
validation:
|
|
18
|
+
automated: false
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: documented-only
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# DB-005 — Destructive operations are recoverable where the domain requires it
|
|
24
|
+
|
|
25
|
+
**Requirement:** Records that carry history, money or accountability SHOULD be archived or soft-deleted rather than hard-deleted, and the choice SHOULD be recorded in the data model.
|
|
26
|
+
|
|
27
|
+
**Bad:** `DELETE FROM users` on account closure, taking the audit trail with it.
|
|
28
|
+
|
|
29
|
+
**Good:** `archived_at` plus a retention job that removes personal data on schedule.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
- The data model states the deletion strategy per entity
|
|
34
|
+
|
|
35
|
+
## Lifecycle
|
|
36
|
+
|
|
37
|
+
- Status: `active`
|
|
38
|
+
- Priority: `P2`
|
|
39
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: DB-006
|
|
3
|
+
title: Queries the application actually runs are indexed
|
|
4
|
+
severity: SHOULD
|
|
5
|
+
status: active
|
|
6
|
+
domain: database
|
|
7
|
+
priority: P2
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- database
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Filter, join and sort columns used by real queries SHOULD be indexed, and an index SHOULD be justified by a query rather than added speculatively.
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# DB-006 — Queries the application actually runs are indexed
|
|
23
|
+
|
|
24
|
+
**Requirement:** Filter, join and sort columns used by real queries SHOULD be indexed, and an index SHOULD be justified by a query rather than added speculatively.
|
|
25
|
+
|
|
26
|
+
**Bad:** A list endpoint scanning a million rows on every request.
|
|
27
|
+
|
|
28
|
+
**Good:** An index on the actual predicate, verified with an execution plan before and after.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Execution plan for the new or changed query
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
- Status: `active`
|
|
37
|
+
- Priority: `P2`
|
|
38
|
+
- Exceptions: `documented-only`
|