@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,603 @@
1
+ # Authorization Security
2
+
3
+ > Expertise module for AI agents — use during planning and implementation to enforce
4
+ > secure authorization by default. Broken Access Control is OWASP #1 (A01:2021/2025).
5
+
6
+ ---
7
+
8
+ ## 1. Threat Landscape
9
+
10
+ Authorization — deciding *what* an authenticated identity may do — is the most
11
+ exploited vulnerability class. OWASP found 94% of applications had some form of broken
12
+ access control (318k+ occurrences). It rose from #5 (2017) to #1 (2021) and holds that
13
+ rank in the 2025 release candidate.
14
+
15
+ Authorization flaws are *logic bugs*: each app defines its own permission model, and
16
+ any gap between intended and enforced policy is exploitable. WAFs cannot catch them.
17
+
18
+ ### Attack Classes
19
+
20
+ | Attack | Direction | Description |
21
+ |---|---|---|
22
+ | **IDOR** | Horizontal | Change object ID to access another user's resource |
23
+ | **Horizontal privilege escalation** | Horizontal | Access peer accounts at the same privilege level |
24
+ | **Vertical privilege escalation** | Vertical | Elevate from user to admin/service account |
25
+ | **BFLA** (Broken Function-Level Authz) | Vertical | Call admin endpoints as a regular user |
26
+ | **BOLA** (Broken Object-Level Authz) | Horizontal | API variant of IDOR — OWASP API Security #1 since 2019 |
27
+ | **Mass assignment** | Both | Bind untrusted input to internal fields (`isAdmin`, `role`, `balance`) |
28
+ | **Forced browsing** | Vertical | Guess/enumerate URLs to unprotected admin pages |
29
+ | **Path traversal for access** | Horizontal | `../` sequences to escape authorized directories |
30
+ | **Parameter tampering** | Both | Modify hidden fields, cookies, or query params carrying authz decisions |
31
+
32
+ ### Real-World Breaches
33
+
34
+ **Facebook Access Token Breach (Sep 2018):** Three bugs in the "View As" feature let
35
+ attackers steal access tokens for ~50M accounts. Tokens granted full account takeover
36
+ including third-party apps using Facebook Login. Root cause: the video uploader
37
+ generated tokens with the *viewed user's* permissions instead of the viewer's. Facebook
38
+ reset tokens for 90M accounts. (Source: Facebook Security Update, Sep 2018; NPR, EFF)
39
+
40
+ **Parler Data Scrape (Jan 2021):** Sequential numeric IDs, no authentication, no rate
41
+ limiting on API endpoints. A researcher incremented `/v1/photo?id=N` to download 70 TB
42
+ of data including posts, GPS-tagged videos, and government IDs from the "Verified
43
+ Citizen" program. Textbook IDOR. (Source: Salt Security, CyberNews, TechCrunch)
44
+
45
+ **Kia Dealer Portal (Jun 2024):** Researchers could remotely take over any post-2013
46
+ Kia vehicle using only a license plate number. Weak ownership verification allowed
47
+ querying PII and silently registering as a second vehicle user, gaining remote
48
+ lock/unlock/start in ~30 seconds. Patched Aug 2024. (Source: Sam Curry, Malwarebytes)
49
+
50
+ **Other notable incidents:** GitHub mass assignment (2012) — SSH key injected into any
51
+ org. ZITADEL IDOR (CVE-2025-27507, CVSS 9.0). KubeSphere IDOR (CVE-2024-46528).
52
+ Moodle badges IDOR (CVE-2024-48899).
53
+
54
+ ### Trends
55
+
56
+ - BOLA accounts for ~40% of all API attacks.
57
+ - IDOR represents 15-36% of bug bounty payouts depending on industry.
58
+ - API-centric architectures and multi-tenant SaaS amplify the surface.
59
+ - Authorization flaws are increasingly chained with SSRF, JWT manipulation for impact.
60
+
61
+ ---
62
+
63
+ ## 2. Core Security Principles
64
+
65
+ **Deny by default.** Every request denied unless an explicit policy grants access.
66
+ Never rely on the absence of a deny rule — require the presence of an allow rule.
67
+
68
+ **Least privilege.** Grant the minimum permissions for the minimum duration. Service
69
+ accounts get scoped permissions. API tokens carry only needed scopes. DB connections
70
+ use restricted roles. Temporary elevation expires automatically.
71
+
72
+ **Separation of duties.** No single role controls a full critical workflow. The user
73
+ who creates a payment should not approve it. Code authors should not deploy to prod.
74
+
75
+ **Server-side enforcement is non-negotiable.** Client-side checks (hidden buttons,
76
+ disabled fields) are UX, not security. An attacker with a proxy bypasses them all.
77
+
78
+ ### Authorization Model Comparison
79
+
80
+ | Model | Mechanism | Best For | Weakness |
81
+ |---|---|---|---|
82
+ | **RBAC** | Roles carry permissions | Stable org structures | Role explosion |
83
+ | **ABAC** | Evaluate user/resource/env attributes | Dynamic, context-aware decisions | Complex policy authoring |
84
+ | **ReBAC** | Permissions from entity relationships | Doc sharing, social, hierarchies | Requires relationship graph |
85
+ | **Hybrid** | Roles baseline + attributes refine + relationships scope | Enterprise SaaS | Higher complexity |
86
+
87
+ Start with RBAC. Add ABAC for dynamic conditions (time, IP, risk). Add ReBAC when
88
+ permissions depend on entity relationships (org hierarchy, sharing, teams).
89
+
90
+ ---
91
+
92
+ ## 3. Implementation Patterns
93
+
94
+ ### 3.1 RBAC Implementation (TypeScript)
95
+
96
+ ```typescript
97
+ const PERMISSIONS = {
98
+ 'document:read': ['viewer', 'editor', 'admin'],
99
+ 'document:write': ['editor', 'admin'],
100
+ 'document:delete': ['admin'],
101
+ 'user:manage': ['admin'],
102
+ } as const;
103
+
104
+ type Permission = keyof typeof PERMISSIONS;
105
+ type Role = 'viewer' | 'editor' | 'admin';
106
+
107
+ function hasPermission(roles: Role[], perm: Permission): boolean {
108
+ return roles.some(r => PERMISSIONS[perm].includes(r));
109
+ }
110
+
111
+ function requirePermission(perm: Permission) {
112
+ return (req: Request, res: Response, next: NextFunction) => {
113
+ if (!req.user || !hasPermission(req.user.roles, perm))
114
+ return res.status(403).json({ error: 'Forbidden' });
115
+ next();
116
+ };
117
+ }
118
+
119
+ app.delete('/api/documents/:id', requireAuth, requirePermission('document:delete'), ctrl.delete);
120
+ ```
121
+
122
+ ### 3.2 ABAC with OPA/Rego
123
+
124
+ ```rego
125
+ package authz
126
+ default allow := false
127
+
128
+ allow {
129
+ input.action == "read"
130
+ input.user.department == input.resource.department
131
+ input.user.clearance_level >= input.resource.classification_level
132
+ }
133
+
134
+ allow {
135
+ input.action == "write"
136
+ input.user.role == "editor"
137
+ input.environment.hour >= 9; input.environment.hour < 17
138
+ net.cidr_contains("10.0.0.0/8", input.environment.source_ip)
139
+ }
140
+ ```
141
+
142
+ **Casbin** uses model-policy separation. Model defines the pattern (ACL/RBAC/ABAC);
143
+ policy defines rules. Policies stored in files, MySQL, Postgres, MongoDB, Redis, S3.
144
+
145
+ ### 3.3 Row-Level Security (PostgreSQL)
146
+
147
+ ```sql
148
+ ALTER TABLE documents ENABLE ROW LEVEL SECURITY;
149
+
150
+ -- Tenant isolation
151
+ CREATE POLICY tenant_isolation ON documents
152
+ USING (tenant_id = current_setting('app.current_tenant')::uuid);
153
+
154
+ -- Role-based: admins see all, users see own
155
+ CREATE POLICY user_documents ON documents FOR SELECT
156
+ USING (
157
+ owner_id = current_setting('app.current_user_id')::uuid
158
+ OR current_setting('app.current_role') = 'admin'
159
+ );
160
+ -- CRITICAL: Superusers bypass RLS. Always connect as a restricted role.
161
+ ```
162
+
163
+ ### 3.4 Resource-Based Authorization
164
+
165
+ Check the user's *relationship to the specific resource*, not just their role:
166
+
167
+ ```typescript
168
+ async function authorizeDocAccess(userId: string, docId: string, action: string): Promise<boolean> {
169
+ const doc = await db.documents.findById(docId);
170
+ if (!doc) return false; // 404 not 403 — prevent enumeration
171
+ if (doc.ownerId === userId) return true;
172
+ const share = await db.shares.findOne({ documentId: docId, userId, permission: action });
173
+ return !!share;
174
+ }
175
+ ```
176
+
177
+ ### 3.5 Multi-Tenancy Authorization
178
+
179
+ Enforce tenant isolation at every layer:
180
+ 1. **Application:** Every query includes tenant filter from session (never from user input)
181
+ 2. **Database:** PostgreSQL RLS enforces boundaries even if app layer is bypassed
182
+ 3. **API:** Validate resource belongs to authenticated tenant before any operation
183
+ 4. **Infrastructure:** Separate schemas/instances for high-security tenants
184
+
185
+ ```typescript
186
+ function tenantScope(req: Request, res: Response, next: NextFunction) {
187
+ const tenantId = req.user?.tenantId;
188
+ if (!tenantId) return res.status(403).json({ error: 'No tenant context' });
189
+ req.dbClient.query("SELECT set_config('app.current_tenant', $1, true)", [tenantId]);
190
+ next();
191
+ }
192
+ ```
193
+
194
+ ---
195
+
196
+ ## 4. Vulnerability Catalog
197
+
198
+ ### V01 — IDOR (CWE-639)
199
+ User-supplied ID used in DB query without ownership check.
200
+ ```javascript
201
+ // VULNERABLE
202
+ const invoice = await Invoice.findById(req.params.id); // any user reads any invoice
203
+ // SECURE
204
+ const invoice = await Invoice.findOne({ _id: req.params.id, userId: req.user.id });
205
+ if (!invoice) return res.status(404).json({ error: 'Not found' });
206
+ ```
207
+
208
+ ### V02 — Mass Assignment (CWE-915)
209
+ Request body bound directly to model without field filtering.
210
+ ```javascript
211
+ // VULNERABLE
212
+ await User.findByIdAndUpdate(req.user.id, req.body); // attacker sends { role: "admin" }
213
+ // SECURE
214
+ const allowed = ['name', 'email', 'avatar'];
215
+ const updates = Object.fromEntries(Object.entries(req.body).filter(([k]) => allowed.includes(k)));
216
+ await User.findByIdAndUpdate(req.user.id, updates);
217
+ ```
218
+
219
+ ### V03 — Missing Function-Level Access Control (CWE-285)
220
+ Admin endpoints lack role verification; "security by obscurity."
221
+ ```javascript
222
+ // VULNERABLE
223
+ app.delete('/api/admin/users/:id', async (req, res) => { /* no role check */ });
224
+ // SECURE
225
+ app.delete('/api/admin/users/:id', requireAuth, requireRole('admin'), ctrl.deleteUser);
226
+ ```
227
+
228
+ ### V04 — JWT Role Manipulation (CWE-290)
229
+ Role claim in JWT trusted without server-side verification.
230
+ ```javascript
231
+ // VULNERABLE — decode without verify, trust role from token
232
+ const token = jwt.decode(req.headers.authorization);
233
+ req.user = { id: token.sub, role: token.role };
234
+ // SECURE — verify signature, explicit algorithm, role from DB
235
+ const token = jwt.verify(req.headers.authorization, KEY, { algorithms: ['RS256'] });
236
+ const user = await User.findById(token.sub);
237
+ req.user = { id: user.id, role: user.role }; // role from DB
238
+ ```
239
+
240
+ ### V05 — Parameter Tampering (CWE-269)
241
+ Role/permission fields accepted in user-facing API requests.
242
+
243
+ ### V06 — Forced Browsing (CWE-425)
244
+ Sensitive URLs unprotected because "not linked in the UI."
245
+
246
+ ### V07 — Path Traversal for Authz Bypass (CWE-22)
247
+ User-supplied file paths not canonicalized before authorization check.
248
+
249
+ ### V08 — BOLA (CWE-639)
250
+ API endpoints accept object IDs without verifying caller's relationship.
251
+
252
+ ### V09 — BFLA (CWE-285)
253
+ API relies on client-side role filtering; server does not re-check.
254
+
255
+ ### V10 — Metadata/Header Manipulation (CWE-290)
256
+ Trusting `X-Forwarded-For`, `X-User-Role` from untrusted sources.
257
+
258
+ ### V11 — Cross-Tenant Data Leakage (CWE-668)
259
+ Missing tenant ID filter in database queries.
260
+
261
+ ### V12 — Insecure Default Permissions (CWE-276)
262
+ New resources default to public/world-readable.
263
+
264
+ ### V13 — OAuth Scope Bypass (CWE-863)
265
+ API does not validate token scopes cover the requested operation.
266
+
267
+ ### V14 — Race Condition in Authorization (CWE-362)
268
+ TOCTOU: permission checked, revoked, then action executed with cached decision.
269
+
270
+ ---
271
+
272
+ ## 5. Security Checklist
273
+
274
+ ### Access Control Architecture
275
+ - [ ] Authorization enforced server-side on every request
276
+ - [ ] Default policy is deny-all; access requires explicit grant
277
+ - [ ] Authorization logic centralized in middleware/guards, not scattered in handlers
278
+ - [ ] Role/permission definitions are declarative data, not hardcoded strings
279
+ - [ ] Multi-tenancy isolation at both application and database layers
280
+
281
+ ### Object-Level Authorization
282
+ - [ ] Every data query scoped to the authenticated user or tenant
283
+ - [ ] Object IDs are UUIDs or non-sequential (not auto-increment integers)
284
+ - [ ] Ownership verified before read, update, or delete
285
+ - [ ] Unauthorized access returns 404 (not 403) to prevent enumeration
286
+ - [ ] Bulk/list endpoints filtered by authorization scope
287
+
288
+ ### Function-Level Authorization
289
+ - [ ] Admin endpoints have explicit role checks
290
+ - [ ] HTTP method restrictions enforced (no DELETE on read-only resources)
291
+ - [ ] Internal/debug endpoints disabled or firewalled in production
292
+
293
+ ### Input Handling
294
+ - [ ] Mass assignment protection via explicit field allowlists
295
+ - [ ] User-supplied IDs validated against authenticated user's permissions
296
+ - [ ] File paths canonicalized and checked against allowed directories
297
+ - [ ] Role/permission fields never accepted from user input
298
+
299
+ ### Token and Session Security
300
+ - [ ] JWT signatures verified with explicit algorithm (no `alg: none`)
301
+ - [ ] Roles fetched from database, not trusted from tokens
302
+ - [ ] OAuth scopes validated at every endpoint
303
+ - [ ] Token revocation checked on each request
304
+
305
+ ### Audit and Monitoring
306
+ - [ ] All authorization denials logged with user, resource, action
307
+ - [ ] Privilege escalation patterns trigger alerts
308
+ - [ ] High-volume IDOR scanning detected and rate-limited
309
+ - [ ] Authorization policy changes require multi-party approval
310
+
311
+ ---
312
+
313
+ ## 6. Tools and Automation
314
+
315
+ ### SAST — Semgrep Custom Rules
316
+
317
+ ```yaml
318
+ rules:
319
+ - id: missing-auth-middleware
320
+ patterns:
321
+ - pattern: app.$METHOD($PATH, async (req, res) => { ... })
322
+ - pattern-not: app.$METHOD($PATH, requireAuth, ...)
323
+ message: "Route handler missing authentication middleware"
324
+ severity: ERROR
325
+ languages: [javascript, typescript]
326
+
327
+ - id: direct-id-without-ownership
328
+ patterns:
329
+ - pattern: $MODEL.findById(req.params.$ID)
330
+ - pattern-not-inside: $MODEL.findOne({ ..., userId: req.user.id, ... })
331
+ message: "Direct object lookup without ownership check — potential IDOR"
332
+ severity: WARNING
333
+ languages: [javascript, typescript]
334
+ ```
335
+
336
+ Semgrep AI-powered detection (2025) achieves 1.9x better recall on IDOR detection
337
+ compared to standalone AI assistants. **CodeQL** models taint flows from user input
338
+ to DB queries, flagging missing authorization along the path.
339
+
340
+ ### DAST
341
+
342
+ - **Burp Suite Authorize plugin:** Replays requests with low-privilege tokens,
343
+ highlights responses that succeed when they should fail. Essential for BOLA/BFLA.
344
+ - **OWASP ZAP:** Access Control Testing add-on for forced browsing and horizontal
345
+ privilege testing.
346
+ - **Nuclei:** Community templates for common authorization bypass patterns.
347
+
348
+ ### Policy Testing
349
+
350
+ ```typescript
351
+ describe('Authorization', () => {
352
+ it('denies cross-user document access', async () => {
353
+ const doc = await createDocument({ ownerId: 'user-a' });
354
+ expect(await authorize('user-b', doc.id, 'read')).toBe(false);
355
+ });
356
+ it('prevents mass assignment of role', async () => {
357
+ await request(app).put('/api/users/profile')
358
+ .set('Authorization', userToken).send({ name: 'Test', role: 'admin' });
359
+ expect((await User.findById(userId)).role).toBe('viewer');
360
+ });
361
+ it('enforces tenant isolation', async () => {
362
+ const doc = await createDocument({ tenantId: 'tenant-a' });
363
+ const res = await request(app).get(`/api/documents/${doc.id}`)
364
+ .set('Authorization', tenantBToken);
365
+ expect(res.status).toBe(404);
366
+ });
367
+ });
368
+ ```
369
+
370
+ ### Authorization Audit Logging
371
+
372
+ ```json
373
+ {
374
+ "timestamp": "2025-03-08T14:23:01Z",
375
+ "event": "authorization_decision",
376
+ "decision": "deny",
377
+ "principal": { "userId": "usr_abc123", "roles": ["viewer"], "tenantId": "t_001" },
378
+ "resource": { "type": "document", "id": "doc_xyz789" },
379
+ "action": "delete",
380
+ "reason": "insufficient_role",
381
+ "sourceIp": "192.168.1.42"
382
+ }
383
+ ```
384
+
385
+ Alert on: repeated denials from same principal, sudden access to many distinct
386
+ resources (IDOR scan), any admin-resource access by non-admin principals.
387
+
388
+ ---
389
+
390
+ ## 7. Platform-Specific Guidance
391
+
392
+ ### Web — Middleware Guards
393
+
394
+ **Express.js:**
395
+ ```typescript
396
+ const authorize = (resource: string, action: string) =>
397
+ async (req: Request, res: Response, next: NextFunction) => {
398
+ const allowed = await policyEngine.evaluate({ subject: req.user, resource, action });
399
+ if (!allowed) return res.status(403).json({ error: 'Forbidden' });
400
+ next();
401
+ };
402
+ ```
403
+
404
+ **Django REST Framework:**
405
+ ```python
406
+ class IsDocumentOwner(BasePermission):
407
+ def has_object_permission(self, request, view, obj):
408
+ return obj.owner == request.user
409
+
410
+ class DocumentViewSet(viewsets.ModelViewSet):
411
+ permission_classes = [IsAuthenticated, IsDocumentOwner]
412
+ def get_queryset(self):
413
+ return Document.objects.filter(tenant_id=self.request.user.tenant_id)
414
+ ```
415
+
416
+ **Spring Security:**
417
+ ```java
418
+ @PreAuthorize("hasRole('ADMIN') or @docService.isOwner(#id, authentication.name)")
419
+ @GetMapping("/api/documents/{id}")
420
+ public ResponseEntity<Document> getDocument(@PathVariable Long id) { ... }
421
+ ```
422
+
423
+ ### Mobile
424
+
425
+ All authorization enforcement MUST happen server-side. Mobile clients are untrusted:
426
+ attackers decompile APK/IPA, intercept via Frida/Objection, or call APIs directly.
427
+ Never store roles/permissions in local storage. Use short-lived tokens with refresh
428
+ rotation. Certificate pinning is defense-in-depth, not a primary control.
429
+
430
+ ### API — OAuth Scope Enforcement
431
+
432
+ ```typescript
433
+ function requireScopes(...required: string[]) {
434
+ return (req: Request, res: Response, next: NextFunction) => {
435
+ const tokenScopes = req.auth?.scope?.split(' ') || [];
436
+ if (!required.every(s => tokenScopes.includes(s)))
437
+ return res.status(403).json({ error: 'insufficient_scope', required });
438
+ next();
439
+ };
440
+ }
441
+ app.get('/api/users', requireScopes('users:read'), ctrl.list);
442
+ app.delete('/api/users', requireScopes('users:admin'), ctrl.delete);
443
+ ```
444
+
445
+ Even with valid scopes, always verify resource ownership:
446
+ ```typescript
447
+ const order = await Order.findOne({ _id: req.params.id, userId: req.auth.sub });
448
+ if (!order) return res.status(404).json({ error: 'Not found' });
449
+ ```
450
+
451
+ ---
452
+
453
+ ## 8. Incident Patterns
454
+
455
+ ### IDOR Exploitation Chain
456
+ 1. Attacker authenticates normally, observes resource IDs in API responses
457
+ 2. Modifies the ID parameter (increment, decrement, substitute)
458
+ 3. If response contains another user's data, IDOR confirmed
459
+ 4. Automates enumeration, scraping all accessible IDs
460
+ 5. May escalate via PUT/DELETE with tampered IDs
461
+
462
+ **Detection:** Single user accessing many distinct resource IDs; sequential access
463
+ patterns; 200 OK for IDs outside normal access range; high volume to parameterized
464
+ endpoints.
465
+
466
+ ### Privilege Escalation Detection
467
+ **Indicators:** User account gains roles not assigned through admin workflow; non-admin
468
+ calls admin endpoints; JWT claims differ from DB record; `role`/`is_admin` modified
469
+ outside admin interface.
470
+
471
+ **Response:** (1) Revoke session/tokens. (2) Audit all actions since escalation.
472
+ (3) Roll back unauthorized changes. (4) Identify vector (mass assignment, JWT
473
+ manipulation, SQLi). (5) Deploy fix, re-test. (6) Notify affected users.
474
+
475
+ ### Cross-Tenant Breach Response
476
+ 1. Identify scope: which tenants affected, what data exposed
477
+ 2. Isolate vulnerable endpoint (feature flag, WAF rule, takedown)
478
+ 3. Audit cross-tenant queries in DB logs for the exposure window
479
+ 4. Notify affected tenants per regulatory obligations (GDPR: 72 hours)
480
+ 5. Implement RLS to prevent recurrence; engage pentesters to verify
481
+
482
+ ---
483
+
484
+ ## 9. Compliance and Standards
485
+
486
+ ### OWASP A01:2021/2025 — Broken Access Control
487
+ Maps to 34 CWEs: CWE-200 (Info Exposure), CWE-285 (Improper Authorization), CWE-639
488
+ (Authz Bypass via User-Controlled Key), CWE-862 (Missing Authorization), CWE-863
489
+ (Incorrect Authorization), CWE-915 (Mass Assignment).
490
+
491
+ ### NIST SP 800-53 Rev. 5 — AC Family
492
+ - **AC-3:** Access Enforcement
493
+ - **AC-5:** Separation of Duties
494
+ - **AC-6:** Least Privilege
495
+ - **AC-16:** Security/Privacy Attributes (supports ABAC)
496
+ - **AC-24:** Access Control Decisions (PDP/PEP points)
497
+
498
+ ### SOC 2 Trust Services Criteria
499
+ - **CC6.1:** Logical access controls to protect information
500
+ - **CC6.3:** Access authorized and modified based on roles
501
+ - **CC6.6:** System boundaries restrict unauthorized external access
502
+
503
+ ### PCI DSS v4.0
504
+ - **Req 7:** Restrict access by business need-to-know (7.2: define access, 7.3: enforce via ACL)
505
+ - **Req 10:** Log and monitor all access to cardholder data
506
+
507
+ ---
508
+
509
+ ## 10. Code Examples — Vulnerable vs. Secure
510
+
511
+ ### 10.1 RBAC Middleware (TypeScript)
512
+
513
+ ```typescript
514
+ import { Request, Response, NextFunction } from 'express';
515
+
516
+ const ROLE_PERMISSIONS: Record<string, Set<string>> = {
517
+ admin: new Set(['create', 'read', 'update', 'delete', 'manage_users']),
518
+ editor: new Set(['create', 'read', 'update']),
519
+ viewer: new Set(['read']),
520
+ };
521
+
522
+ export function rbacGuard(permission: string) {
523
+ return (req: Request, res: Response, next: NextFunction) => {
524
+ const user = req.user;
525
+ if (!user) {
526
+ auditLog('authz_denied', { reason: 'no_user', permission, path: req.path });
527
+ return res.status(401).json({ error: 'Authentication required' });
528
+ }
529
+ const allowed = user.roles.some((r: string) => ROLE_PERMISSIONS[r]?.has(permission));
530
+ if (!allowed) {
531
+ auditLog('authz_denied', { userId: user.id, permission, path: req.path });
532
+ return res.status(403).json({ error: 'Forbidden' });
533
+ }
534
+ next();
535
+ };
536
+ }
537
+ ```
538
+
539
+ ### 10.2 Mass Assignment Protection (Zod)
540
+
541
+ ```typescript
542
+ import { z } from 'zod';
543
+
544
+ const UpdateProfileSchema = z.object({
545
+ name: z.string().min(1).max(100).optional(),
546
+ email: z.string().email().optional(),
547
+ avatar: z.string().url().optional(),
548
+ // role, emailVerified, credits — NOT in schema, cannot be set
549
+ });
550
+
551
+ app.patch('/api/users/:id', requireAuth, async (req, res) => {
552
+ if (req.params.id !== req.user.id) return res.status(404).json({ error: 'Not found' });
553
+ const updates = UpdateProfileSchema.parse(req.body); // strips unknown fields
554
+ const user = await User.findByIdAndUpdate(req.user.id, updates, { new: true });
555
+ return res.json(user);
556
+ });
557
+ ```
558
+
559
+ ### 10.3 Row-Level Security (Complete SQL Setup)
560
+
561
+ ```sql
562
+ CREATE ROLE app_user LOGIN PASSWORD 'strong-random-password';
563
+ CREATE TABLE orders (
564
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
565
+ tenant_id UUID NOT NULL REFERENCES tenants(id),
566
+ user_id UUID NOT NULL,
567
+ amount DECIMAL(10,2) NOT NULL,
568
+ status TEXT DEFAULT 'pending'
569
+ );
570
+
571
+ GRANT SELECT, INSERT, UPDATE ON orders TO app_user;
572
+ ALTER TABLE orders ENABLE ROW LEVEL SECURITY;
573
+
574
+ CREATE POLICY tenant_isolation ON orders FOR ALL
575
+ USING (tenant_id = current_setting('app.current_tenant')::uuid)
576
+ WITH CHECK (tenant_id = current_setting('app.current_tenant')::uuid);
577
+
578
+ CREATE POLICY user_read ON orders FOR SELECT
579
+ USING (user_id = current_setting('app.current_user')::uuid
580
+ OR current_setting('app.current_role') = 'admin');
581
+
582
+ -- Per request: SET LOCAL "app.current_tenant" = 'uuid'; (transaction-scoped)
583
+ ```
584
+
585
+ ---
586
+
587
+ ## References
588
+
589
+ - OWASP Top 10: A01:2021 — https://owasp.org/Top10/2021/A01_2021-Broken_Access_Control/
590
+ - OWASP API Security: API1:2023 BOLA — https://owasp.org/API-Security/editions/2023/en/0xa1-broken-object-level-authorization/
591
+ - OWASP IDOR Prevention Cheat Sheet — https://cheatsheetseries.owasp.org/cheatsheets/Insecure_Direct_Object_Reference_Prevention_Cheat_Sheet.html
592
+ - NIST SP 800-53 Rev. 5 — https://csrc.nist.gov/pubs/sp/800/53/r5/upd1/final
593
+ - CWE-639, CWE-915, CWE-285 — https://cwe.mitre.org/
594
+ - Facebook Security Update (Sep 2018) — https://about.fb.com/news/2018/09/security-update/
595
+ - Salt Security: Parler Breach — https://salt.security/blog/unpacking-the-parler-data-breach
596
+ - Sam Curry: Hacking Kia — https://samcurry.net/hacking-kia
597
+ - PostgreSQL RLS — https://www.postgresql.org/docs/current/ddl-rowsecurity.html
598
+ - Open Policy Agent — https://www.openpolicyagent.org/docs
599
+ - Apache Casbin — https://casbin.org/docs/overview/
600
+ - Semgrep AI Detection — https://semgrep.dev/blog/2025/ai-powered-detection-with-semgrep/
601
+ - CVE-2025-27507 (ZITADEL IDOR) — CVSS 9.0
602
+ - CVE-2024-46528 (KubeSphere IDOR)
603
+ - CVE-2025-29927 (Next.js Middleware Auth Bypass)