@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,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: MEM-001
|
|
3
|
+
title: Undecided is never coded as a silent truth
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: memory
|
|
7
|
+
priority: P0
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- agent
|
|
12
|
+
- repository
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
When a rule has not been decided, the implementation MUST make its assumption visible and the open question MUST be recorded in `.devia/11_GAPS.md`. Silent defaults MUST NOT become de facto policy.
|
|
17
|
+
validation:
|
|
18
|
+
automated: false
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: none
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# MEM-001 — Undecided is never coded as a silent truth
|
|
24
|
+
|
|
25
|
+
**Requirement:** When a rule has not been decided, the implementation MUST make its assumption visible and the open question MUST be recorded in `.devia/11_GAPS.md`. Silent defaults MUST NOT become de facto policy.
|
|
26
|
+
|
|
27
|
+
**Bad:** The code rounds down, nobody decided that, and in six months it is 'how it works'.
|
|
28
|
+
|
|
29
|
+
**Good:** A named constant, a comment pointing at the gap line, and a gap entry awaiting a decision.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
- The gap registry contains the open question
|
|
34
|
+
- The code's assumption is visible
|
|
35
|
+
|
|
36
|
+
## Lifecycle
|
|
37
|
+
|
|
38
|
+
- Status: `active`
|
|
39
|
+
- Priority: `P0`
|
|
40
|
+
- Exceptions: `none`
|
|
41
|
+
|
|
42
|
+
## See also
|
|
43
|
+
|
|
44
|
+
- [MEMORY.md](../../MEMORY.md)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: MEM-002
|
|
3
|
+
title: Decided but not built is recorded as debt
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: memory
|
|
7
|
+
priority: P1
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- agent
|
|
12
|
+
- repository
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
When the project has decided a rule and the code does not honour it yet, a debt line MUST be added to `.devia/12_DEBT.md` — even when the agent is not going to fix it now.
|
|
17
|
+
validation:
|
|
18
|
+
automated: false
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: documented-only
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# MEM-002 — Decided but not built is recorded as debt
|
|
24
|
+
|
|
25
|
+
**Requirement:** When the project has decided a rule and the code does not honour it yet, a debt line MUST be added to `.devia/12_DEBT.md` — even when the agent is not going to fix it now.
|
|
26
|
+
|
|
27
|
+
**Bad:** Noticing that a validation is missing and moving on because it was not the task.
|
|
28
|
+
|
|
29
|
+
**Good:** A debt line naming the rule, the place, and what it would take.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
- The debt registry gained a line for what was found
|
|
34
|
+
|
|
35
|
+
## Lifecycle
|
|
36
|
+
|
|
37
|
+
- Status: `active`
|
|
38
|
+
- Priority: `P1`
|
|
39
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: MEM-003
|
|
3
|
+
title: Debt lines are closed only by the change that discharges them
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: memory
|
|
7
|
+
priority: P1
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- repository
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
A debt line MUST be removed in the same change that makes it false, and MUST be reduced rather than deleted when the work is partly done. Removing a line for tidiness is forbidden.
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# MEM-003 — Debt lines are closed only by the change that discharges them
|
|
23
|
+
|
|
24
|
+
**Requirement:** A debt line MUST be removed in the same change that makes it false, and MUST be reduced rather than deleted when the work is partly done. Removing a line for tidiness is forbidden.
|
|
25
|
+
|
|
26
|
+
**Bad:** Deleting three debt lines during cleanup because they 'look old'.
|
|
27
|
+
|
|
28
|
+
**Good:** The line for the fixed part is removed; the remainder is rewritten to what is still true.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Every removed debt line is discharged by the same diff
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
- Status: `active`
|
|
37
|
+
- Priority: `P1`
|
|
38
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: MEM-004
|
|
3
|
+
title: Registry identifiers are monotone and never reused
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: memory
|
|
7
|
+
priority: P1
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- repository
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Gap and debt identifiers MUST increase and MUST NOT be reused after closure, so that an old reference never resolves to a different subject.
|
|
16
|
+
validation:
|
|
17
|
+
automated: true
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# MEM-004 — Registry identifiers are monotone and never reused
|
|
23
|
+
|
|
24
|
+
**Requirement:** Gap and debt identifiers MUST increase and MUST NOT be reused after closure, so that an old reference never resolves to a different subject.
|
|
25
|
+
|
|
26
|
+
**Bad:** Reusing `G7` for a new gap after the original was closed.
|
|
27
|
+
|
|
28
|
+
**Good:** The next gap is `G23`; `G7` stays closed and readable in history.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- `devia validate` reports no duplicate or reused id
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
- Status: `active`
|
|
37
|
+
- Priority: `P1`
|
|
38
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: MEM-005
|
|
3
|
+
title: Verify before recording
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: memory
|
|
7
|
+
priority: P1
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- agent
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
A gap, debt or never/always line MUST be checked against the code before it is written. A false line is worse than a missing one because it is trusted.
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# MEM-005 — Verify before recording
|
|
23
|
+
|
|
24
|
+
**Requirement:** A gap, debt or never/always line MUST be checked against the code before it is written. A false line is worse than a missing one because it is trusted.
|
|
25
|
+
|
|
26
|
+
**Bad:** Recording 'no rate limiting anywhere' without opening the middleware that implements it.
|
|
27
|
+
|
|
28
|
+
**Good:** The claim is checked, then recorded with the file that shows it.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Each new registry line names where the claim was verified
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
- Status: `active`
|
|
37
|
+
- Priority: `P1`
|
|
38
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: MEM-006
|
|
3
|
+
title: Sweep the surface you touch
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: memory
|
|
7
|
+
priority: P1
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- repository
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
A change to a shared surface — schema, route family, port, interface, design token — MUST sweep that surface for other violations and record what it finds. Finding nothing is a valid result and MUST be stated.
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# MEM-006 — Sweep the surface you touch
|
|
23
|
+
|
|
24
|
+
**Requirement:** A change to a shared surface — schema, route family, port, interface, design token — MUST sweep that surface for other violations and record what it finds. Finding nothing is a valid result and MUST be stated.
|
|
25
|
+
|
|
26
|
+
**Bad:** Fixing one endpoint's authorization and leaving the four siblings unexamined and unrecorded.
|
|
27
|
+
|
|
28
|
+
**Good:** All five are checked; three are fine; two become debt lines.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- The report states the swept surface and the outcome
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
- Status: `active`
|
|
37
|
+
- Priority: `P1`
|
|
38
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: MEM-007
|
|
3
|
+
title: No perishable facts in overview or index files
|
|
4
|
+
severity: MUST NOT
|
|
5
|
+
status: active
|
|
6
|
+
domain: memory
|
|
7
|
+
priority: P1
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- repository
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Memory files describing what the project is MUST NOT contain counters, current branches, sprint plans or 'next we will' statements. Perishable facts belong to the registries and the tracker.
|
|
16
|
+
validation:
|
|
17
|
+
automated: true
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# MEM-007 — No perishable facts in overview or index files
|
|
23
|
+
|
|
24
|
+
**Requirement:** Memory files describing what the project is MUST NOT contain counters, current branches, sprint plans or 'next we will' statements. Perishable facts belong to the registries and the tracker.
|
|
25
|
+
|
|
26
|
+
**Bad:** '42 tests passing, currently building the invoice screen' in `00_OVERVIEW.md`.
|
|
27
|
+
|
|
28
|
+
**Good:** The overview describes the product and the stack; progress lives in the registries.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- `devia validate` finds no perishable-fact markers
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
- Status: `active`
|
|
37
|
+
- Priority: `P1`
|
|
38
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: MEM-008
|
|
3
|
+
title: Memory points at documentation, it does not duplicate it
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: memory
|
|
7
|
+
priority: P1
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- repository
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Memory files MUST reference the authoritative document or file for detail instead of copying it, so there is exactly one place to change when the detail changes.
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# MEM-008 — Memory points at documentation, it does not duplicate it
|
|
23
|
+
|
|
24
|
+
**Requirement:** Memory files MUST reference the authoritative document or file for detail instead of copying it, so there is exactly one place to change when the detail changes.
|
|
25
|
+
|
|
26
|
+
**Bad:** The full table definition pasted into the memory, drifting from the migration within a week.
|
|
27
|
+
|
|
28
|
+
**Good:** '`invoice` — defined in `migrations/20260812_invoice.sql`, rules in `docs/BILLING.md` §4.'
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- New memory content links rather than copies
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
- Status: `active`
|
|
37
|
+
- Priority: `P1`
|
|
38
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: MEM-009
|
|
3
|
+
title: Code and memory ship in the same change
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: memory
|
|
7
|
+
priority: P0
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- repository
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
When a change makes a memory file false, the same change MUST fix it. `impact-map.yaml` names which files each kind of change touches.
|
|
16
|
+
validation:
|
|
17
|
+
automated: true
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: none
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# MEM-009 — Code and memory ship in the same change
|
|
23
|
+
|
|
24
|
+
**Requirement:** When a change makes a memory file false, the same change MUST fix it. `impact-map.yaml` names which files each kind of change touches.
|
|
25
|
+
|
|
26
|
+
**Bad:** A new endpoint merged on Monday; `02_SURFACES.md` updated 'later'.
|
|
27
|
+
|
|
28
|
+
**Good:** The endpoint and the surfaces entry land in the same pull request.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- `devia doctor` reports no memory lag for the surfaces touched
|
|
33
|
+
- The impact map entry was honoured
|
|
34
|
+
|
|
35
|
+
## Lifecycle
|
|
36
|
+
|
|
37
|
+
- Status: `active`
|
|
38
|
+
- Priority: `P0`
|
|
39
|
+
- Exceptions: `none`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: MEM-010
|
|
3
|
+
title: Never/always lines come from real incidents
|
|
4
|
+
severity: SHOULD
|
|
5
|
+
status: active
|
|
6
|
+
domain: memory
|
|
7
|
+
priority: P2
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- repository
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
`10_NEVER_ALWAYS.md` SHOULD grow one line at a time, each earned by a mistake that actually happened or a decision that was actually contested. Speculative rules dilute the file and train agents to skim.
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# MEM-010 — Never/always lines come from real incidents
|
|
23
|
+
|
|
24
|
+
**Requirement:** `10_NEVER_ALWAYS.md` SHOULD grow one line at a time, each earned by a mistake that actually happened or a decision that was actually contested. Speculative rules dilute the file and train agents to skim.
|
|
25
|
+
|
|
26
|
+
**Bad:** Forty generic best-practice lines copied from a blog post.
|
|
27
|
+
|
|
28
|
+
**Good:** Six lines, each traceable to a bug this project actually shipped.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Each line names the trap and the correct move
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
- Status: `active`
|
|
37
|
+
- Priority: `P2`
|
|
38
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: MEM-011
|
|
3
|
+
title: Never delete a registry line you did not discharge
|
|
4
|
+
severity: MUST NOT
|
|
5
|
+
status: active
|
|
6
|
+
domain: memory
|
|
7
|
+
priority: P0
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- agent
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
An agent MUST NOT remove a gap or debt line to make a report look cleaner, and MUST NOT close a line on the basis that it 'seems handled'. Closure requires naming the change that closed it.
|
|
16
|
+
validation:
|
|
17
|
+
automated: true
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: none
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# MEM-011 — Never delete a registry line you did not discharge
|
|
23
|
+
|
|
24
|
+
**Requirement:** An agent MUST NOT remove a gap or debt line to make a report look cleaner, and MUST NOT close a line on the basis that it 'seems handled'. Closure requires naming the change that closed it.
|
|
25
|
+
|
|
26
|
+
**Bad:** Clearing the debt file during a refactor because it was 'out of date'.
|
|
27
|
+
|
|
28
|
+
**Good:** Each closure names its commit; anything unverified stays open.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Removed lines are justified in the same diff
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
- Status: `active`
|
|
37
|
+
- Priority: `P0`
|
|
38
|
+
- Exceptions: `none`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: MOT-001
|
|
3
|
+
title: Motion has a job
|
|
4
|
+
severity: SHOULD
|
|
5
|
+
status: active
|
|
6
|
+
priority: P2
|
|
7
|
+
domain: motion
|
|
8
|
+
source:
|
|
9
|
+
- Material
|
|
10
|
+
applies_to:
|
|
11
|
+
- motion
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Animation SHOULD communicate state/hierarchy, not only decoration.
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# MOT-001 — Motion has a job
|
|
23
|
+
|
|
24
|
+
**Requirement:** Animation SHOULD communicate state/hierarchy, not only decoration.
|
|
25
|
+
|
|
26
|
+
**Bad:** Infinite bouncing logos.
|
|
27
|
+
|
|
28
|
+
**Good:** Short transition on drawer open.
|
|
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,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: OBS-001
|
|
3
|
+
title: Logs are structured, correlated, and free of secrets
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: observability
|
|
7
|
+
priority: P1
|
|
8
|
+
source:
|
|
9
|
+
- Google SRE
|
|
10
|
+
applies_to:
|
|
11
|
+
- service
|
|
12
|
+
- api
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
Logs MUST be structured, MUST carry a request or trace identifier, and MUST NOT contain credentials, tokens, full payment data or unnecessary personal data.
|
|
17
|
+
validation:
|
|
18
|
+
automated: true
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: documented-only
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# OBS-001 — Logs are structured, correlated, and free of secrets
|
|
24
|
+
|
|
25
|
+
**Requirement:** Logs MUST be structured, MUST carry a request or trace identifier, and MUST NOT contain credentials, tokens, full payment data or unnecessary personal data.
|
|
26
|
+
|
|
27
|
+
**Bad:** `console.log(request.body)` on a payment route.
|
|
28
|
+
|
|
29
|
+
**Good:** A structured entry with the correlation id, the operation, the outcome and safe identifiers.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
- Grep the diff for raw body or header logging
|
|
34
|
+
- Correlation id present on the new paths
|
|
35
|
+
|
|
36
|
+
## Lifecycle
|
|
37
|
+
|
|
38
|
+
- Status: `active`
|
|
39
|
+
- Priority: `P1`
|
|
40
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: OBS-002
|
|
3
|
+
title: Errors reach a system a human watches
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: observability
|
|
7
|
+
priority: P1
|
|
8
|
+
source:
|
|
9
|
+
- Google SRE
|
|
10
|
+
applies_to:
|
|
11
|
+
- service
|
|
12
|
+
- web
|
|
13
|
+
success_criteria:
|
|
14
|
+
[]
|
|
15
|
+
requirement: >
|
|
16
|
+
Unhandled errors and failed background work MUST be reported to an error tracker or alert channel with enough context to reproduce, and MUST NOT be swallowed by an empty catch.
|
|
17
|
+
validation:
|
|
18
|
+
automated: true
|
|
19
|
+
manual: true
|
|
20
|
+
exceptions: documented-only
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# OBS-002 — Errors reach a system a human watches
|
|
24
|
+
|
|
25
|
+
**Requirement:** Unhandled errors and failed background work MUST be reported to an error tracker or alert channel with enough context to reproduce, and MUST NOT be swallowed by an empty catch.
|
|
26
|
+
|
|
27
|
+
**Bad:** `catch (e) {}` and a job that fails silently every night.
|
|
28
|
+
|
|
29
|
+
**Good:** The error is reported with the correlation id and the job name; the failure is visible without asking.
|
|
30
|
+
|
|
31
|
+
## Validation
|
|
32
|
+
|
|
33
|
+
- No empty catch in the diff
|
|
34
|
+
- The new failure path reports somewhere
|
|
35
|
+
|
|
36
|
+
## Lifecycle
|
|
37
|
+
|
|
38
|
+
- Status: `active`
|
|
39
|
+
- Priority: `P1`
|
|
40
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: OBS-003
|
|
3
|
+
title: Alerts are actionable and owned
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: observability
|
|
7
|
+
priority: P1
|
|
8
|
+
source:
|
|
9
|
+
- Google SRE
|
|
10
|
+
applies_to:
|
|
11
|
+
- devops
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
An alert MUST describe a condition a human can act on, name what to do, and have an owner. Alerts nobody acts on MUST be deleted, not muted.
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# OBS-003 — Alerts are actionable and owned
|
|
23
|
+
|
|
24
|
+
**Requirement:** An alert MUST describe a condition a human can act on, name what to do, and have an owner. Alerts nobody acts on MUST be deleted, not muted.
|
|
25
|
+
|
|
26
|
+
**Bad:** A CPU alert that fires nightly and is ignored by everyone.
|
|
27
|
+
|
|
28
|
+
**Good:** An alert on user-visible error rate, linked to a runbook, owned by a person.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Each alert has a runbook link and an owner
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
- Status: `active`
|
|
37
|
+
- Priority: `P1`
|
|
38
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: OBS-004
|
|
3
|
+
title: Deployables expose health and readiness
|
|
4
|
+
severity: SHOULD
|
|
5
|
+
status: active
|
|
6
|
+
domain: observability
|
|
7
|
+
priority: P2
|
|
8
|
+
source:
|
|
9
|
+
- devia
|
|
10
|
+
applies_to:
|
|
11
|
+
- service
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
A deployable service SHOULD expose a liveness signal and a readiness signal that reflects its dependencies, and readiness SHOULD gate traffic during deploys.
|
|
16
|
+
validation:
|
|
17
|
+
automated: true
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# OBS-004 — Deployables expose health and readiness
|
|
23
|
+
|
|
24
|
+
**Requirement:** A deployable service SHOULD expose a liveness signal and a readiness signal that reflects its dependencies, and readiness SHOULD gate traffic during deploys.
|
|
25
|
+
|
|
26
|
+
**Bad:** A health endpoint that returns 200 while the database connection is dead.
|
|
27
|
+
|
|
28
|
+
**Good:** Readiness checks the dependencies it truly needs; liveness stays cheap.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Readiness fails when a required dependency is down
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
- Status: `active`
|
|
37
|
+
- Priority: `P2`
|
|
38
|
+
- Exceptions: `documented-only`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: PRIV-001
|
|
3
|
+
title: Collect the minimum personal data
|
|
4
|
+
severity: MUST
|
|
5
|
+
status: active
|
|
6
|
+
domain: privacy
|
|
7
|
+
priority: P1
|
|
8
|
+
source:
|
|
9
|
+
- GDPR principles
|
|
10
|
+
applies_to:
|
|
11
|
+
- repository
|
|
12
|
+
success_criteria:
|
|
13
|
+
[]
|
|
14
|
+
requirement: >
|
|
15
|
+
Personal data MUST be collected only where a stated product need requires it, and every field MUST have a reason recorded in the data model.
|
|
16
|
+
validation:
|
|
17
|
+
automated: false
|
|
18
|
+
manual: true
|
|
19
|
+
exceptions: documented-only
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# PRIV-001 — Collect the minimum personal data
|
|
23
|
+
|
|
24
|
+
**Requirement:** Personal data MUST be collected only where a stated product need requires it, and every field MUST have a reason recorded in the data model.
|
|
25
|
+
|
|
26
|
+
**Bad:** A national identifier collected 'in case we need it later'.
|
|
27
|
+
|
|
28
|
+
**Good:** Only the fields the flow needs, each with a documented purpose.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
- Every personal field in the diff has a stated purpose
|
|
33
|
+
|
|
34
|
+
## Lifecycle
|
|
35
|
+
|
|
36
|
+
- Status: `active`
|
|
37
|
+
- Priority: `P1`
|
|
38
|
+
- Exceptions: `documented-only`
|