@wazir-dev/cli 1.0.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 +111 -0
- package/CHANGELOG.md +14 -0
- package/CONTRIBUTING.md +101 -0
- package/LICENSE +21 -0
- package/README.md +314 -0
- package/assets/composition-engine.mmd +34 -0
- package/assets/demo-script.sh +17 -0
- package/assets/logo-dark.svg +14 -0
- package/assets/logo.svg +14 -0
- package/assets/pipeline.mmd +39 -0
- package/assets/record-demo.sh +51 -0
- package/docs/README.md +51 -0
- package/docs/adapters/context-mode.md +60 -0
- package/docs/concepts/architecture.md +87 -0
- package/docs/concepts/artifact-model.md +60 -0
- package/docs/concepts/composition-engine.md +36 -0
- package/docs/concepts/indexing-and-recall.md +160 -0
- package/docs/concepts/observability.md +41 -0
- package/docs/concepts/roles-and-workflows.md +59 -0
- package/docs/concepts/terminology-policy.md +27 -0
- package/docs/getting-started/01-installation.md +78 -0
- package/docs/getting-started/02-first-run.md +102 -0
- package/docs/getting-started/03-adding-to-project.md +15 -0
- package/docs/getting-started/04-host-setup.md +15 -0
- package/docs/guides/ci-integration.md +15 -0
- package/docs/guides/creating-skills.md +15 -0
- package/docs/guides/expertise-module-authoring.md +15 -0
- package/docs/guides/hook-development.md +15 -0
- package/docs/guides/memory-and-learnings.md +34 -0
- package/docs/guides/multi-host-export.md +15 -0
- package/docs/guides/troubleshooting.md +101 -0
- package/docs/guides/writing-custom-roles.md +15 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
- package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
- package/docs/readmes/INDEX.md +99 -0
- package/docs/readmes/features/expertise/README.md +171 -0
- package/docs/readmes/features/exports/README.md +222 -0
- package/docs/readmes/features/hooks/README.md +103 -0
- package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
- package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
- package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
- package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
- package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
- package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
- package/docs/readmes/features/hooks/session-start.md +119 -0
- package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
- package/docs/readmes/features/roles/README.md +157 -0
- package/docs/readmes/features/roles/clarifier.md +152 -0
- package/docs/readmes/features/roles/content-author.md +190 -0
- package/docs/readmes/features/roles/designer.md +193 -0
- package/docs/readmes/features/roles/executor.md +184 -0
- package/docs/readmes/features/roles/learner.md +210 -0
- package/docs/readmes/features/roles/planner.md +182 -0
- package/docs/readmes/features/roles/researcher.md +164 -0
- package/docs/readmes/features/roles/reviewer.md +184 -0
- package/docs/readmes/features/roles/specifier.md +162 -0
- package/docs/readmes/features/roles/verifier.md +215 -0
- package/docs/readmes/features/schemas/README.md +178 -0
- package/docs/readmes/features/skills/README.md +63 -0
- package/docs/readmes/features/skills/brainstorming.md +96 -0
- package/docs/readmes/features/skills/debugging.md +148 -0
- package/docs/readmes/features/skills/design.md +120 -0
- package/docs/readmes/features/skills/prepare-next.md +109 -0
- package/docs/readmes/features/skills/run-audit.md +159 -0
- package/docs/readmes/features/skills/scan-project.md +109 -0
- package/docs/readmes/features/skills/self-audit.md +176 -0
- package/docs/readmes/features/skills/tdd.md +137 -0
- package/docs/readmes/features/skills/using-skills.md +92 -0
- package/docs/readmes/features/skills/verification.md +120 -0
- package/docs/readmes/features/skills/writing-plans.md +104 -0
- package/docs/readmes/features/tooling/README.md +320 -0
- package/docs/readmes/features/workflows/README.md +186 -0
- package/docs/readmes/features/workflows/author.md +181 -0
- package/docs/readmes/features/workflows/clarify.md +154 -0
- package/docs/readmes/features/workflows/design-review.md +171 -0
- package/docs/readmes/features/workflows/design.md +169 -0
- package/docs/readmes/features/workflows/discover.md +162 -0
- package/docs/readmes/features/workflows/execute.md +173 -0
- package/docs/readmes/features/workflows/learn.md +167 -0
- package/docs/readmes/features/workflows/plan-review.md +165 -0
- package/docs/readmes/features/workflows/plan.md +170 -0
- package/docs/readmes/features/workflows/prepare-next.md +167 -0
- package/docs/readmes/features/workflows/review.md +169 -0
- package/docs/readmes/features/workflows/run-audit.md +191 -0
- package/docs/readmes/features/workflows/spec-challenge.md +159 -0
- package/docs/readmes/features/workflows/specify.md +160 -0
- package/docs/readmes/features/workflows/verify.md +177 -0
- package/docs/readmes/packages/README.md +50 -0
- package/docs/readmes/packages/ajv.md +117 -0
- package/docs/readmes/packages/context-mode.md +118 -0
- package/docs/readmes/packages/gray-matter.md +116 -0
- package/docs/readmes/packages/node-test.md +137 -0
- package/docs/readmes/packages/yaml.md +112 -0
- package/docs/reference/configuration-reference.md +159 -0
- package/docs/reference/expertise-index.md +52 -0
- package/docs/reference/git-flow.md +43 -0
- package/docs/reference/hooks.md +87 -0
- package/docs/reference/host-exports.md +50 -0
- package/docs/reference/launch-checklist.md +172 -0
- package/docs/reference/marketplace-listings.md +76 -0
- package/docs/reference/release-process.md +34 -0
- package/docs/reference/roles-reference.md +77 -0
- package/docs/reference/skills.md +33 -0
- package/docs/reference/templates.md +29 -0
- package/docs/reference/tooling-cli.md +94 -0
- package/docs/truth-claims.yaml +222 -0
- package/expertise/PROGRESS.md +63 -0
- package/expertise/README.md +18 -0
- package/expertise/antipatterns/PROGRESS.md +56 -0
- package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
- package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
- package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
- package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
- package/expertise/antipatterns/backend/index.md +24 -0
- package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
- package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
- package/expertise/antipatterns/code/async-antipatterns.md +622 -0
- package/expertise/antipatterns/code/code-smells.md +1186 -0
- package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
- package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
- package/expertise/antipatterns/code/index.md +27 -0
- package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
- package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
- package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
- package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
- package/expertise/antipatterns/design/dark-patterns.md +1121 -0
- package/expertise/antipatterns/design/index.md +22 -0
- package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
- package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
- package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
- package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
- package/expertise/antipatterns/frontend/index.md +23 -0
- package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
- package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
- package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
- package/expertise/antipatterns/index.md +31 -0
- package/expertise/antipatterns/performance/index.md +20 -0
- package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
- package/expertise/antipatterns/performance/premature-optimization.md +623 -0
- package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
- package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
- package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
- package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
- package/expertise/antipatterns/process/index.md +23 -0
- package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
- package/expertise/antipatterns/security/index.md +20 -0
- package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
- package/expertise/antipatterns/security/security-theater.md +843 -0
- package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
- package/expertise/architecture/PROGRESS.md +70 -0
- package/expertise/architecture/data/caching-architecture.md +671 -0
- package/expertise/architecture/data/data-consistency.md +574 -0
- package/expertise/architecture/data/data-modeling.md +536 -0
- package/expertise/architecture/data/event-streams-and-queues.md +634 -0
- package/expertise/architecture/data/index.md +25 -0
- package/expertise/architecture/data/search-architecture.md +663 -0
- package/expertise/architecture/data/sql-vs-nosql.md +708 -0
- package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
- package/expertise/architecture/decisions/build-vs-buy.md +616 -0
- package/expertise/architecture/decisions/index.md +23 -0
- package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
- package/expertise/architecture/decisions/technology-selection.md +616 -0
- package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
- package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
- package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
- package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
- package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
- package/expertise/architecture/distributed/index.md +25 -0
- package/expertise/architecture/distributed/saga-pattern.md +797 -0
- package/expertise/architecture/foundations/architectural-thinking.md +460 -0
- package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
- package/expertise/architecture/foundations/design-principles-solid.md +649 -0
- package/expertise/architecture/foundations/domain-driven-design.md +719 -0
- package/expertise/architecture/foundations/index.md +25 -0
- package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
- package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
- package/expertise/architecture/index.md +34 -0
- package/expertise/architecture/integration/api-design-graphql.md +638 -0
- package/expertise/architecture/integration/api-design-grpc.md +804 -0
- package/expertise/architecture/integration/api-design-rest.md +892 -0
- package/expertise/architecture/integration/index.md +25 -0
- package/expertise/architecture/integration/third-party-integration.md +795 -0
- package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
- package/expertise/architecture/integration/websockets-realtime.md +791 -0
- package/expertise/architecture/mobile-architecture/index.md +22 -0
- package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
- package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
- package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
- package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
- package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
- package/expertise/architecture/patterns/event-driven.md +797 -0
- package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
- package/expertise/architecture/patterns/index.md +27 -0
- package/expertise/architecture/patterns/layered-architecture.md +736 -0
- package/expertise/architecture/patterns/microservices.md +753 -0
- package/expertise/architecture/patterns/modular-monolith.md +692 -0
- package/expertise/architecture/patterns/monolith.md +626 -0
- package/expertise/architecture/patterns/plugin-architecture.md +735 -0
- package/expertise/architecture/patterns/serverless.md +780 -0
- package/expertise/architecture/scaling/database-scaling.md +615 -0
- package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
- package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
- package/expertise/architecture/scaling/index.md +24 -0
- package/expertise/architecture/scaling/multi-tenancy.md +800 -0
- package/expertise/architecture/scaling/stateless-design.md +787 -0
- package/expertise/backend/embedded-firmware.md +625 -0
- package/expertise/backend/go.md +853 -0
- package/expertise/backend/index.md +24 -0
- package/expertise/backend/java-spring.md +448 -0
- package/expertise/backend/node-typescript.md +625 -0
- package/expertise/backend/python-fastapi.md +724 -0
- package/expertise/backend/rust.md +458 -0
- package/expertise/backend/solidity.md +711 -0
- package/expertise/composition-map.yaml +443 -0
- package/expertise/content/foundations/content-modeling.md +395 -0
- package/expertise/content/foundations/editorial-standards.md +449 -0
- package/expertise/content/foundations/index.md +24 -0
- package/expertise/content/foundations/microcopy.md +455 -0
- package/expertise/content/foundations/terminology-governance.md +509 -0
- package/expertise/content/index.md +34 -0
- package/expertise/content/patterns/accessibility-copy.md +518 -0
- package/expertise/content/patterns/index.md +24 -0
- package/expertise/content/patterns/notification-content.md +433 -0
- package/expertise/content/patterns/sample-content.md +486 -0
- package/expertise/content/patterns/state-copy.md +439 -0
- package/expertise/design/PROGRESS.md +58 -0
- package/expertise/design/disciplines/dark-mode-theming.md +577 -0
- package/expertise/design/disciplines/design-systems.md +595 -0
- package/expertise/design/disciplines/index.md +25 -0
- package/expertise/design/disciplines/information-architecture.md +800 -0
- package/expertise/design/disciplines/interaction-design.md +788 -0
- package/expertise/design/disciplines/responsive-design.md +552 -0
- package/expertise/design/disciplines/usability-testing.md +516 -0
- package/expertise/design/disciplines/user-research.md +792 -0
- package/expertise/design/foundations/accessibility-design.md +796 -0
- package/expertise/design/foundations/color-theory.md +797 -0
- package/expertise/design/foundations/iconography.md +795 -0
- package/expertise/design/foundations/index.md +26 -0
- package/expertise/design/foundations/motion-and-animation.md +653 -0
- package/expertise/design/foundations/rtl-design.md +585 -0
- package/expertise/design/foundations/spacing-and-layout.md +607 -0
- package/expertise/design/foundations/typography.md +800 -0
- package/expertise/design/foundations/visual-hierarchy.md +761 -0
- package/expertise/design/index.md +32 -0
- package/expertise/design/patterns/authentication-flows.md +474 -0
- package/expertise/design/patterns/content-consumption.md +789 -0
- package/expertise/design/patterns/data-display.md +618 -0
- package/expertise/design/patterns/e-commerce.md +1494 -0
- package/expertise/design/patterns/feedback-and-states.md +642 -0
- package/expertise/design/patterns/forms-and-input.md +819 -0
- package/expertise/design/patterns/gamification.md +801 -0
- package/expertise/design/patterns/index.md +31 -0
- package/expertise/design/patterns/microinteractions.md +449 -0
- package/expertise/design/patterns/navigation.md +800 -0
- package/expertise/design/patterns/notifications.md +705 -0
- package/expertise/design/patterns/onboarding.md +700 -0
- package/expertise/design/patterns/search-and-filter.md +601 -0
- package/expertise/design/patterns/settings-and-preferences.md +768 -0
- package/expertise/design/patterns/social-and-community.md +748 -0
- package/expertise/design/platforms/desktop-native.md +612 -0
- package/expertise/design/platforms/index.md +25 -0
- package/expertise/design/platforms/mobile-android.md +825 -0
- package/expertise/design/platforms/mobile-cross-platform.md +983 -0
- package/expertise/design/platforms/mobile-ios.md +699 -0
- package/expertise/design/platforms/tablet.md +794 -0
- package/expertise/design/platforms/web-dashboard.md +790 -0
- package/expertise/design/platforms/web-responsive.md +550 -0
- package/expertise/design/psychology/behavioral-nudges.md +449 -0
- package/expertise/design/psychology/cognitive-load.md +1191 -0
- package/expertise/design/psychology/error-psychology.md +778 -0
- package/expertise/design/psychology/index.md +22 -0
- package/expertise/design/psychology/persuasive-design.md +736 -0
- package/expertise/design/psychology/user-mental-models.md +623 -0
- package/expertise/design/tooling/open-pencil.md +266 -0
- package/expertise/frontend/angular.md +1073 -0
- package/expertise/frontend/desktop-electron.md +546 -0
- package/expertise/frontend/flutter.md +782 -0
- package/expertise/frontend/index.md +27 -0
- package/expertise/frontend/native-android.md +409 -0
- package/expertise/frontend/native-ios.md +490 -0
- package/expertise/frontend/react-native.md +1160 -0
- package/expertise/frontend/react.md +808 -0
- package/expertise/frontend/vue.md +1089 -0
- package/expertise/humanize/domain-rules-code.md +79 -0
- package/expertise/humanize/domain-rules-content.md +67 -0
- package/expertise/humanize/domain-rules-technical-docs.md +56 -0
- package/expertise/humanize/index.md +35 -0
- package/expertise/humanize/self-audit-checklist.md +87 -0
- package/expertise/humanize/sentence-patterns.md +218 -0
- package/expertise/humanize/vocabulary-blacklist.md +105 -0
- package/expertise/i18n/PROGRESS.md +65 -0
- package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
- package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
- package/expertise/i18n/advanced/complex-scripts.md +30 -0
- package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
- package/expertise/i18n/advanced/testing-i18n.md +28 -0
- package/expertise/i18n/content/content-adaptation.md +23 -0
- package/expertise/i18n/content/locale-specific-formatting.md +23 -0
- package/expertise/i18n/content/machine-translation-integration.md +28 -0
- package/expertise/i18n/content/translation-management.md +29 -0
- package/expertise/i18n/foundations/date-time-calendars.md +67 -0
- package/expertise/i18n/foundations/i18n-architecture.md +272 -0
- package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
- package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
- package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
- package/expertise/i18n/foundations/string-externalization.md +236 -0
- package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
- package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
- package/expertise/i18n/index.md +38 -0
- package/expertise/i18n/platform/backend-i18n.md +31 -0
- package/expertise/i18n/platform/flutter-i18n.md +148 -0
- package/expertise/i18n/platform/native-android-i18n.md +36 -0
- package/expertise/i18n/platform/native-ios-i18n.md +36 -0
- package/expertise/i18n/platform/react-i18n.md +103 -0
- package/expertise/i18n/platform/web-css-i18n.md +81 -0
- package/expertise/i18n/rtl/arabic-specific.md +175 -0
- package/expertise/i18n/rtl/hebrew-specific.md +149 -0
- package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
- package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
- package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
- package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
- package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
- package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
- package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
- package/expertise/i18n/rtl/rtl-typography.md +160 -0
- package/expertise/index.md +113 -0
- package/expertise/index.yaml +216 -0
- package/expertise/infrastructure/cloud-aws.md +597 -0
- package/expertise/infrastructure/cloud-gcp.md +599 -0
- package/expertise/infrastructure/cybersecurity.md +816 -0
- package/expertise/infrastructure/database-mongodb.md +447 -0
- package/expertise/infrastructure/database-postgres.md +400 -0
- package/expertise/infrastructure/devops-cicd.md +787 -0
- package/expertise/infrastructure/index.md +27 -0
- package/expertise/performance/PROGRESS.md +50 -0
- package/expertise/performance/backend/api-latency.md +1204 -0
- package/expertise/performance/backend/background-jobs.md +506 -0
- package/expertise/performance/backend/connection-pooling.md +1209 -0
- package/expertise/performance/backend/database-query-optimization.md +515 -0
- package/expertise/performance/backend/index.md +23 -0
- package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
- package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
- package/expertise/performance/foundations/caching-strategies.md +489 -0
- package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
- package/expertise/performance/foundations/index.md +24 -0
- package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
- package/expertise/performance/foundations/memory-management.md +964 -0
- package/expertise/performance/foundations/performance-budgets.md +1314 -0
- package/expertise/performance/index.md +31 -0
- package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
- package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
- package/expertise/performance/infrastructure/index.md +22 -0
- package/expertise/performance/infrastructure/load-balancing.md +1081 -0
- package/expertise/performance/infrastructure/observability.md +1079 -0
- package/expertise/performance/mobile/index.md +23 -0
- package/expertise/performance/mobile/mobile-animations.md +544 -0
- package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
- package/expertise/performance/mobile/mobile-network.md +452 -0
- package/expertise/performance/mobile/mobile-rendering.md +599 -0
- package/expertise/performance/mobile/mobile-startup-time.md +505 -0
- package/expertise/performance/platform-specific/flutter-performance.md +647 -0
- package/expertise/performance/platform-specific/index.md +22 -0
- package/expertise/performance/platform-specific/node-performance.md +1307 -0
- package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
- package/expertise/performance/platform-specific/react-performance.md +1403 -0
- package/expertise/performance/web/bundle-optimization.md +1239 -0
- package/expertise/performance/web/image-and-media.md +636 -0
- package/expertise/performance/web/index.md +24 -0
- package/expertise/performance/web/network-optimization.md +1133 -0
- package/expertise/performance/web/rendering-performance.md +1098 -0
- package/expertise/performance/web/ssr-and-hydration.md +918 -0
- package/expertise/performance/web/web-vitals.md +1374 -0
- package/expertise/quality/accessibility.md +985 -0
- package/expertise/quality/evidence-based-verification.md +499 -0
- package/expertise/quality/index.md +24 -0
- package/expertise/quality/ml-model-audit.md +614 -0
- package/expertise/quality/performance.md +600 -0
- package/expertise/quality/testing-api.md +891 -0
- package/expertise/quality/testing-mobile.md +496 -0
- package/expertise/quality/testing-web.md +849 -0
- package/expertise/security/PROGRESS.md +54 -0
- package/expertise/security/agentic-identity.md +540 -0
- package/expertise/security/compliance-frameworks.md +601 -0
- package/expertise/security/data/data-encryption.md +364 -0
- package/expertise/security/data/data-privacy-gdpr.md +692 -0
- package/expertise/security/data/database-security.md +1171 -0
- package/expertise/security/data/index.md +22 -0
- package/expertise/security/data/pii-handling.md +531 -0
- package/expertise/security/foundations/authentication.md +1041 -0
- package/expertise/security/foundations/authorization.md +603 -0
- package/expertise/security/foundations/cryptography.md +1001 -0
- package/expertise/security/foundations/index.md +25 -0
- package/expertise/security/foundations/owasp-top-10.md +1354 -0
- package/expertise/security/foundations/secrets-management.md +1217 -0
- package/expertise/security/foundations/secure-sdlc.md +700 -0
- package/expertise/security/foundations/supply-chain-security.md +698 -0
- package/expertise/security/index.md +31 -0
- package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
- package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
- package/expertise/security/infrastructure/container-security.md +721 -0
- package/expertise/security/infrastructure/incident-response.md +1295 -0
- package/expertise/security/infrastructure/index.md +24 -0
- package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
- package/expertise/security/infrastructure/network-security.md +1337 -0
- package/expertise/security/mobile/index.md +23 -0
- package/expertise/security/mobile/mobile-android-security.md +1218 -0
- package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
- package/expertise/security/mobile/mobile-data-storage.md +1265 -0
- package/expertise/security/mobile/mobile-ios-security.md +1401 -0
- package/expertise/security/mobile/mobile-network-security.md +1520 -0
- package/expertise/security/smart-contract-security.md +594 -0
- package/expertise/security/testing/index.md +22 -0
- package/expertise/security/testing/penetration-testing.md +1258 -0
- package/expertise/security/testing/security-code-review.md +1765 -0
- package/expertise/security/testing/threat-modeling.md +1074 -0
- package/expertise/security/testing/vulnerability-scanning.md +1062 -0
- package/expertise/security/web/api-security.md +586 -0
- package/expertise/security/web/cors-and-headers.md +433 -0
- package/expertise/security/web/csrf.md +562 -0
- package/expertise/security/web/file-upload.md +1477 -0
- package/expertise/security/web/index.md +25 -0
- package/expertise/security/web/injection.md +1375 -0
- package/expertise/security/web/session-management.md +1101 -0
- package/expertise/security/web/xss.md +1158 -0
- package/exports/README.md +17 -0
- package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
- package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
- package/exports/hosts/claude/.claude/agents/designer.md +55 -0
- package/exports/hosts/claude/.claude/agents/executor.md +55 -0
- package/exports/hosts/claude/.claude/agents/learner.md +51 -0
- package/exports/hosts/claude/.claude/agents/planner.md +53 -0
- package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
- package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
- package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
- package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
- package/exports/hosts/claude/.claude/commands/author.md +42 -0
- package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
- package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
- package/exports/hosts/claude/.claude/commands/design.md +44 -0
- package/exports/hosts/claude/.claude/commands/discover.md +37 -0
- package/exports/hosts/claude/.claude/commands/execute.md +48 -0
- package/exports/hosts/claude/.claude/commands/learn.md +38 -0
- package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
- package/exports/hosts/claude/.claude/commands/plan.md +39 -0
- package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
- package/exports/hosts/claude/.claude/commands/review.md +40 -0
- package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
- package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
- package/exports/hosts/claude/.claude/commands/specify.md +38 -0
- package/exports/hosts/claude/.claude/commands/verify.md +37 -0
- package/exports/hosts/claude/.claude/settings.json +34 -0
- package/exports/hosts/claude/CLAUDE.md +19 -0
- package/exports/hosts/claude/export.manifest.json +38 -0
- package/exports/hosts/claude/host-package.json +67 -0
- package/exports/hosts/codex/AGENTS.md +19 -0
- package/exports/hosts/codex/export.manifest.json +38 -0
- package/exports/hosts/codex/host-package.json +41 -0
- package/exports/hosts/cursor/.cursor/hooks.json +16 -0
- package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
- package/exports/hosts/cursor/export.manifest.json +38 -0
- package/exports/hosts/cursor/host-package.json +42 -0
- package/exports/hosts/gemini/GEMINI.md +19 -0
- package/exports/hosts/gemini/export.manifest.json +38 -0
- package/exports/hosts/gemini/host-package.json +41 -0
- package/hooks/README.md +18 -0
- package/hooks/definitions/loop_cap_guard.yaml +21 -0
- package/hooks/definitions/post_tool_capture.yaml +24 -0
- package/hooks/definitions/pre_compact_summary.yaml +19 -0
- package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
- package/hooks/definitions/protected_path_write_guard.yaml +19 -0
- package/hooks/definitions/session_start.yaml +19 -0
- package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
- package/hooks/loop-cap-guard +17 -0
- package/hooks/post-tool-lint +36 -0
- package/hooks/protected-path-write-guard +17 -0
- package/hooks/session-start +41 -0
- package/llms-full.txt +2355 -0
- package/llms.txt +43 -0
- package/package.json +79 -0
- package/roles/README.md +20 -0
- package/roles/clarifier.md +42 -0
- package/roles/content-author.md +63 -0
- package/roles/designer.md +55 -0
- package/roles/executor.md +55 -0
- package/roles/learner.md +51 -0
- package/roles/planner.md +53 -0
- package/roles/researcher.md +43 -0
- package/roles/reviewer.md +54 -0
- package/roles/specifier.md +47 -0
- package/roles/verifier.md +71 -0
- package/schemas/README.md +24 -0
- package/schemas/accepted-learning.schema.json +20 -0
- package/schemas/author-artifact.schema.json +156 -0
- package/schemas/clarification.schema.json +19 -0
- package/schemas/design-artifact.schema.json +80 -0
- package/schemas/docs-claim.schema.json +18 -0
- package/schemas/export-manifest.schema.json +20 -0
- package/schemas/hook.schema.json +67 -0
- package/schemas/host-export-package.schema.json +18 -0
- package/schemas/implementation-plan.schema.json +19 -0
- package/schemas/proposed-learning.schema.json +19 -0
- package/schemas/research.schema.json +18 -0
- package/schemas/review.schema.json +29 -0
- package/schemas/run-manifest.schema.json +18 -0
- package/schemas/spec-challenge.schema.json +18 -0
- package/schemas/spec.schema.json +20 -0
- package/schemas/usage.schema.json +102 -0
- package/schemas/verification-proof.schema.json +29 -0
- package/schemas/wazir-manifest.schema.json +173 -0
- package/skills/README.md +40 -0
- package/skills/brainstorming/SKILL.md +77 -0
- package/skills/debugging/SKILL.md +50 -0
- package/skills/design/SKILL.md +61 -0
- package/skills/dispatching-parallel-agents/SKILL.md +128 -0
- package/skills/executing-plans/SKILL.md +70 -0
- package/skills/finishing-a-development-branch/SKILL.md +169 -0
- package/skills/humanize/SKILL.md +123 -0
- package/skills/init-pipeline/SKILL.md +124 -0
- package/skills/prepare-next/SKILL.md +20 -0
- package/skills/receiving-code-review/SKILL.md +123 -0
- package/skills/requesting-code-review/SKILL.md +105 -0
- package/skills/requesting-code-review/code-reviewer.md +108 -0
- package/skills/run-audit/SKILL.md +197 -0
- package/skills/scan-project/SKILL.md +41 -0
- package/skills/self-audit/SKILL.md +153 -0
- package/skills/subagent-driven-development/SKILL.md +154 -0
- package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
- package/skills/subagent-driven-development/implementer-prompt.md +102 -0
- package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/skills/tdd/SKILL.md +23 -0
- package/skills/using-git-worktrees/SKILL.md +163 -0
- package/skills/using-skills/SKILL.md +95 -0
- package/skills/verification/SKILL.md +22 -0
- package/skills/wazir/SKILL.md +463 -0
- package/skills/writing-plans/SKILL.md +30 -0
- package/skills/writing-skills/SKILL.md +157 -0
- package/skills/writing-skills/anthropic-best-practices.md +122 -0
- package/skills/writing-skills/persuasion-principles.md +50 -0
- package/templates/README.md +20 -0
- package/templates/artifacts/README.md +10 -0
- package/templates/artifacts/accepted-learning.md +19 -0
- package/templates/artifacts/accepted-learning.template.json +12 -0
- package/templates/artifacts/author.md +74 -0
- package/templates/artifacts/author.template.json +19 -0
- package/templates/artifacts/clarification.md +21 -0
- package/templates/artifacts/clarification.template.json +12 -0
- package/templates/artifacts/execute-notes.md +19 -0
- package/templates/artifacts/implementation-plan.md +21 -0
- package/templates/artifacts/implementation-plan.template.json +11 -0
- package/templates/artifacts/learning-proposal.md +19 -0
- package/templates/artifacts/next-run-handoff.md +21 -0
- package/templates/artifacts/plan-review.md +19 -0
- package/templates/artifacts/proposed-learning.template.json +12 -0
- package/templates/artifacts/research.md +21 -0
- package/templates/artifacts/research.template.json +12 -0
- package/templates/artifacts/review-findings.md +19 -0
- package/templates/artifacts/review.template.json +11 -0
- package/templates/artifacts/run-manifest.template.json +8 -0
- package/templates/artifacts/spec-challenge.md +19 -0
- package/templates/artifacts/spec-challenge.template.json +11 -0
- package/templates/artifacts/spec.md +21 -0
- package/templates/artifacts/spec.template.json +12 -0
- package/templates/artifacts/verification-proof.md +19 -0
- package/templates/artifacts/verification-proof.template.json +11 -0
- package/templates/examples/accepted-learning.example.json +14 -0
- package/templates/examples/author.example.json +152 -0
- package/templates/examples/clarification.example.json +15 -0
- package/templates/examples/docs-claim.example.json +8 -0
- package/templates/examples/export-manifest.example.json +7 -0
- package/templates/examples/host-export-package.example.json +11 -0
- package/templates/examples/implementation-plan.example.json +17 -0
- package/templates/examples/proposed-learning.example.json +13 -0
- package/templates/examples/research.example.json +15 -0
- package/templates/examples/research.example.md +6 -0
- package/templates/examples/review.example.json +17 -0
- package/templates/examples/run-manifest.example.json +9 -0
- package/templates/examples/spec-challenge.example.json +14 -0
- package/templates/examples/spec.example.json +21 -0
- package/templates/examples/verification-proof.example.json +21 -0
- package/templates/examples/wazir-manifest.example.yaml +65 -0
- package/templates/task-definition-schema.md +99 -0
- package/tooling/README.md +20 -0
- package/tooling/src/adapters/context-mode.js +50 -0
- package/tooling/src/capture/command.js +376 -0
- package/tooling/src/capture/store.js +99 -0
- package/tooling/src/capture/usage.js +270 -0
- package/tooling/src/checks/branches.js +50 -0
- package/tooling/src/checks/brand-truth.js +110 -0
- package/tooling/src/checks/changelog.js +231 -0
- package/tooling/src/checks/command-registry.js +36 -0
- package/tooling/src/checks/commits.js +102 -0
- package/tooling/src/checks/docs-drift.js +103 -0
- package/tooling/src/checks/docs-truth.js +201 -0
- package/tooling/src/checks/runtime-surface.js +156 -0
- package/tooling/src/cli.js +116 -0
- package/tooling/src/command-options.js +56 -0
- package/tooling/src/commands/validate.js +320 -0
- package/tooling/src/doctor/command.js +91 -0
- package/tooling/src/export/command.js +77 -0
- package/tooling/src/export/compiler.js +498 -0
- package/tooling/src/guards/loop-cap-guard.js +52 -0
- package/tooling/src/guards/protected-path-write-guard.js +67 -0
- package/tooling/src/index/command.js +152 -0
- package/tooling/src/index/storage.js +1061 -0
- package/tooling/src/index/summarizers.js +261 -0
- package/tooling/src/loaders.js +18 -0
- package/tooling/src/project-root.js +22 -0
- package/tooling/src/recall/command.js +225 -0
- package/tooling/src/schema-validator.js +30 -0
- package/tooling/src/state-root.js +40 -0
- package/tooling/src/status/command.js +71 -0
- package/wazir.manifest.yaml +135 -0
- package/workflows/README.md +19 -0
- package/workflows/author.md +42 -0
- package/workflows/clarify.md +38 -0
- package/workflows/design-review.md +46 -0
- package/workflows/design.md +44 -0
- package/workflows/discover.md +37 -0
- package/workflows/execute.md +48 -0
- package/workflows/learn.md +38 -0
- package/workflows/plan-review.md +42 -0
- package/workflows/plan.md +39 -0
- package/workflows/prepare-next.md +37 -0
- package/workflows/review.md +40 -0
- package/workflows/run-audit.md +41 -0
- package/workflows/spec-challenge.md +41 -0
- package/workflows/specify.md +38 -0
- package/workflows/verify.md +37 -0
|
@@ -0,0 +1,778 @@
|
|
|
1
|
+
# Error Psychology — Design Expertise Module
|
|
2
|
+
|
|
3
|
+
> Error psychology studies why humans make errors, how errors affect emotional and cognitive states, and how interface design can prevent, tolerate, and recover from errors gracefully. This module spans cognitive error taxonomy (Don Norman), systemic failure models (James Reason), emotional consequences of repeated failure (Seligman, Dollard), manufacturing-derived mistake-proofing (Shingo), and their concrete application to UI/UX design across platforms.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. The Science of Human Error
|
|
8
|
+
|
|
9
|
+
### 1.1 Slips vs. Mistakes — Don Norman's Error Taxonomy
|
|
10
|
+
|
|
11
|
+
Don Norman, in *The Design of Everyday Things* (1988, revised 2013), established the foundational distinction between two classes of human error based on where in the cognitive cycle the breakdown occurs.
|
|
12
|
+
|
|
13
|
+
**Slips — Correct intention, wrong execution.**
|
|
14
|
+
The user has the right goal but performs the wrong action. Slips occur at lower cognitive levels (execution, perception, interpretation) and are subconscious, automatic-behavior failures.
|
|
15
|
+
|
|
16
|
+
| Slip Type | Mechanism | Example |
|
|
17
|
+
|-----------|-----------|---------|
|
|
18
|
+
| **Capture slip** | A frequently performed action "captures" the intended one | Opening email out of habit when you meant to open the calendar |
|
|
19
|
+
| **Description-similarity** | Wrong action on an object resembling the target | Dragging a file to the wrong folder because two icons look alike |
|
|
20
|
+
| **Mode error** | System is in a different mode than the user assumes | Typing text in a spreadsheet cell that is in formula-edit mode |
|
|
21
|
+
| **Memory-lapse slip** | Forgetting to complete a step in a sequence | Sending an email without the attachment |
|
|
22
|
+
|
|
23
|
+
**Mistakes — Wrong intention, correct execution.**
|
|
24
|
+
The user forms an incorrect goal or plan but executes it properly. Mistakes occur at higher cognitive levels (goal formation, planning, evaluation) and are conscious, deliberate-reasoning failures.
|
|
25
|
+
|
|
26
|
+
| Mistake Type | Mechanism | Example |
|
|
27
|
+
|--------------|-----------|---------|
|
|
28
|
+
| **Rule-based** | Correct diagnosis, wrong action plan | Choosing "Reply All" when a private reply was appropriate |
|
|
29
|
+
| **Knowledge-based** | Incorrect or incomplete mental model | Believing deleting a shared Google Doc removes only your copy |
|
|
30
|
+
| **Memory-lapse** | Forgetting a goal or evaluation step | Starting a wizard, forgetting the purpose, selecting wrong options |
|
|
31
|
+
|
|
32
|
+
**Design implication:** Slips require better constraints, affordances, and forcing functions. Mistakes require better feedback, conceptual models, and information architecture.
|
|
33
|
+
|
|
34
|
+
### 1.2 The Swiss Cheese Model — James Reason
|
|
35
|
+
|
|
36
|
+
James Reason introduced the Swiss Cheese Model in *Human Error* (1990). Originally developed for aviation and healthcare safety, it provides a powerful framework for understanding how errors propagate through systems.
|
|
37
|
+
|
|
38
|
+
**Core concept:** Every defensive layer in a system (training, UI design, validation, confirmation dialogs, server-side checks) has gaps — like holes in slices of Swiss cheese. A catastrophic error occurs only when holes in multiple layers momentarily align, allowing a "trajectory of accident opportunity" to pass through all defenses.
|
|
39
|
+
|
|
40
|
+
**Four levels of failure in Reason's model:**
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
Level 1: Organizational influences
|
|
44
|
+
(Company decides to skip usability testing to meet deadline)
|
|
45
|
+
|
|
|
46
|
+
Level 2: Unsafe supervision / process gaps
|
|
47
|
+
(No design review for destructive actions)
|
|
48
|
+
|
|
|
49
|
+
Level 3: Preconditions for unsafe acts
|
|
50
|
+
(User is fatigued, rushing, on mobile with poor connectivity)
|
|
51
|
+
|
|
|
52
|
+
Level 4: Unsafe acts — the user's slip or mistake
|
|
53
|
+
(User taps "Delete All" instead of "Delete Selected")
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Application to UI design — multiple independent defense layers:**
|
|
57
|
+
|
|
58
|
+
1. **Constraint layer** — Make the dangerous action harder to reach (progressive disclosure, spatial separation)
|
|
59
|
+
2. **Warning layer** — Confirmation dialog with specific consequences stated
|
|
60
|
+
3. **Recovery layer** — Undo functionality, soft-delete with retention period
|
|
61
|
+
4. **Audit layer** — Server-side logging enabling manual recovery
|
|
62
|
+
|
|
63
|
+
A single defense (e.g., a confirmation dialog) is insufficient. When any single layer fails (user clicks "Confirm" out of habit, undo window expires), the remaining layers still protect against permanent damage.
|
|
64
|
+
|
|
65
|
+
### 1.3 Error Prevention vs. Error Recovery
|
|
66
|
+
|
|
67
|
+
Two complementary strategies exist for handling errors, and mature design systems employ both.
|
|
68
|
+
|
|
69
|
+
**Error Prevention** — Eliminate error-prone conditions before they arise.
|
|
70
|
+
- Constraints that make invalid states unrepresentable (date pickers instead of free text)
|
|
71
|
+
- Defaults that guide toward correct choices
|
|
72
|
+
- Disabling actions until prerequisites are met
|
|
73
|
+
- Progressive disclosure that hides complexity until needed
|
|
74
|
+
|
|
75
|
+
**Error Recovery** — Minimize damage and effort when errors inevitably occur.
|
|
76
|
+
- Undo/redo stacks that let users reverse actions
|
|
77
|
+
- Auto-save and draft preservation
|
|
78
|
+
- Clear error messages with actionable fix instructions
|
|
79
|
+
- Forgiving input parsing (accepting "212-555-1234" or "2125551234" or "(212) 555-1234")
|
|
80
|
+
|
|
81
|
+
**The critical insight:** Prevention is always preferable, but recovery is always necessary. No prevention system is perfect — the Swiss Cheese Model guarantees gaps. Systems that invest only in prevention leave users stranded when errors slip through. Systems that invest only in recovery create a frustrating, error-heavy experience. NNG's Heuristic #5 (Error Prevention) and Heuristic #9 (Help Users Recognize, Diagnose, and Recover from Errors) encode this dual strategy directly.
|
|
82
|
+
|
|
83
|
+
### 1.4 The Frustration-Aggression Hypothesis
|
|
84
|
+
|
|
85
|
+
Proposed by Dollard, Doob, Miller, Mowrer, and Sears at Yale (1939): frustration — the blocking of goal-directed behavior — produces an instigation to aggression. Revised by Miller (1941): frustration creates readiness to respond aggressively, but aggression is one possible outcome among several.
|
|
86
|
+
|
|
87
|
+
**Manifestations in digital interfaces:**
|
|
88
|
+
|
|
89
|
+
| Response | Behavioral Signal | Example |
|
|
90
|
+
|----------|-------------------|---------|
|
|
91
|
+
| **Aggression** | Rage clicks (3+ clicks on same element in 2 seconds) | Button appears clickable but does nothing |
|
|
92
|
+
| **Fixation** | Repeating the same failed action | Resubmitting a form returning the same vague error |
|
|
93
|
+
| **Withdrawal** | Abandoning the task entirely | Closing the tab after the third failed login |
|
|
94
|
+
| **Regression** | Reverting to simpler strategies | Calling phone support instead of using self-service |
|
|
95
|
+
|
|
96
|
+
**Design implication:** Every error state is a frustration event. Cumulative errors compound non-linearly. One error with easy recovery keeps users engaged. Three errors in succession drives abandonment — not because any single error was catastrophic, but because accumulated frustration exceeded tolerance.
|
|
97
|
+
|
|
98
|
+
### 1.5 Learned Helplessness from Repeated Errors
|
|
99
|
+
|
|
100
|
+
Martin Seligman's learned helplessness theory (1967): organisms exposed to repeated, uncontrollable negative events stop trying to improve their situation — even when escape becomes possible.
|
|
101
|
+
|
|
102
|
+
**In user interfaces:** When users repeatedly encounter errors they cannot resolve (vague messages, incomprehensible validation, forms that clear on failure), they develop digital learned helplessness:
|
|
103
|
+
|
|
104
|
+
- **Low self-efficacy:** "I'm not good with computers"
|
|
105
|
+
- **Premature abandonment:** Giving up at the first difficulty on future tasks
|
|
106
|
+
- **Support dependency:** Calling support for tasks they could handle independently
|
|
107
|
+
- **Platform avoidance:** Switching to competitors entirely
|
|
108
|
+
|
|
109
|
+
**The vicious cycle:** Vague error -> user cannot fix -> tries random changes -> more errors -> frustration compounds -> user concludes "this is too hard for me" -> helplessness established -> avoids similar tasks in future.
|
|
110
|
+
|
|
111
|
+
**Design antidote:** Ensure every error state provides a clear, achievable path forward. Consistent success at recovery builds **learned mastery** — the opposite of helplessness.
|
|
112
|
+
|
|
113
|
+
### 1.6 Error Tolerance
|
|
114
|
+
|
|
115
|
+
Error tolerance means designing systems that absorb errors gracefully rather than punishing users for inevitable mistakes.
|
|
116
|
+
|
|
117
|
+
**Three dimensions:**
|
|
118
|
+
1. **Input tolerance** — Accept varied formats, ignore harmless deviations (phone: `(212) 555-1234` or `2125551234`)
|
|
119
|
+
2. **State tolerance** — Preserve user progress despite errors (auto-save, retaining form values on validation failure)
|
|
120
|
+
3. **Action tolerance** — Allow reversal of unintended actions (multi-level undo, soft delete with recovery period)
|
|
121
|
+
|
|
122
|
+
**Key principle:** The cost of an error to the user should be proportional to the ease of making that error. Easy-to-make errors must be easy to reverse.
|
|
123
|
+
|
|
124
|
+
### 1.7 Poka-Yoke — Mistake-Proofing from Manufacturing
|
|
125
|
+
|
|
126
|
+
Poka-yoke ("mistake-proofing") was developed by Shigeo Shingo at Toyota in the 1960s. Instead of training workers to avoid mistakes, redesign the system so mistakes become impossible or immediately detectable.
|
|
127
|
+
|
|
128
|
+
**Two types:**
|
|
129
|
+
|
|
130
|
+
| Type | Manufacturing Example | UI Example |
|
|
131
|
+
|------|----------------------|------------|
|
|
132
|
+
| **Prevention** (makes errors impossible) | USB-C fits only one way | Disabled submit until required fields valid |
|
|
133
|
+
| **Detection** (makes errors visible) | Dashboard warning light | Red border on email field missing "@" |
|
|
134
|
+
|
|
135
|
+
**Six poka-yoke strategies for UI:**
|
|
136
|
+
1. **Elimination** — Remove error opportunity (auto-fill address from ZIP lookup)
|
|
137
|
+
2. **Replacement** — Constrained inputs replace free-text (dropdowns, pickers, sliders)
|
|
138
|
+
3. **Prevention** — Make errors logically impossible (`maxlength`, `type="email"`, grayed-out buttons)
|
|
139
|
+
4. **Facilitation** — Make correct action easier than incorrect (smart defaults, autocomplete)
|
|
140
|
+
5. **Detection** — Catch errors immediately (real-time password strength, address verification)
|
|
141
|
+
6. **Mitigation** — Reduce consequences (soft-delete, "undo send" window, auto-save)
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 2. Design Implications — 15 Rules for Error-Resilient Interfaces
|
|
146
|
+
|
|
147
|
+
### Rule 1: Prevent Errors with Constraints
|
|
148
|
+
|
|
149
|
+
**Principle:** The most effective error message never appears. Use constraints to make errors structurally impossible.
|
|
150
|
+
|
|
151
|
+
**Rule:** For every input, ask: "Can I constrain this to eliminate invalid states?" Use pickers, dropdowns, toggles instead of free-text when the valid set is known.
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
BAD: Free text "Date of Birth" -> Users type "March 7th", "3/7/26", "07-03-2026"
|
|
155
|
+
GOOD: Three dropdowns [Month v] [Day v] [Year v] or a date picker
|
|
156
|
+
-> Invalid dates not selectable, zero parsing errors
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Rule 2: Use Confirmation for Destructive Actions Only
|
|
160
|
+
|
|
161
|
+
**Principle:** Confirmation dialogs interrupt flow to ensure intent before high-consequence actions, but lose effectiveness when overused.
|
|
162
|
+
|
|
163
|
+
**Rule:** Reserve confirmation exclusively for irreversible actions. State the specific consequence — never use generic "Are you sure?"
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
BAD: "Are you sure?" [Cancel] [OK]
|
|
167
|
+
GOOD: "Permanently delete 847 customer records? This cannot be undone."
|
|
168
|
+
[Cancel] [Delete 847 Records]
|
|
169
|
+
-> Consequence quantified, button names the exact action
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
**NNG finding:** Confirmation effectiveness depends on rarity. Frequent dialogs train users to click "Confirm" without reading — a capture slip.
|
|
173
|
+
|
|
174
|
+
### Rule 3: Provide Undo Instead of Confirmation
|
|
175
|
+
|
|
176
|
+
**Principle:** Undo respects agency, is less disruptive, and does not suffer from habituation.
|
|
177
|
+
|
|
178
|
+
**Rule:** For reversible actions, prefer undo over confirmation. Show a toast with undo action after the operation completes.
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
CONFIRMATION (inferior): Dialog -> user reads -> clicks Archive -> done
|
|
182
|
+
UNDO (superior): Archive immediately -> toast "Archived. [Undo]" for 8 sec
|
|
183
|
+
-> User continues uninterrupted, clicks Undo only if mistaken
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**When undo is NOT sufficient:** Sending to 10,000 recipients, permanent data purge, financial transactions, external API triggers.
|
|
187
|
+
|
|
188
|
+
### Rule 4: Error Messages Must Explain + Suggest Fix
|
|
189
|
+
|
|
190
|
+
**Principle:** An error message must: (1) state what happened, (2) explain why, (3) tell how to fix it.
|
|
191
|
+
|
|
192
|
+
**Rule:** Every error must contain a plain-language description and at least one actionable suggestion. Never blame the user. Keep under 14 words (90% comprehension) or 8 words (100% comprehension).
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
TERRIBLE: "Error 0x80070005"
|
|
196
|
+
BAD: "Invalid input"
|
|
197
|
+
MEDIOCRE: "Please enter a valid email address"
|
|
198
|
+
GOOD: "This email is missing an '@'. Example: name@company.com"
|
|
199
|
+
EXCELLENT: "No account for alex@gmial.com. Did you mean alex@gmail.com?"
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**Baymard finding:** For complex fields (card number, phone, password), prepare 4-7 specific messages per field. Generic "invalid" messages increase recovery time by up to 5x.
|
|
203
|
+
|
|
204
|
+
### Rule 5: Inline Validation — Timed Correctly
|
|
205
|
+
|
|
206
|
+
**Rule:** Validate on blur (when user leaves the field), never while still typing. Remove error indicators immediately when corrected.
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
BAD: User types "a" in email -> immediately shows "invalid email" (premature)
|
|
210
|
+
GOOD: User types "alex@gmial", tabs away -> shows "Did you mean gmail.com?"
|
|
211
|
+
BEST: First interaction: validate on blur. After error shown: validate on
|
|
212
|
+
keyup (green check the moment input becomes valid — positive reinforcement)
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
**Research (Wroblewski):** Proper inline validation: 22% fewer errors, 42% faster completion, 31% higher satisfaction.
|
|
216
|
+
|
|
217
|
+
### Rule 6: Never Clear Form Fields on Error
|
|
218
|
+
|
|
219
|
+
**Rule:** Always preserve all user input when displaying validation errors. Highlight only fields needing correction. Never reset the form.
|
|
220
|
+
|
|
221
|
+
```
|
|
222
|
+
DESTRUCTIVE: 12-field form -> submit -> "Username taken" -> ALL fields cleared
|
|
223
|
+
PRESERVING: 12-field form -> submit -> username highlighted red
|
|
224
|
+
"The username 'alex_dev' is taken. Available: alex_dev1, alexdev_"
|
|
225
|
+
All other fields retain values
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**Baymard finding:** 34% of e-commerce sites clear credit card details on validation error — a leading cause of checkout abandonment.
|
|
229
|
+
|
|
230
|
+
### Rule 7: Auto-Save to Prevent Data Loss
|
|
231
|
+
|
|
232
|
+
**Principle:** Users should never lose work because of a browser crash, accidental navigation, network interruption, or session timeout.
|
|
233
|
+
|
|
234
|
+
**Rule:** Implement auto-save for any form or content creation flow where data entry takes more than 30 seconds. Provide clear "Saved" / "Saving..." status indicators. Warn users before navigating away from unsaved changes. Maintain drafts as recoverable objects.
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
AUTO-SAVE IMPLEMENTATION:
|
|
238
|
+
|
|
239
|
+
1. Trigger: Save on blur (field exit) + every 30 seconds during
|
|
240
|
+
active typing + on beforeunload event
|
|
241
|
+
|
|
242
|
+
2. Feedback:
|
|
243
|
+
- During save: "Saving..." (subtle spinner)
|
|
244
|
+
- After save: "Saved just now" or "Saved 2 min ago"
|
|
245
|
+
- On failure: "Changes not saved — check your connection"
|
|
246
|
+
[Retry] [Save locally]
|
|
247
|
+
|
|
248
|
+
3. Recovery:
|
|
249
|
+
- On return after crash: "We found a draft from March 7
|
|
250
|
+
at 2:34 PM. [Resume draft] [Discard]"
|
|
251
|
+
- Draft management: Drafts visible in a dedicated section
|
|
252
|
+
(as in Gmail, Twitter/X, Notion)
|
|
253
|
+
|
|
254
|
+
4. Navigation guard:
|
|
255
|
+
- Browser beforeunload: "You have unsaved changes.
|
|
256
|
+
Leave anyway?"
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
**Caution:** Auto-save should be used cautiously for data with financial, security, or privacy implications. A user editing their bank account number should not have partial edits auto-saved mid-change. In these cases, explicit save with confirmation is more appropriate.
|
|
260
|
+
|
|
261
|
+
### Rule 8: Every Error State Must Offer a Forward Path
|
|
262
|
+
|
|
263
|
+
**Principle:** When errors occur, the system should minimize damage, preserve context, and provide a clear path to recovery. The user should never reach a dead end.
|
|
264
|
+
|
|
265
|
+
**Rule:** Every error state must offer at least one forward path. Provide retry options, alternative actions, and help resources. Never show an error without an actionable next step.
|
|
266
|
+
|
|
267
|
+
```
|
|
268
|
+
DEAD END (no recovery path):
|
|
269
|
+
"Something went wrong."
|
|
270
|
+
[OK]
|
|
271
|
+
-> User clicks OK and is returned to... where? What now?
|
|
272
|
+
|
|
273
|
+
RECOVERABLE (clear forward paths):
|
|
274
|
+
"We couldn't process your payment. Your card was not charged."
|
|
275
|
+
|
|
276
|
+
What you can do:
|
|
277
|
+
- [Try again] — retry the same payment
|
|
278
|
+
- [Use a different card] — switch payment method
|
|
279
|
+
- [Save cart for later] — preserve selections without paying
|
|
280
|
+
- [Contact support] — get human help (est. wait: 2 min)
|
|
281
|
+
|
|
282
|
+
Error reference: PAY-4092 (if you contact support)
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
**Network error pattern:**
|
|
286
|
+
```
|
|
287
|
+
MOBILE NETWORK LOSS:
|
|
288
|
+
"You're offline. Your changes are saved on this device
|
|
289
|
+
and will sync when you're back online."
|
|
290
|
+
[View saved changes] [Continue editing offline]
|
|
291
|
+
-> No data loss, no panic, clear expectation setting
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Rule 9: Progressive Disclosure Reduces Error Opportunity
|
|
295
|
+
|
|
296
|
+
**Rule:** Break complex flows into sequential steps. Show advanced options only when requested.
|
|
297
|
+
|
|
298
|
+
```
|
|
299
|
+
HIGH ERROR SURFACE: Single page, 25 fields -> cognitive overload, scattered errors
|
|
300
|
+
LOW ERROR SURFACE: Step 1: Address (5 fields) -> Step 2: Shipping (1 choice)
|
|
301
|
+
-> Step 3: Payment (4 fields) -> Step 4: Review -> Place Order
|
|
302
|
+
Each step validated before proceeding
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
**NNG:** Progressive disclosure improves learnability, efficiency, and error rate.
|
|
306
|
+
|
|
307
|
+
### Rule 10: Separate Destructive from Routine Actions
|
|
308
|
+
|
|
309
|
+
**Rule:** Place destructive actions in physically and visually distinct locations. Require different interaction patterns.
|
|
310
|
+
|
|
311
|
+
```
|
|
312
|
+
DANGEROUS: [Save] [Delete Account] <- adjacent, same size, one-click
|
|
313
|
+
SAFE: [Save Changes] <- primary position
|
|
314
|
+
─── Danger Zone ───
|
|
315
|
+
[Delete Account] <- separated, red, requires typing "DELETE"
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### Rule 11: Forgiving Input Parsing
|
|
319
|
+
|
|
320
|
+
**Rule:** Accept all reasonable format variations. Parse and normalize on the backend. Show normalized format for confirmation.
|
|
321
|
+
|
|
322
|
+
```
|
|
323
|
+
RIGID: Phone rejects "(212) 555-1234", demands "212-555-1234" only
|
|
324
|
+
FORGIVING: Accepts any format -> strips non-digits -> validates -> displays "(212) 555-1234"
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
### Rule 12: Contextual Help at Error-Prone Points
|
|
328
|
+
|
|
329
|
+
**Rule:** Add helper text, tooltips, and examples to fields with high error rates. Place help adjacent to the input.
|
|
330
|
+
|
|
331
|
+
```
|
|
332
|
+
WITHOUT: CVV: [___] -> 18% error rate
|
|
333
|
+
WITH: CVV: [___] (?) "3 digits on back of card" [card image] -> significantly lower
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
### Rule 13: Show System Status During Long Operations
|
|
337
|
+
|
|
338
|
+
**Rule:** For operations >1 second, show progress. For >4 seconds, show estimated time. Never leave the screen unchanged.
|
|
339
|
+
|
|
340
|
+
```
|
|
341
|
+
NO STATUS: "Submit Payment" -> screen frozen 8 sec -> user clicks again -> double charge
|
|
342
|
+
WITH STATUS: "Submit Payment" -> "Processing..." (button disabled) -> "Verifying..." -> "Confirmed!"
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Rule 14: Design Error States as First-Class UI States
|
|
346
|
+
|
|
347
|
+
**Principle:** Error states are not edge cases — they are regular states that every user will encounter. They deserve the same design attention as success states.
|
|
348
|
+
|
|
349
|
+
**Rule:** Design every screen's error state intentionally during the design phase, not as an afterthought during development. Create specific empty states, error states, and partial-failure states in your design system.
|
|
350
|
+
|
|
351
|
+
```
|
|
352
|
+
STATES EVERY SCREEN NEEDS:
|
|
353
|
+
|
|
354
|
+
1. Loading state -> Skeleton screen or spinner
|
|
355
|
+
2. Empty state -> Helpful prompt to add content
|
|
356
|
+
3. Populated state -> Normal view with data
|
|
357
|
+
4. Error state -> Clear message + recovery action
|
|
358
|
+
5. Partial state -> Some data loaded, some failed
|
|
359
|
+
6. Offline state -> What's available without network
|
|
360
|
+
7. Permission state -> What to do if access is denied
|
|
361
|
+
|
|
362
|
+
PARTIAL FAILURE EXAMPLE:
|
|
363
|
+
Dashboard with 4 widgets:
|
|
364
|
+
- Widget 1: Data loaded successfully
|
|
365
|
+
- Widget 2: Data loaded successfully
|
|
366
|
+
- Widget 3: "Couldn't load sales data. [Retry]"
|
|
367
|
+
- Widget 4: Data loaded successfully
|
|
368
|
+
-> Don't blank the entire page because one API call failed
|
|
369
|
+
-> Show what you can, fail gracefully where you can't
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
### Rule 15: Smart Defaults Reduce Decision Errors
|
|
373
|
+
|
|
374
|
+
**Rule:** Pre-select the statistically most common choice. Allow easy override. Never use defaults that serve the business at the user's expense (dark pattern territory).
|
|
375
|
+
|
|
376
|
+
```
|
|
377
|
+
NO DEFAULT: Shipping: ( ) Standard ( ) Express ( ) Overnight
|
|
378
|
+
SMART: Shipping: ( ) Standard (*) Express ( ) Overnight
|
|
379
|
+
"Most customers choose Express (2-3 days, $5.99)"
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
---
|
|
383
|
+
|
|
384
|
+
## 3. Measurement — Quantifying Error Impact
|
|
385
|
+
|
|
386
|
+
### 3.1 Error Rate Metrics
|
|
387
|
+
|
|
388
|
+
**Task Error Rate:** Percentage of task attempts that include at least one error.
|
|
389
|
+
```
|
|
390
|
+
Task Error Rate = (Tasks with errors / Total task attempts) x 100
|
|
391
|
+
|
|
392
|
+
Benchmarks:
|
|
393
|
+
- Simple tasks (login, search): < 5% error rate
|
|
394
|
+
- Moderate tasks (checkout, forms): < 15% error rate
|
|
395
|
+
- Complex tasks (multi-step config): < 25% error rate
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
**Error Frequency:** Average number of errors per task completion.
|
|
399
|
+
```
|
|
400
|
+
Error Frequency = Total errors observed / Total tasks completed
|
|
401
|
+
|
|
402
|
+
Interpretation:
|
|
403
|
+
- 0.0 - 0.3: Excellent — errors are rare
|
|
404
|
+
- 0.3 - 1.0: Acceptable — occasional errors, manageable
|
|
405
|
+
- 1.0 - 2.0: Concerning — users struggle regularly
|
|
406
|
+
- 2.0+: Critical — interface is fundamentally broken
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
**Error Severity Classification:**
|
|
410
|
+
|
|
411
|
+
| Severity | Definition | Example |
|
|
412
|
+
|----------|-----------|---------|
|
|
413
|
+
| **Cosmetic** | No functional impact | Typo in label |
|
|
414
|
+
| **Minor** | Brief confusion, self-corrects in seconds | Misleading icon |
|
|
415
|
+
| **Major** | Significant effort to recover | Form cleared on submit |
|
|
416
|
+
| **Critical** | Data loss or task abandonment | Payment double-charged |
|
|
417
|
+
| **Catastrophic** | Irreversible real-world consequences | Wrong medical record updated |
|
|
418
|
+
|
|
419
|
+
### 3.2 Recovery Metrics
|
|
420
|
+
|
|
421
|
+
**Error Recovery Rate:** Percentage of errors from which users successfully recover without external help.
|
|
422
|
+
```
|
|
423
|
+
Recovery Rate = (Self-recovered errors / Total errors) x 100
|
|
424
|
+
|
|
425
|
+
Target: > 85% self-recovery rate
|
|
426
|
+
Below 70%: Error messages and recovery paths need redesign
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
**Mean Time to Recovery (MTTR):** Average time from error occurrence to successful task resumption.
|
|
430
|
+
```
|
|
431
|
+
MTTR = Sum of all recovery times / Number of recovered errors
|
|
432
|
+
|
|
433
|
+
Benchmarks:
|
|
434
|
+
- < 10 seconds: Good — user barely notices the error
|
|
435
|
+
- 10-30 seconds: Acceptable — noticeable but not frustrating
|
|
436
|
+
- 30-120 seconds: Poor — significant workflow disruption
|
|
437
|
+
- > 120 seconds: Critical — users are likely to abandon
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
**Error-to-Abandonment Rate:** Percentage of error encounters that result in task abandonment.
|
|
441
|
+
```
|
|
442
|
+
Abandonment = (Tasks abandoned after error / Total tasks with errors) x 100
|
|
443
|
+
|
|
444
|
+
Benchmarks:
|
|
445
|
+
- < 5%: Errors are well-handled, recovery paths work
|
|
446
|
+
- 5-15%: Some error paths need improvement
|
|
447
|
+
- 15-30%: Significant usability problem
|
|
448
|
+
- > 30%: Critical — errors are driving users away
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
### 3.3 User Frustration Signals
|
|
452
|
+
|
|
453
|
+
| Signal | Detection | Threshold |
|
|
454
|
+
|--------|-----------|-----------|
|
|
455
|
+
| Rage clicks | 3+ clicks on same element in 2 sec | Any occurrence |
|
|
456
|
+
| Dead clicks | Clicks on non-interactive elements | >5% of total clicks |
|
|
457
|
+
| Form abandonment | Started but not submitted | >40% |
|
|
458
|
+
| Error page bounces | Leaves immediately after error | >60% |
|
|
459
|
+
| Backtracking | Returns to same step repeatedly | >2 returns |
|
|
460
|
+
| Session rage quit | Session ends within 30 sec of error | Correlate with error events |
|
|
461
|
+
|
|
462
|
+
**Attitudinal indicators:** SUS <68, NPS drop after error-heavy flows, CES >5/7, qualitative feedback with "frustrating," "broken," "gave up."
|
|
463
|
+
|
|
464
|
+
### 3.4 Error Message Effectiveness Testing
|
|
465
|
+
|
|
466
|
+
**A/B testing error messages:**
|
|
467
|
+
```
|
|
468
|
+
Methodology:
|
|
469
|
+
1. Identify the 10 most frequently triggered error messages
|
|
470
|
+
2. For each, create 2-3 variant messages:
|
|
471
|
+
- Variant A: Current message
|
|
472
|
+
- Variant B: Rewritten with specific problem + suggested fix
|
|
473
|
+
- Variant C: Rewritten with specific problem + auto-fix option
|
|
474
|
+
3. Measure per variant:
|
|
475
|
+
- Recovery rate (% who fix the error and continue)
|
|
476
|
+
- Recovery time (seconds from error to correction)
|
|
477
|
+
- Abandonment rate (% who leave after the error)
|
|
478
|
+
- Repeat error rate (% who trigger the same error again)
|
|
479
|
+
4. Run for 2-4 weeks until statistical significance
|
|
480
|
+
5. Deploy the best-performing variant
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
**Usability testing error scenarios:**
|
|
484
|
+
```
|
|
485
|
+
Protocol:
|
|
486
|
+
1. Give participants tasks that naturally trigger errors
|
|
487
|
+
2. Observe and record:
|
|
488
|
+
- Does the user notice the error message?
|
|
489
|
+
- Does the user understand what went wrong?
|
|
490
|
+
- Does the user know how to fix it?
|
|
491
|
+
- How long does recovery take?
|
|
492
|
+
- What is the user's emotional state? (think-aloud)
|
|
493
|
+
3. Post-task: "On a scale of 1-7, how easy was it to
|
|
494
|
+
recover from the error?"
|
|
495
|
+
4. Iterate on messages scoring below 5
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
**Field-level error analytics:**
|
|
499
|
+
```
|
|
500
|
+
Track per field:
|
|
501
|
+
- Error trigger rate (% of users who trigger validation)
|
|
502
|
+
- Most common error type per field
|
|
503
|
+
- Field-level abandonment (users who leave at this field)
|
|
504
|
+
- Correction success rate (% who fix error and continue)
|
|
505
|
+
- Average attempts to resolve (1 = first try, higher = struggling)
|
|
506
|
+
|
|
507
|
+
Fields with > 20% error rate need redesign, not just
|
|
508
|
+
better error messages.
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
---
|
|
512
|
+
|
|
513
|
+
## 4. Dark Patterns Warning — Weaponized Error States
|
|
514
|
+
|
|
515
|
+
Error states can be deliberately designed to manipulate users against their interests. These deceptive patterns weaponize error psychology to prevent users from taking actions the business wants to block (like canceling subscriptions).
|
|
516
|
+
|
|
517
|
+
### 4.1 Fake Error Messages to Prevent Cancellation
|
|
518
|
+
|
|
519
|
+
**Pattern:** When a user attempts to cancel a subscription or delete an account, the system displays a fake or exaggerated error message to block the action.
|
|
520
|
+
|
|
521
|
+
```
|
|
522
|
+
DARK PATTERN:
|
|
523
|
+
User clicks "Cancel Subscription"
|
|
524
|
+
-> "An error occurred. Please try again later."
|
|
525
|
+
-> User tries again -> same "error"
|
|
526
|
+
-> User gives up, remains subscribed
|
|
527
|
+
-> No actual error occurred — the system faked it
|
|
528
|
+
|
|
529
|
+
ETHICAL ALTERNATIVE:
|
|
530
|
+
User clicks "Cancel Subscription"
|
|
531
|
+
-> "Your subscription will end on March 31, 2026.
|
|
532
|
+
You'll keep access until then."
|
|
533
|
+
-> [Keep Subscription] [Confirm Cancellation]
|
|
534
|
+
-> Clean, honest, respectful process
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
### 4.2 Hidden Unsubscribe Errors
|
|
538
|
+
|
|
539
|
+
**Pattern:** Unsubscribe links in emails lead to pages that display errors, require login, or claim the action "couldn't be completed."
|
|
540
|
+
|
|
541
|
+
```
|
|
542
|
+
DARK PATTERN:
|
|
543
|
+
User clicks "Unsubscribe" in email footer
|
|
544
|
+
-> "We're sorry, something went wrong. Please try again
|
|
545
|
+
or contact support."
|
|
546
|
+
-> No actual error — the unsubscribe was simply blocked
|
|
547
|
+
|
|
548
|
+
ETHICAL ALTERNATIVE:
|
|
549
|
+
User clicks "Unsubscribe"
|
|
550
|
+
-> "You've been unsubscribed from marketing emails.
|
|
551
|
+
You'll still receive transactional emails (receipts,
|
|
552
|
+
security alerts)."
|
|
553
|
+
-> [Resubscribe] if they change their mind
|
|
554
|
+
-> Immediate, one-click, no barriers
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
### 4.3 Confirmshaming via Error-Adjacent Language
|
|
558
|
+
|
|
559
|
+
**Pattern:** The option to decline is phrased to make the user feel guilty, using the visual language of error states (red text, warning icons) on legitimate choices.
|
|
560
|
+
|
|
561
|
+
```
|
|
562
|
+
DARK PATTERN:
|
|
563
|
+
"Upgrade to Premium for $9.99/month?"
|
|
564
|
+
[Yes, upgrade me!]
|
|
565
|
+
[No, I don't want to save money] <- styled like an error/warning
|
|
566
|
+
|
|
567
|
+
ETHICAL ALTERNATIVE:
|
|
568
|
+
"Upgrade to Premium for $9.99/month?"
|
|
569
|
+
[Upgrade] [No thanks]
|
|
570
|
+
-> Neutral language, equal visual weight
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
### 4.4 Obstruction via False Complexity (Roach Motel)
|
|
574
|
+
|
|
575
|
+
**Pattern:** Making cancellation deliberately complex with multiple steps, each appearing to fail or requiring information the user must search for.
|
|
576
|
+
|
|
577
|
+
```
|
|
578
|
+
ROACH MOTEL:
|
|
579
|
+
Sign up: 1 click, 2 fields, 30 seconds
|
|
580
|
+
Cancel: 5 pages, a phone call, a "retention specialist,"
|
|
581
|
+
a fake error on the final confirmation page
|
|
582
|
+
|
|
583
|
+
Amazon Prime cancellation (pre-lawsuit):
|
|
584
|
+
-> 6 clicks through multiple screens with manipulative copy
|
|
585
|
+
-> Each screen designed to look like an error or dead end
|
|
586
|
+
-> FTC lawsuit resulted in $25 million fine
|
|
587
|
+
```
|
|
588
|
+
|
|
589
|
+
### 4.5 Legal and Regulatory Context
|
|
590
|
+
|
|
591
|
+
Manipulative error patterns are increasingly illegal:
|
|
592
|
+
|
|
593
|
+
- **GDPR (EU):** Requires "freely given" consent; dark patterns invalidate consent
|
|
594
|
+
- **Digital Services Act (EU):** Explicitly bans manipulative interface designs
|
|
595
|
+
- **FTC (US):** Has prosecuted Amazon, ABCmouse, Epic Games for deceptive flows
|
|
596
|
+
- **CCPA (California):** Prohibits dark-pattern approaches to opt-out requests
|
|
597
|
+
- **Consumer protection laws worldwide** are increasingly classifying fake errors as fraud
|
|
598
|
+
|
|
599
|
+
---
|
|
600
|
+
|
|
601
|
+
## 5. Platform-Specific Error Considerations
|
|
602
|
+
|
|
603
|
+
### 5.1 Mobile-Specific Error Patterns
|
|
604
|
+
|
|
605
|
+
**Fat Finger Errors:**
|
|
606
|
+
Touch targets on mobile are inherently imprecise. The average adult fingertip covers approximately 10mm (~40px), but many mobile interfaces use targets smaller than this.
|
|
607
|
+
|
|
608
|
+
```
|
|
609
|
+
MITIGATION STRATEGIES:
|
|
610
|
+
- Minimum touch target: 48x48dp (Android Material), 44x44pt (Apple HIG)
|
|
611
|
+
- Minimum spacing between destructive and safe actions: 16dp
|
|
612
|
+
- Increase tap target size for destructive actions beyond minimums
|
|
613
|
+
- Use swipe-to-delete with undo instead of tap-to-delete
|
|
614
|
+
- Add haptic feedback on destructive action activation
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
**Network Loss and Intermittent Connectivity:**
|
|
618
|
+
Mobile users frequently move between network states. Forms and actions must handle transitions gracefully.
|
|
619
|
+
|
|
620
|
+
```
|
|
621
|
+
OFFLINE STRATEGY:
|
|
622
|
+
1. Queue actions when offline (optimistic UI)
|
|
623
|
+
2. Show clear offline indicator (not an error — a state)
|
|
624
|
+
3. Sync automatically when connection returns
|
|
625
|
+
4. Resolve conflicts with clear user prompts:
|
|
626
|
+
"You edited this offline, but someone else also made changes.
|
|
627
|
+
[Keep yours] [Keep theirs] [Merge]"
|
|
628
|
+
|
|
629
|
+
TIMEOUT HANDLING:
|
|
630
|
+
- Don't show "Error" for slow connections
|
|
631
|
+
- Show: "This is taking longer than usual.
|
|
632
|
+
[Keep waiting] [Try again] [Save and try later]"
|
|
633
|
+
- Never silently fail — always inform the user of the outcome
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
**Small Screen Form Errors:**
|
|
637
|
+
Error messages compete for precious screen real estate on mobile.
|
|
638
|
+
|
|
639
|
+
```
|
|
640
|
+
MOBILE FORM ERROR PATTERNS:
|
|
641
|
+
- Inline errors below the field (not a banner at the top
|
|
642
|
+
that requires scrolling up)
|
|
643
|
+
- Auto-scroll to the first error field after submission
|
|
644
|
+
- Red border + icon + text (triple redundancy)
|
|
645
|
+
- Collapse resolved errors to recover screen space
|
|
646
|
+
- Never use modals for form errors on mobile — they obscure
|
|
647
|
+
the form and prevent correction
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
**Gesture Errors:**
|
|
651
|
+
Mobile introduces gesture-based errors that desktop does not have: accidental swipe-to-delete (always provide undo toast), accidental pull-to-refresh mid-form (preserve form state), accidental back-swipe on iOS (warn if unsaved changes), accidental long-press (never trigger destructive actions on long-press alone).
|
|
652
|
+
|
|
653
|
+
### 5.2 Desktop-Specific Error Patterns
|
|
654
|
+
|
|
655
|
+
**Complex Form Errors:**
|
|
656
|
+
Desktop forms tend to be longer and more complex due to available screen space.
|
|
657
|
+
|
|
658
|
+
```
|
|
659
|
+
DESKTOP FORM STRATEGIES:
|
|
660
|
+
- Error summary at top with anchor links to each error field:
|
|
661
|
+
|
|
662
|
+
"Please fix 3 errors:
|
|
663
|
+
1. Email address -> missing @ symbol
|
|
664
|
+
2. Phone number -> too few digits
|
|
665
|
+
3. ZIP code -> doesn't match selected state"
|
|
666
|
+
|
|
667
|
+
Each item links to its field for quick navigation
|
|
668
|
+
- Multi-column forms need clear error-to-field association
|
|
669
|
+
(arrow indicators, not just color)
|
|
670
|
+
- Tab-key navigation must reach error messages
|
|
671
|
+
- Error messages must be announced by screen readers
|
|
672
|
+
```
|
|
673
|
+
|
|
674
|
+
**Keyboard Shortcut Errors:**
|
|
675
|
+
Desktop users rely on shortcuts, creating unique slip opportunities.
|
|
676
|
+
- Ctrl+Z (undo) must work consistently across all interactions
|
|
677
|
+
- Ctrl+W (close tab) while editing must trigger beforeunload warning
|
|
678
|
+
- Accidental Ctrl+A then typing replaces all text — undo must restore fully
|
|
679
|
+
- Ctrl+S (save) must never trigger unintended side effects
|
|
680
|
+
|
|
681
|
+
### 5.3 Cross-Platform Undo Patterns
|
|
682
|
+
|
|
683
|
+
| Platform | Undo Mechanism | Discoverability |
|
|
684
|
+
|----------|---------------|-----------------|
|
|
685
|
+
| Desktop web | Ctrl/Cmd+Z | High |
|
|
686
|
+
| iOS | Shake to undo | <10% of users discover it |
|
|
687
|
+
| Android | No system gesture | App must provide explicit undo |
|
|
688
|
+
|
|
689
|
+
**Cross-platform rule:** Always provide an explicit, visible undo mechanism (toast/snackbar with [Undo] action). Never rely solely on platform gestures. Display undo for 8-10 seconds (5 is too short for delayed realization).
|
|
690
|
+
|
|
691
|
+
### 5.4 Accessibility and Error States
|
|
692
|
+
|
|
693
|
+
- Never use color alone for errors (WCAG 1.4.1) — use color + icon + text
|
|
694
|
+
- Error text must meet 4.5:1 contrast (WCAG 1.4.3)
|
|
695
|
+
- Use `role="alert"` or `aria-live="assertive"` for screen reader announcement
|
|
696
|
+
- Associate errors with fields via `aria-describedby`
|
|
697
|
+
- Set `aria-invalid="true"` on error fields
|
|
698
|
+
- Move focus to first error field on submission
|
|
699
|
+
- Use plain language, provide input examples, avoid time-limited error displays
|
|
700
|
+
|
|
701
|
+
---
|
|
702
|
+
|
|
703
|
+
## 6. Quick Reference Checklist
|
|
704
|
+
|
|
705
|
+
### Prevention
|
|
706
|
+
```
|
|
707
|
+
[ ] Constrained inputs (pickers/dropdowns) where valid set is known
|
|
708
|
+
[ ] Smart defaults for common choices
|
|
709
|
+
[ ] Disabled states for impossible actions
|
|
710
|
+
[ ] Progressive disclosure — only relevant fields visible
|
|
711
|
+
[ ] Forgiving input parsing — accept varied formats
|
|
712
|
+
[ ] Destructive actions spatially separated from routine ones
|
|
713
|
+
[ ] Contextual help (tooltips/examples) on error-prone fields
|
|
714
|
+
[ ] Progress indicators for operations >1 second
|
|
715
|
+
[ ] Double-submit prevention (disable button after click)
|
|
716
|
+
[ ] Autocomplete for known-good values
|
|
717
|
+
```
|
|
718
|
+
|
|
719
|
+
### Recovery
|
|
720
|
+
```
|
|
721
|
+
[ ] Undo via toast for reversible actions
|
|
722
|
+
[ ] Form fields preserved on validation error
|
|
723
|
+
[ ] Auto-save for flows >30 seconds
|
|
724
|
+
[ ] Error messages explain problem + suggest fix
|
|
725
|
+
[ ] Inline validation on blur, not while typing
|
|
726
|
+
[ ] Error indicators removed on correction
|
|
727
|
+
[ ] Every error state offers at least one forward action
|
|
728
|
+
[ ] Partial failure shown (not full-page blank)
|
|
729
|
+
[ ] Navigation guard for unsaved changes
|
|
730
|
+
[ ] Drafts, deleted items, and versions recoverable
|
|
731
|
+
```
|
|
732
|
+
|
|
733
|
+
### Error Message Quality
|
|
734
|
+
```
|
|
735
|
+
[ ] States what went wrong (specific)
|
|
736
|
+
[ ] Suggests how to fix (actionable)
|
|
737
|
+
[ ] Plain language (no jargon or codes as headline)
|
|
738
|
+
[ ] Does not blame user
|
|
739
|
+
[ ] Concise (<14 words primary)
|
|
740
|
+
[ ] Inline next to field
|
|
741
|
+
[ ] Triple-redundant (color + icon + text)
|
|
742
|
+
[ ] Accessible (screen reader, keyboard)
|
|
743
|
+
[ ] Tested with real users
|
|
744
|
+
```
|
|
745
|
+
|
|
746
|
+
### Dark Pattern Audit
|
|
747
|
+
```
|
|
748
|
+
[ ] Cancel/unsubscribe same effort as signup
|
|
749
|
+
[ ] All error messages genuine (no fake errors)
|
|
750
|
+
[ ] Decline options phrased neutrally
|
|
751
|
+
[ ] Unsubscribe link functional and immediate
|
|
752
|
+
[ ] Compliant with GDPR/DSA/FTC rules
|
|
753
|
+
```
|
|
754
|
+
|
|
755
|
+
### Measurement
|
|
756
|
+
```
|
|
757
|
+
[ ] Task error rate tracked per flow
|
|
758
|
+
[ ] Recovery rate >85%
|
|
759
|
+
[ ] MTTR <30 seconds
|
|
760
|
+
[ ] Abandonment after error <15%
|
|
761
|
+
[ ] Rage click detection enabled
|
|
762
|
+
[ ] Field error rates tracked (redesign at >20%)
|
|
763
|
+
[ ] Error messages A/B tested quarterly
|
|
764
|
+
```
|
|
765
|
+
|
|
766
|
+
---
|
|
767
|
+
|
|
768
|
+
## Key References
|
|
769
|
+
|
|
770
|
+
- **Norman, D.** (2013). *The Design of Everyday Things: Revised and Expanded Edition*. Basic Books.
|
|
771
|
+
- **Reason, J.** (1990). *Human Error*. Cambridge University Press.
|
|
772
|
+
- **Seligman, M.** (1975). *Helplessness: On Depression, Development, and Death*. W.H. Freeman.
|
|
773
|
+
- **Shingo, S.** (1986). *Zero Quality Control: Source Inspection and the Poka-Yoke System*. Productivity Press.
|
|
774
|
+
- **Dollard, J., et al.** (1939). *Frustration and Aggression*. Yale University Press.
|
|
775
|
+
- **Nielsen Norman Group.** [10 Usability Heuristics](https://www.nngroup.com/articles/ten-usability-heuristics/), [Error Prevention](https://www.nngroup.com/articles/slips/), [Error-Message Guidelines](https://www.nngroup.com/articles/error-message-guidelines/), [Confirmation Dialogs](https://www.nngroup.com/articles/confirmation-dialog/), [Progressive Disclosure](https://www.nngroup.com/articles/progressive-disclosure/)
|
|
776
|
+
- **Baymard Institute.** [Inline Form Validation](https://baymard.com/blog/inline-form-validation), [Adaptive Validation Errors](https://baymard.com/blog/adaptive-validation-error-messages), [Retain Data on Error](https://baymard.com/blog/preserve-card-details-on-error)
|
|
777
|
+
- **Wroblewski, L.** Inline Validation in Web Forms (22% fewer errors, 42% faster, 31% higher satisfaction).
|
|
778
|
+
- **MeasuringU.** [Measuring Errors in UX](https://measuringu.com/errors-ux/)
|