@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.
Files changed (629) hide show
  1. package/AGENTS.md +111 -0
  2. package/CHANGELOG.md +14 -0
  3. package/CONTRIBUTING.md +101 -0
  4. package/LICENSE +21 -0
  5. package/README.md +314 -0
  6. package/assets/composition-engine.mmd +34 -0
  7. package/assets/demo-script.sh +17 -0
  8. package/assets/logo-dark.svg +14 -0
  9. package/assets/logo.svg +14 -0
  10. package/assets/pipeline.mmd +39 -0
  11. package/assets/record-demo.sh +51 -0
  12. package/docs/README.md +51 -0
  13. package/docs/adapters/context-mode.md +60 -0
  14. package/docs/concepts/architecture.md +87 -0
  15. package/docs/concepts/artifact-model.md +60 -0
  16. package/docs/concepts/composition-engine.md +36 -0
  17. package/docs/concepts/indexing-and-recall.md +160 -0
  18. package/docs/concepts/observability.md +41 -0
  19. package/docs/concepts/roles-and-workflows.md +59 -0
  20. package/docs/concepts/terminology-policy.md +27 -0
  21. package/docs/getting-started/01-installation.md +78 -0
  22. package/docs/getting-started/02-first-run.md +102 -0
  23. package/docs/getting-started/03-adding-to-project.md +15 -0
  24. package/docs/getting-started/04-host-setup.md +15 -0
  25. package/docs/guides/ci-integration.md +15 -0
  26. package/docs/guides/creating-skills.md +15 -0
  27. package/docs/guides/expertise-module-authoring.md +15 -0
  28. package/docs/guides/hook-development.md +15 -0
  29. package/docs/guides/memory-and-learnings.md +34 -0
  30. package/docs/guides/multi-host-export.md +15 -0
  31. package/docs/guides/troubleshooting.md +101 -0
  32. package/docs/guides/writing-custom-roles.md +15 -0
  33. package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
  34. package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
  35. package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
  36. package/docs/readmes/INDEX.md +99 -0
  37. package/docs/readmes/features/expertise/README.md +171 -0
  38. package/docs/readmes/features/exports/README.md +222 -0
  39. package/docs/readmes/features/hooks/README.md +103 -0
  40. package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
  41. package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
  42. package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
  43. package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
  44. package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
  45. package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
  46. package/docs/readmes/features/hooks/session-start.md +119 -0
  47. package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
  48. package/docs/readmes/features/roles/README.md +157 -0
  49. package/docs/readmes/features/roles/clarifier.md +152 -0
  50. package/docs/readmes/features/roles/content-author.md +190 -0
  51. package/docs/readmes/features/roles/designer.md +193 -0
  52. package/docs/readmes/features/roles/executor.md +184 -0
  53. package/docs/readmes/features/roles/learner.md +210 -0
  54. package/docs/readmes/features/roles/planner.md +182 -0
  55. package/docs/readmes/features/roles/researcher.md +164 -0
  56. package/docs/readmes/features/roles/reviewer.md +184 -0
  57. package/docs/readmes/features/roles/specifier.md +162 -0
  58. package/docs/readmes/features/roles/verifier.md +215 -0
  59. package/docs/readmes/features/schemas/README.md +178 -0
  60. package/docs/readmes/features/skills/README.md +63 -0
  61. package/docs/readmes/features/skills/brainstorming.md +96 -0
  62. package/docs/readmes/features/skills/debugging.md +148 -0
  63. package/docs/readmes/features/skills/design.md +120 -0
  64. package/docs/readmes/features/skills/prepare-next.md +109 -0
  65. package/docs/readmes/features/skills/run-audit.md +159 -0
  66. package/docs/readmes/features/skills/scan-project.md +109 -0
  67. package/docs/readmes/features/skills/self-audit.md +176 -0
  68. package/docs/readmes/features/skills/tdd.md +137 -0
  69. package/docs/readmes/features/skills/using-skills.md +92 -0
  70. package/docs/readmes/features/skills/verification.md +120 -0
  71. package/docs/readmes/features/skills/writing-plans.md +104 -0
  72. package/docs/readmes/features/tooling/README.md +320 -0
  73. package/docs/readmes/features/workflows/README.md +186 -0
  74. package/docs/readmes/features/workflows/author.md +181 -0
  75. package/docs/readmes/features/workflows/clarify.md +154 -0
  76. package/docs/readmes/features/workflows/design-review.md +171 -0
  77. package/docs/readmes/features/workflows/design.md +169 -0
  78. package/docs/readmes/features/workflows/discover.md +162 -0
  79. package/docs/readmes/features/workflows/execute.md +173 -0
  80. package/docs/readmes/features/workflows/learn.md +167 -0
  81. package/docs/readmes/features/workflows/plan-review.md +165 -0
  82. package/docs/readmes/features/workflows/plan.md +170 -0
  83. package/docs/readmes/features/workflows/prepare-next.md +167 -0
  84. package/docs/readmes/features/workflows/review.md +169 -0
  85. package/docs/readmes/features/workflows/run-audit.md +191 -0
  86. package/docs/readmes/features/workflows/spec-challenge.md +159 -0
  87. package/docs/readmes/features/workflows/specify.md +160 -0
  88. package/docs/readmes/features/workflows/verify.md +177 -0
  89. package/docs/readmes/packages/README.md +50 -0
  90. package/docs/readmes/packages/ajv.md +117 -0
  91. package/docs/readmes/packages/context-mode.md +118 -0
  92. package/docs/readmes/packages/gray-matter.md +116 -0
  93. package/docs/readmes/packages/node-test.md +137 -0
  94. package/docs/readmes/packages/yaml.md +112 -0
  95. package/docs/reference/configuration-reference.md +159 -0
  96. package/docs/reference/expertise-index.md +52 -0
  97. package/docs/reference/git-flow.md +43 -0
  98. package/docs/reference/hooks.md +87 -0
  99. package/docs/reference/host-exports.md +50 -0
  100. package/docs/reference/launch-checklist.md +172 -0
  101. package/docs/reference/marketplace-listings.md +76 -0
  102. package/docs/reference/release-process.md +34 -0
  103. package/docs/reference/roles-reference.md +77 -0
  104. package/docs/reference/skills.md +33 -0
  105. package/docs/reference/templates.md +29 -0
  106. package/docs/reference/tooling-cli.md +94 -0
  107. package/docs/truth-claims.yaml +222 -0
  108. package/expertise/PROGRESS.md +63 -0
  109. package/expertise/README.md +18 -0
  110. package/expertise/antipatterns/PROGRESS.md +56 -0
  111. package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
  112. package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
  113. package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
  114. package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
  115. package/expertise/antipatterns/backend/index.md +24 -0
  116. package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
  117. package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
  118. package/expertise/antipatterns/code/async-antipatterns.md +622 -0
  119. package/expertise/antipatterns/code/code-smells.md +1186 -0
  120. package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
  121. package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
  122. package/expertise/antipatterns/code/index.md +27 -0
  123. package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
  124. package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
  125. package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
  126. package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
  127. package/expertise/antipatterns/design/dark-patterns.md +1121 -0
  128. package/expertise/antipatterns/design/index.md +22 -0
  129. package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
  130. package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
  131. package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
  132. package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
  133. package/expertise/antipatterns/frontend/index.md +23 -0
  134. package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
  135. package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
  136. package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
  137. package/expertise/antipatterns/index.md +31 -0
  138. package/expertise/antipatterns/performance/index.md +20 -0
  139. package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
  140. package/expertise/antipatterns/performance/premature-optimization.md +623 -0
  141. package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
  142. package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
  143. package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
  144. package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
  145. package/expertise/antipatterns/process/index.md +23 -0
  146. package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
  147. package/expertise/antipatterns/security/index.md +20 -0
  148. package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
  149. package/expertise/antipatterns/security/security-theater.md +843 -0
  150. package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
  151. package/expertise/architecture/PROGRESS.md +70 -0
  152. package/expertise/architecture/data/caching-architecture.md +671 -0
  153. package/expertise/architecture/data/data-consistency.md +574 -0
  154. package/expertise/architecture/data/data-modeling.md +536 -0
  155. package/expertise/architecture/data/event-streams-and-queues.md +634 -0
  156. package/expertise/architecture/data/index.md +25 -0
  157. package/expertise/architecture/data/search-architecture.md +663 -0
  158. package/expertise/architecture/data/sql-vs-nosql.md +708 -0
  159. package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
  160. package/expertise/architecture/decisions/build-vs-buy.md +616 -0
  161. package/expertise/architecture/decisions/index.md +23 -0
  162. package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
  163. package/expertise/architecture/decisions/technology-selection.md +616 -0
  164. package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
  165. package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
  166. package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
  167. package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
  168. package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
  169. package/expertise/architecture/distributed/index.md +25 -0
  170. package/expertise/architecture/distributed/saga-pattern.md +797 -0
  171. package/expertise/architecture/foundations/architectural-thinking.md +460 -0
  172. package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
  173. package/expertise/architecture/foundations/design-principles-solid.md +649 -0
  174. package/expertise/architecture/foundations/domain-driven-design.md +719 -0
  175. package/expertise/architecture/foundations/index.md +25 -0
  176. package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
  177. package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
  178. package/expertise/architecture/index.md +34 -0
  179. package/expertise/architecture/integration/api-design-graphql.md +638 -0
  180. package/expertise/architecture/integration/api-design-grpc.md +804 -0
  181. package/expertise/architecture/integration/api-design-rest.md +892 -0
  182. package/expertise/architecture/integration/index.md +25 -0
  183. package/expertise/architecture/integration/third-party-integration.md +795 -0
  184. package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
  185. package/expertise/architecture/integration/websockets-realtime.md +791 -0
  186. package/expertise/architecture/mobile-architecture/index.md +22 -0
  187. package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
  188. package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
  189. package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
  190. package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
  191. package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
  192. package/expertise/architecture/patterns/event-driven.md +797 -0
  193. package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
  194. package/expertise/architecture/patterns/index.md +27 -0
  195. package/expertise/architecture/patterns/layered-architecture.md +736 -0
  196. package/expertise/architecture/patterns/microservices.md +753 -0
  197. package/expertise/architecture/patterns/modular-monolith.md +692 -0
  198. package/expertise/architecture/patterns/monolith.md +626 -0
  199. package/expertise/architecture/patterns/plugin-architecture.md +735 -0
  200. package/expertise/architecture/patterns/serverless.md +780 -0
  201. package/expertise/architecture/scaling/database-scaling.md +615 -0
  202. package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
  203. package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
  204. package/expertise/architecture/scaling/index.md +24 -0
  205. package/expertise/architecture/scaling/multi-tenancy.md +800 -0
  206. package/expertise/architecture/scaling/stateless-design.md +787 -0
  207. package/expertise/backend/embedded-firmware.md +625 -0
  208. package/expertise/backend/go.md +853 -0
  209. package/expertise/backend/index.md +24 -0
  210. package/expertise/backend/java-spring.md +448 -0
  211. package/expertise/backend/node-typescript.md +625 -0
  212. package/expertise/backend/python-fastapi.md +724 -0
  213. package/expertise/backend/rust.md +458 -0
  214. package/expertise/backend/solidity.md +711 -0
  215. package/expertise/composition-map.yaml +443 -0
  216. package/expertise/content/foundations/content-modeling.md +395 -0
  217. package/expertise/content/foundations/editorial-standards.md +449 -0
  218. package/expertise/content/foundations/index.md +24 -0
  219. package/expertise/content/foundations/microcopy.md +455 -0
  220. package/expertise/content/foundations/terminology-governance.md +509 -0
  221. package/expertise/content/index.md +34 -0
  222. package/expertise/content/patterns/accessibility-copy.md +518 -0
  223. package/expertise/content/patterns/index.md +24 -0
  224. package/expertise/content/patterns/notification-content.md +433 -0
  225. package/expertise/content/patterns/sample-content.md +486 -0
  226. package/expertise/content/patterns/state-copy.md +439 -0
  227. package/expertise/design/PROGRESS.md +58 -0
  228. package/expertise/design/disciplines/dark-mode-theming.md +577 -0
  229. package/expertise/design/disciplines/design-systems.md +595 -0
  230. package/expertise/design/disciplines/index.md +25 -0
  231. package/expertise/design/disciplines/information-architecture.md +800 -0
  232. package/expertise/design/disciplines/interaction-design.md +788 -0
  233. package/expertise/design/disciplines/responsive-design.md +552 -0
  234. package/expertise/design/disciplines/usability-testing.md +516 -0
  235. package/expertise/design/disciplines/user-research.md +792 -0
  236. package/expertise/design/foundations/accessibility-design.md +796 -0
  237. package/expertise/design/foundations/color-theory.md +797 -0
  238. package/expertise/design/foundations/iconography.md +795 -0
  239. package/expertise/design/foundations/index.md +26 -0
  240. package/expertise/design/foundations/motion-and-animation.md +653 -0
  241. package/expertise/design/foundations/rtl-design.md +585 -0
  242. package/expertise/design/foundations/spacing-and-layout.md +607 -0
  243. package/expertise/design/foundations/typography.md +800 -0
  244. package/expertise/design/foundations/visual-hierarchy.md +761 -0
  245. package/expertise/design/index.md +32 -0
  246. package/expertise/design/patterns/authentication-flows.md +474 -0
  247. package/expertise/design/patterns/content-consumption.md +789 -0
  248. package/expertise/design/patterns/data-display.md +618 -0
  249. package/expertise/design/patterns/e-commerce.md +1494 -0
  250. package/expertise/design/patterns/feedback-and-states.md +642 -0
  251. package/expertise/design/patterns/forms-and-input.md +819 -0
  252. package/expertise/design/patterns/gamification.md +801 -0
  253. package/expertise/design/patterns/index.md +31 -0
  254. package/expertise/design/patterns/microinteractions.md +449 -0
  255. package/expertise/design/patterns/navigation.md +800 -0
  256. package/expertise/design/patterns/notifications.md +705 -0
  257. package/expertise/design/patterns/onboarding.md +700 -0
  258. package/expertise/design/patterns/search-and-filter.md +601 -0
  259. package/expertise/design/patterns/settings-and-preferences.md +768 -0
  260. package/expertise/design/patterns/social-and-community.md +748 -0
  261. package/expertise/design/platforms/desktop-native.md +612 -0
  262. package/expertise/design/platforms/index.md +25 -0
  263. package/expertise/design/platforms/mobile-android.md +825 -0
  264. package/expertise/design/platforms/mobile-cross-platform.md +983 -0
  265. package/expertise/design/platforms/mobile-ios.md +699 -0
  266. package/expertise/design/platforms/tablet.md +794 -0
  267. package/expertise/design/platforms/web-dashboard.md +790 -0
  268. package/expertise/design/platforms/web-responsive.md +550 -0
  269. package/expertise/design/psychology/behavioral-nudges.md +449 -0
  270. package/expertise/design/psychology/cognitive-load.md +1191 -0
  271. package/expertise/design/psychology/error-psychology.md +778 -0
  272. package/expertise/design/psychology/index.md +22 -0
  273. package/expertise/design/psychology/persuasive-design.md +736 -0
  274. package/expertise/design/psychology/user-mental-models.md +623 -0
  275. package/expertise/design/tooling/open-pencil.md +266 -0
  276. package/expertise/frontend/angular.md +1073 -0
  277. package/expertise/frontend/desktop-electron.md +546 -0
  278. package/expertise/frontend/flutter.md +782 -0
  279. package/expertise/frontend/index.md +27 -0
  280. package/expertise/frontend/native-android.md +409 -0
  281. package/expertise/frontend/native-ios.md +490 -0
  282. package/expertise/frontend/react-native.md +1160 -0
  283. package/expertise/frontend/react.md +808 -0
  284. package/expertise/frontend/vue.md +1089 -0
  285. package/expertise/humanize/domain-rules-code.md +79 -0
  286. package/expertise/humanize/domain-rules-content.md +67 -0
  287. package/expertise/humanize/domain-rules-technical-docs.md +56 -0
  288. package/expertise/humanize/index.md +35 -0
  289. package/expertise/humanize/self-audit-checklist.md +87 -0
  290. package/expertise/humanize/sentence-patterns.md +218 -0
  291. package/expertise/humanize/vocabulary-blacklist.md +105 -0
  292. package/expertise/i18n/PROGRESS.md +65 -0
  293. package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
  294. package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
  295. package/expertise/i18n/advanced/complex-scripts.md +30 -0
  296. package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
  297. package/expertise/i18n/advanced/testing-i18n.md +28 -0
  298. package/expertise/i18n/content/content-adaptation.md +23 -0
  299. package/expertise/i18n/content/locale-specific-formatting.md +23 -0
  300. package/expertise/i18n/content/machine-translation-integration.md +28 -0
  301. package/expertise/i18n/content/translation-management.md +29 -0
  302. package/expertise/i18n/foundations/date-time-calendars.md +67 -0
  303. package/expertise/i18n/foundations/i18n-architecture.md +272 -0
  304. package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
  305. package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
  306. package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
  307. package/expertise/i18n/foundations/string-externalization.md +236 -0
  308. package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
  309. package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
  310. package/expertise/i18n/index.md +38 -0
  311. package/expertise/i18n/platform/backend-i18n.md +31 -0
  312. package/expertise/i18n/platform/flutter-i18n.md +148 -0
  313. package/expertise/i18n/platform/native-android-i18n.md +36 -0
  314. package/expertise/i18n/platform/native-ios-i18n.md +36 -0
  315. package/expertise/i18n/platform/react-i18n.md +103 -0
  316. package/expertise/i18n/platform/web-css-i18n.md +81 -0
  317. package/expertise/i18n/rtl/arabic-specific.md +175 -0
  318. package/expertise/i18n/rtl/hebrew-specific.md +149 -0
  319. package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
  320. package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
  321. package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
  322. package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
  323. package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
  324. package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
  325. package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
  326. package/expertise/i18n/rtl/rtl-typography.md +160 -0
  327. package/expertise/index.md +113 -0
  328. package/expertise/index.yaml +216 -0
  329. package/expertise/infrastructure/cloud-aws.md +597 -0
  330. package/expertise/infrastructure/cloud-gcp.md +599 -0
  331. package/expertise/infrastructure/cybersecurity.md +816 -0
  332. package/expertise/infrastructure/database-mongodb.md +447 -0
  333. package/expertise/infrastructure/database-postgres.md +400 -0
  334. package/expertise/infrastructure/devops-cicd.md +787 -0
  335. package/expertise/infrastructure/index.md +27 -0
  336. package/expertise/performance/PROGRESS.md +50 -0
  337. package/expertise/performance/backend/api-latency.md +1204 -0
  338. package/expertise/performance/backend/background-jobs.md +506 -0
  339. package/expertise/performance/backend/connection-pooling.md +1209 -0
  340. package/expertise/performance/backend/database-query-optimization.md +515 -0
  341. package/expertise/performance/backend/index.md +23 -0
  342. package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
  343. package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
  344. package/expertise/performance/foundations/caching-strategies.md +489 -0
  345. package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
  346. package/expertise/performance/foundations/index.md +24 -0
  347. package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
  348. package/expertise/performance/foundations/memory-management.md +964 -0
  349. package/expertise/performance/foundations/performance-budgets.md +1314 -0
  350. package/expertise/performance/index.md +31 -0
  351. package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
  352. package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
  353. package/expertise/performance/infrastructure/index.md +22 -0
  354. package/expertise/performance/infrastructure/load-balancing.md +1081 -0
  355. package/expertise/performance/infrastructure/observability.md +1079 -0
  356. package/expertise/performance/mobile/index.md +23 -0
  357. package/expertise/performance/mobile/mobile-animations.md +544 -0
  358. package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
  359. package/expertise/performance/mobile/mobile-network.md +452 -0
  360. package/expertise/performance/mobile/mobile-rendering.md +599 -0
  361. package/expertise/performance/mobile/mobile-startup-time.md +505 -0
  362. package/expertise/performance/platform-specific/flutter-performance.md +647 -0
  363. package/expertise/performance/platform-specific/index.md +22 -0
  364. package/expertise/performance/platform-specific/node-performance.md +1307 -0
  365. package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
  366. package/expertise/performance/platform-specific/react-performance.md +1403 -0
  367. package/expertise/performance/web/bundle-optimization.md +1239 -0
  368. package/expertise/performance/web/image-and-media.md +636 -0
  369. package/expertise/performance/web/index.md +24 -0
  370. package/expertise/performance/web/network-optimization.md +1133 -0
  371. package/expertise/performance/web/rendering-performance.md +1098 -0
  372. package/expertise/performance/web/ssr-and-hydration.md +918 -0
  373. package/expertise/performance/web/web-vitals.md +1374 -0
  374. package/expertise/quality/accessibility.md +985 -0
  375. package/expertise/quality/evidence-based-verification.md +499 -0
  376. package/expertise/quality/index.md +24 -0
  377. package/expertise/quality/ml-model-audit.md +614 -0
  378. package/expertise/quality/performance.md +600 -0
  379. package/expertise/quality/testing-api.md +891 -0
  380. package/expertise/quality/testing-mobile.md +496 -0
  381. package/expertise/quality/testing-web.md +849 -0
  382. package/expertise/security/PROGRESS.md +54 -0
  383. package/expertise/security/agentic-identity.md +540 -0
  384. package/expertise/security/compliance-frameworks.md +601 -0
  385. package/expertise/security/data/data-encryption.md +364 -0
  386. package/expertise/security/data/data-privacy-gdpr.md +692 -0
  387. package/expertise/security/data/database-security.md +1171 -0
  388. package/expertise/security/data/index.md +22 -0
  389. package/expertise/security/data/pii-handling.md +531 -0
  390. package/expertise/security/foundations/authentication.md +1041 -0
  391. package/expertise/security/foundations/authorization.md +603 -0
  392. package/expertise/security/foundations/cryptography.md +1001 -0
  393. package/expertise/security/foundations/index.md +25 -0
  394. package/expertise/security/foundations/owasp-top-10.md +1354 -0
  395. package/expertise/security/foundations/secrets-management.md +1217 -0
  396. package/expertise/security/foundations/secure-sdlc.md +700 -0
  397. package/expertise/security/foundations/supply-chain-security.md +698 -0
  398. package/expertise/security/index.md +31 -0
  399. package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
  400. package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
  401. package/expertise/security/infrastructure/container-security.md +721 -0
  402. package/expertise/security/infrastructure/incident-response.md +1295 -0
  403. package/expertise/security/infrastructure/index.md +24 -0
  404. package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
  405. package/expertise/security/infrastructure/network-security.md +1337 -0
  406. package/expertise/security/mobile/index.md +23 -0
  407. package/expertise/security/mobile/mobile-android-security.md +1218 -0
  408. package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
  409. package/expertise/security/mobile/mobile-data-storage.md +1265 -0
  410. package/expertise/security/mobile/mobile-ios-security.md +1401 -0
  411. package/expertise/security/mobile/mobile-network-security.md +1520 -0
  412. package/expertise/security/smart-contract-security.md +594 -0
  413. package/expertise/security/testing/index.md +22 -0
  414. package/expertise/security/testing/penetration-testing.md +1258 -0
  415. package/expertise/security/testing/security-code-review.md +1765 -0
  416. package/expertise/security/testing/threat-modeling.md +1074 -0
  417. package/expertise/security/testing/vulnerability-scanning.md +1062 -0
  418. package/expertise/security/web/api-security.md +586 -0
  419. package/expertise/security/web/cors-and-headers.md +433 -0
  420. package/expertise/security/web/csrf.md +562 -0
  421. package/expertise/security/web/file-upload.md +1477 -0
  422. package/expertise/security/web/index.md +25 -0
  423. package/expertise/security/web/injection.md +1375 -0
  424. package/expertise/security/web/session-management.md +1101 -0
  425. package/expertise/security/web/xss.md +1158 -0
  426. package/exports/README.md +17 -0
  427. package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
  428. package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
  429. package/exports/hosts/claude/.claude/agents/designer.md +55 -0
  430. package/exports/hosts/claude/.claude/agents/executor.md +55 -0
  431. package/exports/hosts/claude/.claude/agents/learner.md +51 -0
  432. package/exports/hosts/claude/.claude/agents/planner.md +53 -0
  433. package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
  434. package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
  435. package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
  436. package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
  437. package/exports/hosts/claude/.claude/commands/author.md +42 -0
  438. package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
  439. package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
  440. package/exports/hosts/claude/.claude/commands/design.md +44 -0
  441. package/exports/hosts/claude/.claude/commands/discover.md +37 -0
  442. package/exports/hosts/claude/.claude/commands/execute.md +48 -0
  443. package/exports/hosts/claude/.claude/commands/learn.md +38 -0
  444. package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
  445. package/exports/hosts/claude/.claude/commands/plan.md +39 -0
  446. package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
  447. package/exports/hosts/claude/.claude/commands/review.md +40 -0
  448. package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
  449. package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
  450. package/exports/hosts/claude/.claude/commands/specify.md +38 -0
  451. package/exports/hosts/claude/.claude/commands/verify.md +37 -0
  452. package/exports/hosts/claude/.claude/settings.json +34 -0
  453. package/exports/hosts/claude/CLAUDE.md +19 -0
  454. package/exports/hosts/claude/export.manifest.json +38 -0
  455. package/exports/hosts/claude/host-package.json +67 -0
  456. package/exports/hosts/codex/AGENTS.md +19 -0
  457. package/exports/hosts/codex/export.manifest.json +38 -0
  458. package/exports/hosts/codex/host-package.json +41 -0
  459. package/exports/hosts/cursor/.cursor/hooks.json +16 -0
  460. package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
  461. package/exports/hosts/cursor/export.manifest.json +38 -0
  462. package/exports/hosts/cursor/host-package.json +42 -0
  463. package/exports/hosts/gemini/GEMINI.md +19 -0
  464. package/exports/hosts/gemini/export.manifest.json +38 -0
  465. package/exports/hosts/gemini/host-package.json +41 -0
  466. package/hooks/README.md +18 -0
  467. package/hooks/definitions/loop_cap_guard.yaml +21 -0
  468. package/hooks/definitions/post_tool_capture.yaml +24 -0
  469. package/hooks/definitions/pre_compact_summary.yaml +19 -0
  470. package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
  471. package/hooks/definitions/protected_path_write_guard.yaml +19 -0
  472. package/hooks/definitions/session_start.yaml +19 -0
  473. package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
  474. package/hooks/loop-cap-guard +17 -0
  475. package/hooks/post-tool-lint +36 -0
  476. package/hooks/protected-path-write-guard +17 -0
  477. package/hooks/session-start +41 -0
  478. package/llms-full.txt +2355 -0
  479. package/llms.txt +43 -0
  480. package/package.json +79 -0
  481. package/roles/README.md +20 -0
  482. package/roles/clarifier.md +42 -0
  483. package/roles/content-author.md +63 -0
  484. package/roles/designer.md +55 -0
  485. package/roles/executor.md +55 -0
  486. package/roles/learner.md +51 -0
  487. package/roles/planner.md +53 -0
  488. package/roles/researcher.md +43 -0
  489. package/roles/reviewer.md +54 -0
  490. package/roles/specifier.md +47 -0
  491. package/roles/verifier.md +71 -0
  492. package/schemas/README.md +24 -0
  493. package/schemas/accepted-learning.schema.json +20 -0
  494. package/schemas/author-artifact.schema.json +156 -0
  495. package/schemas/clarification.schema.json +19 -0
  496. package/schemas/design-artifact.schema.json +80 -0
  497. package/schemas/docs-claim.schema.json +18 -0
  498. package/schemas/export-manifest.schema.json +20 -0
  499. package/schemas/hook.schema.json +67 -0
  500. package/schemas/host-export-package.schema.json +18 -0
  501. package/schemas/implementation-plan.schema.json +19 -0
  502. package/schemas/proposed-learning.schema.json +19 -0
  503. package/schemas/research.schema.json +18 -0
  504. package/schemas/review.schema.json +29 -0
  505. package/schemas/run-manifest.schema.json +18 -0
  506. package/schemas/spec-challenge.schema.json +18 -0
  507. package/schemas/spec.schema.json +20 -0
  508. package/schemas/usage.schema.json +102 -0
  509. package/schemas/verification-proof.schema.json +29 -0
  510. package/schemas/wazir-manifest.schema.json +173 -0
  511. package/skills/README.md +40 -0
  512. package/skills/brainstorming/SKILL.md +77 -0
  513. package/skills/debugging/SKILL.md +50 -0
  514. package/skills/design/SKILL.md +61 -0
  515. package/skills/dispatching-parallel-agents/SKILL.md +128 -0
  516. package/skills/executing-plans/SKILL.md +70 -0
  517. package/skills/finishing-a-development-branch/SKILL.md +169 -0
  518. package/skills/humanize/SKILL.md +123 -0
  519. package/skills/init-pipeline/SKILL.md +124 -0
  520. package/skills/prepare-next/SKILL.md +20 -0
  521. package/skills/receiving-code-review/SKILL.md +123 -0
  522. package/skills/requesting-code-review/SKILL.md +105 -0
  523. package/skills/requesting-code-review/code-reviewer.md +108 -0
  524. package/skills/run-audit/SKILL.md +197 -0
  525. package/skills/scan-project/SKILL.md +41 -0
  526. package/skills/self-audit/SKILL.md +153 -0
  527. package/skills/subagent-driven-development/SKILL.md +154 -0
  528. package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
  529. package/skills/subagent-driven-development/implementer-prompt.md +102 -0
  530. package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
  531. package/skills/tdd/SKILL.md +23 -0
  532. package/skills/using-git-worktrees/SKILL.md +163 -0
  533. package/skills/using-skills/SKILL.md +95 -0
  534. package/skills/verification/SKILL.md +22 -0
  535. package/skills/wazir/SKILL.md +463 -0
  536. package/skills/writing-plans/SKILL.md +30 -0
  537. package/skills/writing-skills/SKILL.md +157 -0
  538. package/skills/writing-skills/anthropic-best-practices.md +122 -0
  539. package/skills/writing-skills/persuasion-principles.md +50 -0
  540. package/templates/README.md +20 -0
  541. package/templates/artifacts/README.md +10 -0
  542. package/templates/artifacts/accepted-learning.md +19 -0
  543. package/templates/artifacts/accepted-learning.template.json +12 -0
  544. package/templates/artifacts/author.md +74 -0
  545. package/templates/artifacts/author.template.json +19 -0
  546. package/templates/artifacts/clarification.md +21 -0
  547. package/templates/artifacts/clarification.template.json +12 -0
  548. package/templates/artifacts/execute-notes.md +19 -0
  549. package/templates/artifacts/implementation-plan.md +21 -0
  550. package/templates/artifacts/implementation-plan.template.json +11 -0
  551. package/templates/artifacts/learning-proposal.md +19 -0
  552. package/templates/artifacts/next-run-handoff.md +21 -0
  553. package/templates/artifacts/plan-review.md +19 -0
  554. package/templates/artifacts/proposed-learning.template.json +12 -0
  555. package/templates/artifacts/research.md +21 -0
  556. package/templates/artifacts/research.template.json +12 -0
  557. package/templates/artifacts/review-findings.md +19 -0
  558. package/templates/artifacts/review.template.json +11 -0
  559. package/templates/artifacts/run-manifest.template.json +8 -0
  560. package/templates/artifacts/spec-challenge.md +19 -0
  561. package/templates/artifacts/spec-challenge.template.json +11 -0
  562. package/templates/artifacts/spec.md +21 -0
  563. package/templates/artifacts/spec.template.json +12 -0
  564. package/templates/artifacts/verification-proof.md +19 -0
  565. package/templates/artifacts/verification-proof.template.json +11 -0
  566. package/templates/examples/accepted-learning.example.json +14 -0
  567. package/templates/examples/author.example.json +152 -0
  568. package/templates/examples/clarification.example.json +15 -0
  569. package/templates/examples/docs-claim.example.json +8 -0
  570. package/templates/examples/export-manifest.example.json +7 -0
  571. package/templates/examples/host-export-package.example.json +11 -0
  572. package/templates/examples/implementation-plan.example.json +17 -0
  573. package/templates/examples/proposed-learning.example.json +13 -0
  574. package/templates/examples/research.example.json +15 -0
  575. package/templates/examples/research.example.md +6 -0
  576. package/templates/examples/review.example.json +17 -0
  577. package/templates/examples/run-manifest.example.json +9 -0
  578. package/templates/examples/spec-challenge.example.json +14 -0
  579. package/templates/examples/spec.example.json +21 -0
  580. package/templates/examples/verification-proof.example.json +21 -0
  581. package/templates/examples/wazir-manifest.example.yaml +65 -0
  582. package/templates/task-definition-schema.md +99 -0
  583. package/tooling/README.md +20 -0
  584. package/tooling/src/adapters/context-mode.js +50 -0
  585. package/tooling/src/capture/command.js +376 -0
  586. package/tooling/src/capture/store.js +99 -0
  587. package/tooling/src/capture/usage.js +270 -0
  588. package/tooling/src/checks/branches.js +50 -0
  589. package/tooling/src/checks/brand-truth.js +110 -0
  590. package/tooling/src/checks/changelog.js +231 -0
  591. package/tooling/src/checks/command-registry.js +36 -0
  592. package/tooling/src/checks/commits.js +102 -0
  593. package/tooling/src/checks/docs-drift.js +103 -0
  594. package/tooling/src/checks/docs-truth.js +201 -0
  595. package/tooling/src/checks/runtime-surface.js +156 -0
  596. package/tooling/src/cli.js +116 -0
  597. package/tooling/src/command-options.js +56 -0
  598. package/tooling/src/commands/validate.js +320 -0
  599. package/tooling/src/doctor/command.js +91 -0
  600. package/tooling/src/export/command.js +77 -0
  601. package/tooling/src/export/compiler.js +498 -0
  602. package/tooling/src/guards/loop-cap-guard.js +52 -0
  603. package/tooling/src/guards/protected-path-write-guard.js +67 -0
  604. package/tooling/src/index/command.js +152 -0
  605. package/tooling/src/index/storage.js +1061 -0
  606. package/tooling/src/index/summarizers.js +261 -0
  607. package/tooling/src/loaders.js +18 -0
  608. package/tooling/src/project-root.js +22 -0
  609. package/tooling/src/recall/command.js +225 -0
  610. package/tooling/src/schema-validator.js +30 -0
  611. package/tooling/src/state-root.js +40 -0
  612. package/tooling/src/status/command.js +71 -0
  613. package/wazir.manifest.yaml +135 -0
  614. package/workflows/README.md +19 -0
  615. package/workflows/author.md +42 -0
  616. package/workflows/clarify.md +38 -0
  617. package/workflows/design-review.md +46 -0
  618. package/workflows/design.md +44 -0
  619. package/workflows/discover.md +37 -0
  620. package/workflows/execute.md +48 -0
  621. package/workflows/learn.md +38 -0
  622. package/workflows/plan-review.md +42 -0
  623. package/workflows/plan.md +39 -0
  624. package/workflows/prepare-next.md +37 -0
  625. package/workflows/review.md +40 -0
  626. package/workflows/run-audit.md +41 -0
  627. package/workflows/spec-challenge.md +41 -0
  628. package/workflows/specify.md +38 -0
  629. package/workflows/verify.md +37 -0
@@ -0,0 +1,562 @@
1
+ # Cross-Site Request Forgery (CSRF) — Security Expertise Module
2
+
3
+ > **CWE-352** | OWASP Top 10 2021: A01 Broken Access Control
4
+ > Last updated: 2026-03-08
5
+ > Sources: OWASP CSRF Prevention Cheat Sheet, PortSwigger Web Security Academy,
6
+ > MITRE CWE, MDN Web Security, OWASP ASVS 5.0
7
+
8
+ ---
9
+
10
+ ## 1. Threat Landscape
11
+
12
+ ### 1.1 How CSRF Works
13
+
14
+ CSRF forces an authenticated user's browser to send a forged HTTP request — including
15
+ session cookies — to a vulnerable web application. The attacker tricks the browser into
16
+ making a state-changing request indistinguishable from a legitimate one.
17
+
18
+ **Attack flow:** Victim authenticates and receives a session cookie. Victim visits a
19
+ malicious page. That page submits a hidden form/fetch to the target site. The browser
20
+ attaches the session cookie automatically. The server processes it as legitimate.
21
+
22
+ Unlike XSS, CSRF does not inject code into the target. The attacker never sees the
23
+ response — only the side effect (state change) matters.
24
+
25
+ ### 1.2 Real-World CSRF Exploits
26
+
27
+ | Year | Target | Impact |
28
+ |------|--------|--------|
29
+ | 2006 | Netflix | Account takeover — change shipping address, alter login credentials |
30
+ | 2007 | Gmail | Filter injection silently forwarding all email to attacker |
31
+ | 2008 | ING Direct | Unauthorized money transfers from authenticated banking sessions over SSL |
32
+ | 2008 | YouTube | Nearly all user actions exploitable — favorites, messages, flagging |
33
+ | 2012 | Consumer routers | Mass DNS setting changes redirecting to phishing sites |
34
+ | 2019 | WordPress plugins | Admin action exposure via CSRF enabling privilege escalation |
35
+ | 2025 | WordPress plugin (CVE) | CSRF flaw exploited in the wild for unauthorized actions |
36
+ | 2025 | Global retailer | Third-party pixel exfiltrated CSRF and auth tokens to remote servers |
37
+
38
+ ### 1.3 CSRF in Financial Applications
39
+
40
+ Financial apps are high-value targets: state changes carry monetary impact (wire
41
+ transfers, beneficiary additions); regulatory exposure (PCI-DSS violations); long-lived
42
+ sessions widen the attack window; multi-step workflows can be chained with social
43
+ engineering when confirmation steps lack independent authentication.
44
+
45
+ ### 1.4 Trends: SameSite Cookies and Evolving Risk
46
+
47
+ Browsers now default to `SameSite=Lax` (Chrome since 2020, Firefox/Edge followed),
48
+ significantly reducing POST-based CSRF. However, risk persists:
49
+
50
+ - GET requests with side effects remain exploitable under Lax.
51
+ - Bypass techniques exist: method override, sibling domain attacks, client-side
52
+ redirects, 2-minute cookie refresh window.
53
+ - Legacy apps explicitly setting `SameSite=None` re-enable full CSRF exposure.
54
+ - Mobile WebViews may not enforce SameSite consistently.
55
+
56
+ ### 1.5 CSRF in APIs
57
+
58
+ - **Bearer token auth** (Authorization header) is inherently immune — browser does not
59
+ auto-attach the token.
60
+ - **Cookie-authenticated APIs** require explicit CSRF protection.
61
+ - **GraphQL** accepting mutations via GET is especially vulnerable.
62
+ - **WebSocket** handshakes carry cookies without CORS preflight.
63
+
64
+ ---
65
+
66
+ ## 2. Core Security Principles
67
+
68
+ ### 2.1 Synchronizer Token Pattern (Stateful)
69
+
70
+ Server generates a CSPRNG token, stores it in the session, embeds it in forms/headers.
71
+ Every state-changing request must include the token; server validates against session.
72
+
73
+ **Strengths:** Strong, well-understood, framework-supported.
74
+ **Weaknesses:** Requires server-side session state.
75
+
76
+ ### 2.2 Double-Submit Cookie Pattern (Stateless)
77
+
78
+ Server sets a random value in both a cookie and a request parameter. Server verifies
79
+ they match. Attacker cannot read the cookie cross-origin, so cannot forge the parameter.
80
+
81
+ **Signed variant (recommended):** HMAC-SHA256 with server secret, binding to session ID:
82
+ ```
83
+ token = nonce + "." + HMAC-SHA256(secret, session_id + nonce)
84
+ ```
85
+ Without session binding, the pattern remains vulnerable to cookie injection attacks.
86
+
87
+ ### 2.3 SameSite Cookie Attribute
88
+
89
+ | Value | Behavior | CSRF Protection |
90
+ |-------|----------|-----------------|
91
+ | `Strict` | Never sent cross-site | Strong, but breaks legitimate cross-site nav |
92
+ | `Lax` | Sent on top-level GET only | Good default; blocks POST-based CSRF |
93
+ | `None` | Always sent (requires `Secure`) | No protection |
94
+
95
+ Use `SameSite=Lax` as baseline. Never rely on it as sole defense.
96
+
97
+ ### 2.4 Origin/Referer Validation
98
+
99
+ Check `Origin` or `Referer` on incoming requests; reject unexpected origins. Use as
100
+ defense-in-depth only — headers can be stripped by privacy extensions, absent on some
101
+ requests, or missing from older clients.
102
+
103
+ ### 2.5 Custom Request Headers
104
+
105
+ Require a custom header (e.g., `X-Requested-With`) on state-changing requests. Cross-
106
+ origin requests with custom headers trigger CORS preflight, which the attacker's domain
107
+ fails. Effective only when CORS is correctly configured.
108
+
109
+ ### 2.6 Fetch Metadata Headers
110
+
111
+ Modern browsers send `Sec-Fetch-Site` (`same-origin`/`same-site`/`cross-site`/`none`),
112
+ `Sec-Fetch-Mode`, and `Sec-Fetch-Dest`. Servers can implement a Resource Isolation
113
+ Policy rejecting cross-site state-changing requests. Supported 97%+ of browsers (all
114
+ major browsers since March 2023).
115
+
116
+ ### 2.7 Defense-in-Depth Strategy
117
+
118
+ 1. **Primary:** CSRF tokens (synchronizer or signed double-submit)
119
+ 2. **Secondary:** `SameSite=Lax` or `Strict` cookies
120
+ 3. **Tertiary:** Origin/Referer validation, Fetch Metadata checks
121
+ 4. **Foundation:** Eliminate XSS — XSS defeats all CSRF defenses
122
+
123
+ ---
124
+
125
+ ## 3. Implementation Patterns
126
+
127
+ ### 3.1 CSRF Token Requirements (OWASP)
128
+
129
+ - At least 128 bits of entropy (32 hex chars), generated by CSPRNG
130
+ - Unique per user session; transmitted via hidden form field or custom header, never URL
131
+ - Validate with constant-time comparison; reject missing tokens (not treat as valid)
132
+ - Regenerate on authentication; invalidate on logout
133
+
134
+ ### 3.2 SameSite Cookie Configuration
135
+
136
+ ```
137
+ Set-Cookie: session=abc123; Secure; HttpOnly; SameSite=Lax; Path=/; Max-Age=3600
138
+ ```
139
+ Always pair `SameSite=None` with `Secure`. Audit all cookies for appropriate SameSite.
140
+
141
+ ### 3.3 Framework Built-in CSRF Protection
142
+
143
+ **Express.js** — `csurf` deprecated (Sept 2022, security issues). Use `csrf-csrf`:
144
+ ```typescript
145
+ import { doubleCsrf } from "csrf-csrf";
146
+ const { doubleCsrfProtection, generateToken } = doubleCsrf({
147
+ getSecret: () => process.env.CSRF_SECRET!,
148
+ cookieName: "__Host-csrf",
149
+ cookieOptions: { httpOnly: true, sameSite: "lax", secure: true, path: "/" },
150
+ getTokenFromRequest: (req) => req.headers["x-csrf-token"] as string,
151
+ });
152
+ app.use(doubleCsrfProtection);
153
+ ```
154
+
155
+ **Django** — `CsrfViewMiddleware` enabled by default. Uses double-submit cookie with
156
+ HMAC masking (BREACH-resistant). Configure: `CSRF_COOKIE_SECURE = True`,
157
+ `CSRF_COOKIE_SAMESITE = "Lax"`, `CSRF_TRUSTED_ORIGINS = ["https://app.example.com"]`.
158
+
159
+ **Spring Security** — CSRF enabled by default via `CsrfFilter`. Uses Synchronizer Token
160
+ with `HttpSessionCsrfTokenRepository`. For SPAs, use `CookieCsrfTokenRepository`:
161
+ ```java
162
+ http.csrf(csrf -> csrf
163
+ .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()));
164
+ ```
165
+
166
+ **Rails** — `protect_from_forgery` enabled by default. Synchronizer Token in session.
167
+ **Laravel** — `VerifyCsrfToken` middleware enabled by default. Synchronizer Token.
168
+
169
+ ### 3.4 CSRF Protection for SPAs
170
+
171
+ **Cookie-to-Header pattern:** Backend sets non-HttpOnly cookie with CSRF token. SPA
172
+ reads from `document.cookie`, sends as `X-CSRF-Token` header. Backend validates match.
173
+
174
+ **Token endpoint pattern:** SPA calls `GET /api/csrf-token` on init, stores token
175
+ in-memory (not localStorage — XSS-vulnerable), attaches to request headers.
176
+
177
+ **Bearer token auth (CSRF-immune):** If SPA uses JWT/OAuth tokens in the `Authorization`
178
+ header stored in memory (not cookies), CSRF protection is unnecessary.
179
+
180
+ ### 3.5 Stateless CSRF (HMAC-Based)
181
+
182
+ For horizontally scaled or serverless architectures:
183
+ ```
184
+ token = timestamp + ":" + nonce + ":" + HMAC(secret, timestamp + nonce + session_id)
185
+ ```
186
+ Server validates by recomputing HMAC. Timestamp enables expiration without storage.
187
+
188
+ ---
189
+
190
+ ## 4. Vulnerability Catalog
191
+
192
+ ### V-CSRF-01: Missing CSRF Token on State-Changing Endpoints
193
+ **CWE-352** | Severity: High
194
+ POST/PUT/DELETE endpoints accepting cookie-authenticated requests without CSRF tokens.
195
+ Fix: Apply CSRF middleware to all state-changing routes.
196
+
197
+ ### V-CSRF-02: Token Present but Not Validated Server-Side
198
+ **CWE-352** | Severity: High
199
+ Form includes a token field, but server ignores it. Creates false sense of security.
200
+ Fix: Ensure middleware validates the token and rejects invalid/missing values.
201
+
202
+ ### V-CSRF-03: GET Requests with Side Effects
203
+ **CWE-352** | Severity: High
204
+ State-changing GET endpoints bypass `SameSite=Lax` (allows cookies on top-level GET).
205
+ Fix: Use POST/PUT/DELETE for state changes. GET must be safe and idempotent (RFC 7231).
206
+
207
+ ### V-CSRF-04: CORS Misconfiguration Enabling CSRF
208
+ **CWE-346, CWE-352** | Severity: Critical
209
+ Reflecting any Origin with credentials or using wildcard + credentials allows cross-
210
+ origin authenticated requests. Fix: Explicit origin allowlist; never reflect blindly.
211
+
212
+ ### V-CSRF-05: SameSite=None Without Secure Flag
213
+ **CWE-1275** | Severity: Medium
214
+ Modern browsers reject this, but older browsers silently ignore SameSite entirely.
215
+ Fix: Always pair `SameSite=None` with `Secure`.
216
+
217
+ ### V-CSRF-06: Login CSRF
218
+ **CWE-352** | Severity: Medium
219
+ Unprotected login forms let attackers log victims into the attacker's account, capturing
220
+ sensitive data (payment methods, search history). Fix: CSRF-protect login forms.
221
+
222
+ ### V-CSRF-07: JSON Content-Type CSRF
223
+ **CWE-352** | Severity: Medium
224
+ JSON APIs may appear immune (HTML forms cannot submit JSON), but `navigator.sendBeacon()`
225
+ or misconfigured CORS can enable cross-origin JSON requests.
226
+ Fix: Validate Content-Type strictly, require custom headers, validate CSRF tokens.
227
+
228
+ ### V-CSRF-08: Token Leakage via URL or Referer
229
+ **CWE-598** | Severity: Medium
230
+ Tokens in URL query parameters leak via server logs, browser history, Referer header.
231
+ Fix: Transmit tokens in request bodies or custom headers only.
232
+
233
+ ### V-CSRF-09: Subdomain Takeover Enabling CSRF
234
+ **CWE-352** | Severity: High
235
+ Compromised subdomains bypass `SameSite=Lax` (same-site) and can inject cookies for
236
+ double-submit attacks. Fix: Audit DNS for dangling records. Use `__Host-` cookie prefix.
237
+
238
+ ### V-CSRF-10: Method Override Bypassing SameSite=Lax
239
+ **CWE-352** | Severity: Medium
240
+ Frameworks supporting `_method` override let GET requests (allowed by Lax) appear as
241
+ POST. Fix: Disable method override in production or validate CSRF on overridden method.
242
+
243
+ ### V-CSRF-11: Token Not Bound to Session
244
+ **CWE-352** | Severity: Medium
245
+ Globally valid tokens let attackers reuse tokens from their own session.
246
+ Fix: Bind tokens to session ID via HMAC.
247
+
248
+ ### V-CSRF-12: Missing Protection on File Upload Endpoints
249
+ **CWE-352** | Severity: High
250
+ Multipart endpoints excluded from CSRF middleware due to parsing complexity.
251
+ Fix: Ensure CSRF middleware handles multipart; order middleware correctly.
252
+
253
+ ### V-CSRF-13: WebSocket Initiation CSRF
254
+ **CWE-352** | Severity: Medium
255
+ WebSocket Upgrade carries cookies without CORS preflight.
256
+ Fix: Validate Origin header during handshake; require CSRF token as first message.
257
+
258
+ ### V-CSRF-14: OAuth State Parameter Missing
259
+ **CWE-352** | Severity: High
260
+ Missing `state` in OAuth flow lets attacker link their external account to victim's app.
261
+ Fix: Use cryptographic random `state` bound to session; validate on callback.
262
+
263
+ ---
264
+
265
+ ## 5. Security Checklist
266
+
267
+ ### Token Management
268
+ - [ ] **CS-01**: All state-changing endpoints require a valid CSRF token
269
+ - [ ] **CS-02**: Tokens use CSPRNG with at least 128 bits of entropy
270
+ - [ ] **CS-03**: Server validates tokens using constant-time comparison
271
+ - [ ] **CS-04**: Tokens bound to user session (HMAC or session storage)
272
+ - [ ] **CS-05**: Tokens regenerated on auth, invalidated on logout
273
+ - [ ] **CS-06**: Tokens never in URL query parameters
274
+
275
+ ### Cookie Configuration
276
+ - [ ] **CS-07**: Session cookies use `SameSite=Lax` or `Strict`
277
+ - [ ] **CS-08**: Any `SameSite=None` cookie also has `Secure`
278
+ - [ ] **CS-09**: Session cookies use `HttpOnly` and `Secure`
279
+ - [ ] **CS-10**: `__Host-` prefix on session cookies
280
+
281
+ ### HTTP and Origin
282
+ - [ ] **CS-11**: GET requests are safe and idempotent (no side effects)
283
+ - [ ] **CS-12**: HTTP method override disabled or CSRF-validated
284
+ - [ ] **CS-13**: Origin/Referer validated as defense-in-depth
285
+ - [ ] **CS-14**: CORS uses explicit allowlist (no wildcard + credentials)
286
+ - [ ] **CS-15**: Fetch Metadata (`Sec-Fetch-Site`) checked where supported
287
+
288
+ ### Framework and Architecture
289
+ - [ ] **CS-16**: Framework built-in CSRF protection enabled, not bypassed
290
+ - [ ] **CS-17**: Login and logout forms include CSRF protection
291
+ - [ ] **CS-18**: File upload endpoints covered by CSRF middleware
292
+ - [ ] **CS-19**: WebSocket handshakes validate Origin header
293
+ - [ ] **CS-20**: OAuth flows use cryptographic `state` parameter
294
+
295
+ ---
296
+
297
+ ## 6. Tools and Automation
298
+
299
+ ### 6.1 Testing Tools
300
+
301
+ | Tool | Purpose | Context |
302
+ |------|---------|---------|
303
+ | **Burp Suite Pro** | CSRF PoC generation, automated scanning | Pen testing |
304
+ | **Burp CSRF Token Tracker** | Handle rotating tokens during scanning | Extension |
305
+ | **OWASP ZAP** | Automated CSRF scanning | CI/CD, pen testing |
306
+ | **Postman/Insomnia** | Manual API CSRF testing | Dev/QA |
307
+
308
+ **Burp CSRF PoC workflow:** Capture request in Proxy/Repeater. Right-click, select
309
+ Engagement tools > Generate CSRF PoC. Burp auto-generates HTML that replays the request.
310
+ CSRF Token Tracker extension handles token rotation during Intruder/Scanner runs.
311
+
312
+ ### 6.2 Static Analysis — Semgrep
313
+
314
+ ```yaml
315
+ rules:
316
+ - id: flask-csrf-disabled
317
+ patterns:
318
+ - pattern: WTF_CSRF_CHECK_DEFAULT = False
319
+ message: "CSRF protection disabled. Set WTF_CSRF_CHECK_DEFAULT to True."
320
+ severity: ERROR
321
+ languages: [python]
322
+ metadata:
323
+ cwe: "CWE-352"
324
+ ```
325
+
326
+ Semgrep also provides rules for detecting missing CSRF middleware in Express, Django
327
+ `@csrf_exempt` overuse, and Spring Security CSRF disabled configurations.
328
+
329
+ ### 6.3 Framework CSRF Middleware Summary
330
+
331
+ | Framework | Built-in | Mechanism | Default |
332
+ |-----------|----------|-----------|---------|
333
+ | Django | Yes | Double-submit + HMAC masking | On |
334
+ | Spring Security | Yes | Synchronizer Token (session) | On |
335
+ | Rails | Yes | Synchronizer Token (session) | On |
336
+ | Laravel | Yes | Synchronizer Token (session) | On |
337
+ | Express.js | No | Use `csrf-csrf` package | N/A |
338
+ | ASP.NET Core | Yes | Synchronizer Token | Opt-in |
339
+ | Flask | Via Flask-WTF | Double-submit cookie | Opt-in |
340
+ | Next.js / FastAPI | No | Custom implementation needed | N/A |
341
+
342
+ ---
343
+
344
+ ## 7. Platform-Specific Guidance
345
+
346
+ ### 7.1 Traditional Server-Rendered Apps
347
+
348
+ Use the framework's built-in synchronizer token. Embed via template helpers (Django:
349
+ `{% csrf_token %}`, Rails: `form_authenticity_token`, Laravel: `@csrf`). Validate on
350
+ every POST/PUT/DELETE. Set `SameSite=Lax` on session cookies.
351
+
352
+ ### 7.2 Single Page Applications (SPAs)
353
+
354
+ If using cookie-based auth: CSRF protection is mandatory. Use double-submit cookie with
355
+ non-HttpOnly cookie. Store token in-memory, send via custom header. If using bearer
356
+ token auth (JWT in Authorization header, stored in memory): CSRF protection unnecessary.
357
+ If JWTs are stored in cookies, CSRF protection is still required.
358
+
359
+ ### 7.3 Mobile App APIs
360
+
361
+ Native HTTP clients are generally CSRF-immune (no automatic cookie attachment, bearer
362
+ token auth). **Exceptions:** APIs shared with web apps using cookie auth; WebViews
363
+ loading web content with cookie sessions; requests from mobile browsers.
364
+
365
+ ### 7.4 GraphQL APIs
366
+
367
+ Reject mutations on GET. Require custom header (`X-GraphQL-Request`). Apply standard
368
+ CSRF token validation for cookie-authenticated GraphQL endpoints.
369
+
370
+ ### 7.5 Microservices
371
+
372
+ Apply CSRF validation at the API gateway, not individual services. Internal service-to-
373
+ service calls do not need CSRF protection. Gateway validates tokens before forwarding.
374
+
375
+ ---
376
+
377
+ ## 8. Incident Patterns
378
+
379
+ ### 8.1 Detection Signals
380
+
381
+ **WAF/proxy logs:** State-changing requests with missing/mismatched Origin/Referer;
382
+ POST/PUT/DELETE where `Sec-Fetch-Site: cross-site`; requests to sensitive endpoints
383
+ without CSRF token; unusual volume of state changes from one session.
384
+
385
+ **Application logs:** Spike in 403s on state-changing endpoints (token validation
386
+ failures); account changes without corresponding UI clickstream; privileged actions
387
+ immediately after external site visits.
388
+
389
+ **SIEM/XDR:** Cross-reference state changes with user behavior analytics; alert on
390
+ privilege-sensitive operations without multi-step confirmation.
391
+
392
+ ### 8.2 Response Steps
393
+
394
+ 1. **Contain** — Enforce re-authentication for high-value actions; set `SameSite=Strict`
395
+ as emergency measure.
396
+ 2. **Identify** — Review access logs; find sessions with suspicious Referer/Origin.
397
+ 3. **Scope** — Determine affected accounts and unauthorized state changes (transfers,
398
+ email changes, privilege escalations).
399
+ 4. **Remediate** — Deploy CSRF tokens on affected endpoints; invalidate all sessions for
400
+ affected users; revert unauthorized changes.
401
+ 5. **Recover** — Notify users; reset compromised credentials; restore from backups.
402
+ 6. **Harden** — Implement full defense-in-depth; add monitoring for token failures.
403
+ 7. **Post-mortem** — Document vector, gap, timeline. Update threat model.
404
+
405
+ ---
406
+
407
+ ## 9. Compliance and Standards
408
+
409
+ ### 9.1 OWASP
410
+
411
+ - **Top 10 (2021):** CSRF under A01 Broken Access Control (#1 position).
412
+ - **ASVS 5.0 (2025):** Section 4.3.3 — CSRF protection verification. L1: basic; L2:
413
+ token validation on all state-changing requests; L3: defense-in-depth.
414
+ - **Prevention Cheat Sheet:** Updated for HMAC tokens and Fetch Metadata headers.
415
+ - **Testing Guide:** WSTG-SESS-05 covers CSRF testing methodology.
416
+
417
+ ### 9.2 CWE-352
418
+
419
+ - **CWE-352:** Canonical identifier. Related: CWE-346 (Origin Validation Error),
420
+ CWE-613 (Insufficient Session Expiration), CWE-598 (GET with Sensitive Query Strings),
421
+ CWE-1275 (Improper SameSite Attribute).
422
+ - **CAPEC:** CAPEC-62 (CSRF), CAPEC-111 (JSON Hijacking), CAPEC-462 (Cross-Domain
423
+ Search Timing).
424
+
425
+ ### 9.3 PCI-DSS
426
+
427
+ - **Requirement 6.2.4:** Protection against CSRF for apps processing cardholder data.
428
+ - **Requirement 6.4:** WAF must detect/block CSRF for public-facing web apps.
429
+ - ASVS L2 compliance covers substantial PCI-DSS Requirement 6 web app requirements.
430
+
431
+ ### 9.4 NIST and ISO
432
+
433
+ - **NIST SP 800-53 Rev. 5:** SC-23 (Session Authenticity) covers CSRF.
434
+ - **ISO 27001:2022:** Annex A.8.26 (Application Security Requirements).
435
+
436
+ ---
437
+
438
+ ## 10. Code Examples
439
+
440
+ ### 10.1 CSRF Token Middleware (TypeScript / Express)
441
+
442
+ ```typescript
443
+ import crypto from "node:crypto";
444
+ import type { Request, Response, NextFunction } from "express";
445
+
446
+ const SECRET = process.env.CSRF_SECRET!;
447
+ const SAFE_METHODS = new Set(["GET", "HEAD", "OPTIONS", "TRACE"]);
448
+
449
+ function generateToken(sessionId: string): string {
450
+ const nonce = crypto.randomBytes(16).toString("hex");
451
+ const ts = Date.now().toString(36);
452
+ const payload = `${ts}.${nonce}`;
453
+ const sig = crypto.createHmac("sha256", SECRET)
454
+ .update(`${sessionId}:${payload}`).digest("hex");
455
+ return `${payload}.${sig}`;
456
+ }
457
+
458
+ function validateToken(token: string, sessionId: string): boolean {
459
+ const parts = token.split(".");
460
+ if (parts.length !== 3) return false;
461
+ const [ts, nonce, sig] = parts;
462
+ const expected = crypto.createHmac("sha256", SECRET)
463
+ .update(`${sessionId}:${ts}.${nonce}`).digest("hex");
464
+ if (sig.length !== expected.length) return false;
465
+ return crypto.timingSafeEqual(Buffer.from(sig, "hex"), Buffer.from(expected, "hex"));
466
+ }
467
+
468
+ export function csrfProtection(req: Request, res: Response, next: NextFunction): void {
469
+ const sid = req.session?.id;
470
+ if (!sid) { res.status(403).json({ error: "No session" }); return; }
471
+
472
+ if (SAFE_METHODS.has(req.method)) {
473
+ const token = generateToken(sid);
474
+ res.cookie("__Host-csrf", token, {
475
+ httpOnly: false, secure: true, sameSite: "lax", path: "/", maxAge: 3600_000,
476
+ });
477
+ res.setHeader("X-CSRF-Token", token);
478
+ return next();
479
+ }
480
+
481
+ const headerToken = req.headers["x-csrf-token"] as string | undefined;
482
+ if (!headerToken) { res.status(403).json({ error: "CSRF token missing" }); return; }
483
+ if (!validateToken(headerToken, sid)) {
484
+ res.status(403).json({ error: "CSRF token invalid" }); return;
485
+ }
486
+ next();
487
+ }
488
+ ```
489
+
490
+ ### 10.2 SPA CSRF Client (TypeScript)
491
+
492
+ ```typescript
493
+ let csrfToken: string | null = null;
494
+
495
+ export async function initCsrf(): Promise<void> {
496
+ const res = await fetch("/api/csrf-token", { credentials: "include" });
497
+ csrfToken = (await res.json()).token;
498
+ }
499
+
500
+ export async function secureFetch(url: string, opts: RequestInit = {}): Promise<Response> {
501
+ const method = (opts.method ?? "GET").toUpperCase();
502
+ const headers = new Headers(opts.headers);
503
+ if (!["GET", "HEAD", "OPTIONS"].includes(method) && csrfToken) {
504
+ headers.set("X-CSRF-Token", csrfToken);
505
+ }
506
+ return fetch(url, { ...opts, headers, credentials: "include" });
507
+ }
508
+ ```
509
+
510
+ ### 10.3 Fetch Metadata Resource Isolation (TypeScript / Express)
511
+
512
+ ```typescript
513
+ export function fetchMetadataPolicy(req: Request, res: Response, next: NextFunction) {
514
+ const site = req.headers["sec-fetch-site"] as string | undefined;
515
+ if (!site) return next(); // Browser doesn't send Fetch Metadata
516
+ if (["same-origin", "same-site", "none"].includes(site)) return next();
517
+ if (site === "cross-site" && req.headers["sec-fetch-mode"] === "navigate"
518
+ && req.method === "GET") return next();
519
+ res.status(403).json({ error: "Cross-site request blocked" });
520
+ }
521
+ ```
522
+
523
+ ### 10.4 Vulnerable vs. Secure Comparison
524
+
525
+ ```typescript
526
+ // --- VULNERABLE ---
527
+ app.use(cors({ origin: true, credentials: true })); // Reflects any origin
528
+ app.post("/api/transfer", (req, res) => { // No CSRF check
529
+ processTransfer(req.session!.userId, req.body.to, req.body.amount);
530
+ res.json({ success: true });
531
+ });
532
+ // No SameSite on cookies, no Origin validation, no Fetch Metadata check
533
+
534
+ // --- SECURE ---
535
+ app.use(cors({ origin: ["https://app.example.com"], credentials: true }));
536
+ app.use(session({ cookie: { secure: true, httpOnly: true, sameSite: "lax" } }));
537
+ app.use(fetchMetadataPolicy);
538
+ app.use(csrfProtection);
539
+ app.post("/api/transfer", (req, res) => {
540
+ // CSRF validated by middleware chain before reaching handler
541
+ processTransfer(req.session!.userId, req.body.to, req.body.amount);
542
+ res.json({ success: true });
543
+ });
544
+ ```
545
+
546
+ ---
547
+
548
+ ## References
549
+
550
+ - [OWASP CSRF Prevention Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html)
551
+ - [OWASP CSRF Attack Description](https://owasp.org/www-community/attacks/csrf)
552
+ - [PortSwigger — CSRF](https://portswigger.net/web-security/csrf)
553
+ - [PortSwigger — Bypassing SameSite Restrictions](https://portswigger.net/web-security/csrf/bypassing-samesite-restrictions)
554
+ - [MDN Web Security — CSRF](https://developer.mozilla.org/en-US/docs/Web/Security/Attacks/CSRF)
555
+ - [CWE-352](https://cwe.mitre.org/data/definitions/352.html)
556
+ - [web.dev — Fetch Metadata](https://web.dev/articles/fetch-metadata)
557
+ - [csrf-csrf npm package](https://www.npmjs.com/package/csrf-csrf)
558
+ - [Django CSRF docs](https://docs.djangoproject.com/en/5.2/howto/csrf/)
559
+ - [Spring Security CSRF docs](https://docs.spring.io/spring-security/reference/features/exploits/csrf.html)
560
+ - [The Hacker News — CSRF Case Study: Global Retailer (2025)](https://thehackernews.com/2025/04/new-case-study-global-retailer.html)
561
+ - [Intigriti — CSRF Advanced Exploitation Guide](https://www.intigriti.com/researchers/blog/hacking-tools/csrf-a-complete-guide-to-exploiting-advanced-csrf-vulnerabilities)
562
+ - [Wikipedia — CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery)