@1aboveio/skills 0.10.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 (397) hide show
  1. package/LICENSE +3 -0
  2. package/README.md +90 -0
  3. package/bin/1aboveio-skills.mjs +18 -0
  4. package/package.json +28 -0
  5. package/runtime/skills/distribution/generated/recipes.json +1189 -0
  6. package/runtime/skills/distribution/scripts/bundles.mjs +280 -0
  7. package/runtime/skills/engineering/engineering-runtime/scripts/main-module.mjs +80 -0
  8. package/skills/backend/airflow-dag-develop/LICENSE +3 -0
  9. package/skills/backend/airflow-dag-develop/SKILL.md +111 -0
  10. package/skills/backend/app-debug/LICENSE +3 -0
  11. package/skills/backend/app-debug/SKILL.md +109 -0
  12. package/skills/backend/app-debug/references/common-errors.md +128 -0
  13. package/skills/backend/python-backend/LICENSE +3 -0
  14. package/skills/backend/python-backend/SKILL.md +326 -0
  15. package/skills/cicd-pipeline/cloud-build/LICENSE +3 -0
  16. package/skills/cicd-pipeline/cloud-build/SKILL.md +707 -0
  17. package/skills/cicd-pipeline/cloud-debug/LICENSE +3 -0
  18. package/skills/cicd-pipeline/cloud-debug/SKILL.md +316 -0
  19. package/skills/cicd-pipeline/cloud-debug/references/build-failures.md +238 -0
  20. package/skills/cicd-pipeline/cloud-debug/references/deploy-failures.md +376 -0
  21. package/skills/cicd-pipeline/cloud-debug/references/pipeline-failures.md +378 -0
  22. package/skills/cicd-pipeline/cloud-deploy/LICENSE +3 -0
  23. package/skills/cicd-pipeline/cloud-deploy/SKILL.md +229 -0
  24. package/skills/cicd-pipeline/cloud-deploy/references/config-templates.md +257 -0
  25. package/skills/cicd-pipeline/docker/LICENSE +3 -0
  26. package/skills/cicd-pipeline/docker/SKILL.md +126 -0
  27. package/skills/cicd-pipeline/google-cloud/LICENSE +3 -0
  28. package/skills/cicd-pipeline/google-cloud/SKILL.md +118 -0
  29. package/skills/cicd-pipeline/google-cloud/references/gcs.md +469 -0
  30. package/skills/cicd-pipeline/google-cloud/references/iam.md +451 -0
  31. package/skills/cicd-pipeline/google-cloud/references/project.md +349 -0
  32. package/skills/cicd-pipeline/google-cloud/references/secrets.md +336 -0
  33. package/skills/cicd-pipeline/google-cloud/references/vpc.md +312 -0
  34. package/skills/cicd-pipeline/google-cloud/scripts/create-sa.sh +36 -0
  35. package/skills/cicd-pipeline/google-cloud/scripts/gcp-config.sh +31 -0
  36. package/skills/cicd-pipeline/google-cloud/scripts/grant-iap.sh +41 -0
  37. package/skills/cicd-pipeline/google-cloud/scripts/setup-secrets.sh +48 -0
  38. package/skills/cicd-pipeline/mergify/LICENSE +3 -0
  39. package/skills/cicd-pipeline/mergify/SKILL.md +138 -0
  40. package/skills/cicd-pipeline/mergify/assets/templates/mergify.yml +237 -0
  41. package/skills/cicd-pipeline/mergify/assets/templates/ruleset.json +46 -0
  42. package/skills/cicd-pipeline/mergify/references/branch-protection.md +277 -0
  43. package/skills/cicd-pipeline/mergify/references/configuration.md +183 -0
  44. package/skills/cicd-pipeline/mergify/references/diagnosis.md +73 -0
  45. package/skills/cicd-pipeline/mergify/references/traps.md +78 -0
  46. package/skills/cicd-pipeline/mergify/references/watch-contract.md +218 -0
  47. package/skills/cicd-pipeline/mergify/scripts/audit-core.mjs +131 -0
  48. package/skills/cicd-pipeline/mergify/scripts/audit.mjs +4 -0
  49. package/skills/cicd-pipeline/mergify/scripts/watch-pr-delivery-core.mjs +663 -0
  50. package/skills/cicd-pipeline/mergify/scripts/watch-pr-delivery.mjs +4 -0
  51. package/skills/cicd-pipeline/podman/LICENSE +3 -0
  52. package/skills/cicd-pipeline/podman/SKILL.md +70 -0
  53. package/skills/cicd-pipeline/podman/agents/openai.yaml +4 -0
  54. package/skills/cicd-pipeline/podman/assets/templates/podman-compose-socket-directory.yml +6 -0
  55. package/skills/cicd-pipeline/podman/assets/templates/podman-service-override.conf +3 -0
  56. package/skills/cicd-pipeline/podman/references/compose-compatibility.md +70 -0
  57. package/skills/cicd-pipeline/podman/references/networking-and-ports.md +74 -0
  58. package/skills/cicd-pipeline/podman/references/rootless-services-and-sockets.md +156 -0
  59. package/skills/cicd-pipeline/podman/references/troubleshooting.md +98 -0
  60. package/skills/engineering/e2e-test/LICENSE +3 -0
  61. package/skills/engineering/e2e-test/SKILL.md +156 -0
  62. package/skills/engineering/e2e-test/assets/ci-gates.cloudbuild.yaml +272 -0
  63. package/skills/engineering/e2e-test/assets/ci-gates.github.yml +451 -0
  64. package/skills/engineering/e2e-test/assets/e2e-workflow.yml +282 -0
  65. package/skills/engineering/e2e-test/references/authoring/auth-flows.md +159 -0
  66. package/skills/engineering/e2e-test/references/authoring/playwright-config.md +71 -0
  67. package/skills/engineering/e2e-test/references/authoring/playwright-patterns.md +219 -0
  68. package/skills/engineering/e2e-test/references/authoring/test-skipping.md +44 -0
  69. package/skills/engineering/e2e-test/references/ci-integration.md +121 -0
  70. package/skills/engineering/e2e-test/references/ci-playwright-container.md +280 -0
  71. package/skills/engineering/e2e-test/references/debugging.md +36 -0
  72. package/skills/engineering/e2e-test/references/presentation-sweep.md +131 -0
  73. package/skills/engineering/e2e-test/references/reviewing.md +39 -0
  74. package/skills/engineering/e2e-test/references/route-discovery.md +50 -0
  75. package/skills/engineering/e2e-test/references/route-manifest.md +44 -0
  76. package/skills/engineering/e2e-test/scripts/detect-routes-fastapi.py +290 -0
  77. package/skills/engineering/e2e-test/scripts/detect-routes-nextjs.mjs +200 -0
  78. package/skills/engineering/e2e-test/scripts/post-visual-evidence.mjs +158 -0
  79. package/skills/engineering/e2e-test/scripts/presentation-checks.mjs +171 -0
  80. package/skills/engineering/e2e-test/scripts/presentation-perceivability.mjs +179 -0
  81. package/skills/engineering/e2e-test/scripts/presentation-reachability.mjs +154 -0
  82. package/skills/engineering/e2e-test/scripts/presentation-render-health.mjs +141 -0
  83. package/skills/engineering/e2e-test/scripts/presentation-sweep.mjs +148 -0
  84. package/skills/engineering/e2e-test/scripts/presentation-temporal.mjs +127 -0
  85. package/skills/engineering/e2e-test/scripts/presentation-visual.mjs +84 -0
  86. package/skills/engineering/e2e-test/scripts/project-route-manifest.mjs +75 -0
  87. package/skills/engineering/e2e-test/scripts/validate-manifest.mjs +106 -0
  88. package/skills/engineering/engineering-runtime/LICENSE +3 -0
  89. package/skills/engineering/engineering-runtime/SKILL.md +10 -0
  90. package/skills/engineering/engineering-runtime/agents/openai.yaml +6 -0
  91. package/skills/engineering/engineering-runtime/coherence/workflow.json +553 -0
  92. package/skills/engineering/engineering-runtime/scripts/exact-head-artifact.mjs +131 -0
  93. package/skills/engineering/engineering-runtime/scripts/head-check-set.mjs +398 -0
  94. package/skills/engineering/engineering-runtime/scripts/main-module.mjs +80 -0
  95. package/skills/engineering/engineering-runtime/scripts/mergify-yaml.mjs +11 -0
  96. package/skills/engineering/engineering-runtime/scripts/package-lock.json +43 -0
  97. package/skills/engineering/engineering-runtime/scripts/package.json +10 -0
  98. package/skills/engineering/engineering-runtime/scripts/required-check-plan.mjs +223 -0
  99. package/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +576 -0
  100. package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +166 -0
  101. package/skills/engineering/ensure-coverage/LICENSE +3 -0
  102. package/skills/engineering/ensure-coverage/SKILL.md +136 -0
  103. package/skills/engineering/ensure-coverage/evals/evals.json +125 -0
  104. package/skills/engineering/ensure-coverage/references/breadth/coverage-ledger.md +91 -0
  105. package/skills/engineering/ensure-coverage/references/breadth/inventory-contract.md +83 -0
  106. package/skills/engineering/ensure-coverage/references/breadth/surface-baseline.md +44 -0
  107. package/skills/engineering/ensure-coverage/references/breadth/surface-discovery.md +16 -0
  108. package/skills/engineering/ensure-coverage/references/depth/characterization.md +68 -0
  109. package/skills/engineering/ensure-coverage/references/depth/coverage.config.example.json +25 -0
  110. package/skills/engineering/ensure-coverage/references/depth/grading.md +35 -0
  111. package/skills/engineering/ensure-coverage/references/depth/mock-policy.md +87 -0
  112. package/skills/engineering/ensure-coverage/references/depth/test-smells.md +23 -0
  113. package/skills/engineering/ensure-coverage/references/enforcement/ci-contract.md +164 -0
  114. package/skills/engineering/ensure-coverage/references/enforcement/hooks.md +85 -0
  115. package/skills/engineering/ensure-coverage/references/examples/coverage-ledger.md +109 -0
  116. package/skills/engineering/ensure-coverage/references/examples/refund-flow.md +33 -0
  117. package/skills/engineering/ensure-coverage/references/presentation/axis.md +78 -0
  118. package/skills/engineering/ensure-coverage/references/presentation/runner-contract.md +74 -0
  119. package/skills/engineering/ensure-coverage/references/process/audit-mode.md +33 -0
  120. package/skills/engineering/ensure-coverage/references/process/output-template.md +139 -0
  121. package/skills/engineering/ensure-coverage/references/process/review-contract-template.md +119 -0
  122. package/skills/engineering/ensure-coverage/references/process/scope-class.md +178 -0
  123. package/skills/engineering/ensure-coverage/references/process/test-strategy.md +55 -0
  124. package/skills/engineering/ensure-coverage/schemas/coverage-config.schema.json +45 -0
  125. package/skills/engineering/ensure-coverage/schemas/coverage-file.schema.json +93 -0
  126. package/skills/engineering/ensure-coverage/scripts/adapters/nextjs-inventory.mjs +178 -0
  127. package/skills/engineering/ensure-coverage/scripts/check-quarantine-expiry.mjs +101 -0
  128. package/skills/engineering/ensure-coverage/scripts/ci-audit.mjs +358 -0
  129. package/skills/engineering/ensure-coverage/scripts/coverage-checklist.mjs +494 -0
  130. package/skills/engineering/ensure-coverage/scripts/coverage-ledger.mjs +663 -0
  131. package/skills/engineering/ensure-coverage/scripts/design-parity.mjs +591 -0
  132. package/skills/engineering/ensure-coverage/scripts/evidence-block.mjs +367 -0
  133. package/skills/engineering/ensure-coverage/scripts/lint-tests.mjs +269 -0
  134. package/skills/engineering/ensure-coverage/scripts/mock-policy-config.mjs +176 -0
  135. package/skills/engineering/ensure-coverage/scripts/package-lock.json +76 -0
  136. package/skills/engineering/ensure-coverage/scripts/package.json +19 -0
  137. package/skills/engineering/ensure-coverage/scripts/scope-class.mjs +554 -0
  138. package/skills/engineering/harness-runtime/LICENSE +3 -0
  139. package/skills/engineering/harness-runtime/SKILL.md +18 -0
  140. package/skills/engineering/harness-runtime/agents/openai.yaml +6 -0
  141. package/skills/engineering/harness-runtime/bin/discover-models.mjs +4 -0
  142. package/skills/engineering/harness-runtime/bin/model-catalog.mjs +4 -0
  143. package/skills/engineering/harness-runtime/contracts.md +15 -0
  144. package/skills/engineering/harness-runtime/discover-models.mjs +392 -0
  145. package/skills/engineering/harness-runtime/fixtures/native-question-schemas.json +33 -0
  146. package/skills/engineering/harness-runtime/fixtures/question-responses.json +54 -0
  147. package/skills/engineering/harness-runtime/index.mjs +767 -0
  148. package/skills/engineering/harness-runtime/model-catalog.mjs +787 -0
  149. package/skills/engineering/harness-runtime/native-question-contracts.md +37 -0
  150. package/skills/engineering/harness-runtime/references/model-catalog-seed.json +159 -0
  151. package/skills/engineering/harness-runtime/references/model-catalog.md +57 -0
  152. package/skills/engineering/implement-and-pr/LICENSE +3 -0
  153. package/skills/engineering/implement-and-pr/SKILL.md +176 -0
  154. package/skills/engineering/implement-and-pr/references/ci-iteration.md +10 -0
  155. package/skills/engineering/implement-and-pr/references/closeout.md +27 -0
  156. package/skills/engineering/implement-and-pr/references/contract-complete-fix-rounds.md +34 -0
  157. package/skills/engineering/implement-and-pr/references/evidence-rules.md +39 -0
  158. package/skills/engineering/implement-and-pr/references/incremental-plan.md +16 -0
  159. package/skills/engineering/implement-and-pr/references/self-review.md +23 -0
  160. package/skills/engineering/implement-and-pr/references/tdd-mode.md +18 -0
  161. package/skills/engineering/resolve-issues/LICENSE +3 -0
  162. package/skills/engineering/resolve-issues/SKILL.md +167 -0
  163. package/skills/engineering/resolve-issues/generated/workflow-repair-policy.json +448 -0
  164. package/skills/engineering/resolve-issues/references/breaker.md +82 -0
  165. package/skills/engineering/resolve-issues/references/deliverables.md +27 -0
  166. package/skills/engineering/resolve-issues/references/delivery.md +108 -0
  167. package/skills/engineering/resolve-issues/references/evidence-lane.md +21 -0
  168. package/skills/engineering/resolve-issues/references/exact-head-ci.md +287 -0
  169. package/skills/engineering/resolve-issues/references/fan-out.md +33 -0
  170. package/skills/engineering/resolve-issues/references/finalization.md +68 -0
  171. package/skills/engineering/resolve-issues/references/guarantees.md +10 -0
  172. package/skills/engineering/resolve-issues/references/high-risk.md +29 -0
  173. package/skills/engineering/resolve-issues/references/incidents/848/README.md +156 -0
  174. package/skills/engineering/resolve-issues/references/intake.md +86 -0
  175. package/skills/engineering/resolve-issues/references/integration-gate.md +53 -0
  176. package/skills/engineering/resolve-issues/references/interference.md +87 -0
  177. package/skills/engineering/resolve-issues/references/loop.md +134 -0
  178. package/skills/engineering/resolve-issues/references/model-catalog.md +9 -0
  179. package/skills/engineering/resolve-issues/references/postmortem.md +27 -0
  180. package/skills/engineering/resolve-issues/references/pre-flight-model-slots.md +41 -0
  181. package/skills/engineering/resolve-issues/references/pre-flight-recording-and-checkout.md +48 -0
  182. package/skills/engineering/resolve-issues/references/pre-flight.md +41 -0
  183. package/skills/engineering/resolve-issues/references/regression-checklist.md +26 -0
  184. package/skills/engineering/resolve-issues/references/run-state.md +288 -0
  185. package/skills/engineering/resolve-issues/references/sandboxed-testing.md +48 -0
  186. package/skills/engineering/resolve-issues/references/spawn-contract.md +96 -0
  187. package/skills/engineering/resolve-issues/references/terminal-evidence-journal.md +40 -0
  188. package/skills/engineering/resolve-issues/references/why.md +653 -0
  189. package/skills/engineering/resolve-issues/schemas/fix-round.schema.json +49 -0
  190. package/skills/engineering/resolve-issues/scripts/combine-and-verify.mjs +721 -0
  191. package/skills/engineering/resolve-issues/scripts/component-candidate.mjs +962 -0
  192. package/skills/engineering/resolve-issues/scripts/contract-revision.mjs +220 -0
  193. package/skills/engineering/resolve-issues/scripts/detect-delivery-mode.mjs +420 -0
  194. package/skills/engineering/resolve-issues/scripts/detect-target-branch.mjs +256 -0
  195. package/skills/engineering/resolve-issues/scripts/detect-workspace-mode.mjs +168 -0
  196. package/skills/engineering/resolve-issues/scripts/discover-models.mjs +9 -0
  197. package/skills/engineering/resolve-issues/scripts/doctrine.mjs +62 -0
  198. package/skills/engineering/resolve-issues/scripts/evidence-lifecycle-contract.mjs +191 -0
  199. package/skills/engineering/resolve-issues/scripts/exact-head-ci.mjs +413 -0
  200. package/skills/engineering/resolve-issues/scripts/exact-head-github-provider.mjs +332 -0
  201. package/skills/engineering/resolve-issues/scripts/finalize.mjs +488 -0
  202. package/skills/engineering/resolve-issues/scripts/fix-rounds.mjs +3307 -0
  203. package/skills/engineering/resolve-issues/scripts/fixtures/evidence-lifecycle-circular-1001.json +16 -0
  204. package/skills/engineering/resolve-issues/scripts/fixtures/evidence-lifecycle-valid-sequencing.json +51 -0
  205. package/skills/engineering/resolve-issues/scripts/fixtures/fmm-express-830-component-candidate.json +17 -0
  206. package/skills/engineering/resolve-issues/scripts/fixtures/head-check-set-1081.json +166 -0
  207. package/skills/engineering/resolve-issues/scripts/gate-value-series.mjs +92 -0
  208. package/skills/engineering/resolve-issues/scripts/guide-index.mjs +73 -0
  209. package/skills/engineering/resolve-issues/scripts/head-check-set.mjs +159 -0
  210. package/skills/engineering/resolve-issues/scripts/interference.mjs +427 -0
  211. package/skills/engineering/resolve-issues/scripts/model-catalog.mjs +9 -0
  212. package/skills/engineering/resolve-issues/scripts/next-operations.mjs +419 -0
  213. package/skills/engineering/resolve-issues/scripts/postmortem.mjs +909 -0
  214. package/skills/engineering/resolve-issues/scripts/preflight-questions.mjs +322 -0
  215. package/skills/engineering/resolve-issues/scripts/reconcile-contained-unit-prs.mjs +415 -0
  216. package/skills/engineering/resolve-issues/scripts/release-state-contract.mjs +697 -0
  217. package/skills/engineering/resolve-issues/scripts/report.mjs +494 -0
  218. package/skills/engineering/resolve-issues/scripts/required-check-plan.mjs +172 -0
  219. package/skills/engineering/resolve-issues/scripts/round-metadata.mjs +79 -0
  220. package/skills/engineering/resolve-issues/scripts/run-state-review6-cases.mjs +334 -0
  221. package/skills/engineering/resolve-issues/scripts/run-state.mjs +4784 -0
  222. package/skills/engineering/resolve-issues/scripts/sandbox-selftest.mjs +395 -0
  223. package/skills/engineering/resolve-issues/scripts/spawn-contract.mjs +290 -0
  224. package/skills/engineering/resolve-issues/scripts/terminal-dispositions.mjs +170 -0
  225. package/skills/engineering/resolve-issues/scripts/terminal-evidence-journal.mjs +293 -0
  226. package/skills/engineering/resolve-issues/scripts/unit-kind.mjs +197 -0
  227. package/skills/engineering/resolve-issues/scripts/unit-lifecycle.mjs +127 -0
  228. package/skills/engineering/resolve-issues/scripts/watch-delivery.mjs +893 -0
  229. package/skills/engineering/resolve-issues/scripts/workspaces.mjs +829 -0
  230. package/skills/engineering/resolve-issues/workflows/independent-review.workflow.js +290 -0
  231. package/skills/engineering/resolve-issues/workflows/prior-art-scan.workflow.js +80 -0
  232. package/skills/engineering/resolve-issues/workflows/workflow-smoke.mjs +102 -0
  233. package/skills/engineering/resolve-release/LICENSE +3 -0
  234. package/skills/engineering/resolve-release/SKILL.md +112 -0
  235. package/skills/engineering/resolve-release/references/assembly.md +137 -0
  236. package/skills/engineering/resolve-release/references/auto-when-green.md +56 -0
  237. package/skills/engineering/resolve-release/references/candidate.md +167 -0
  238. package/skills/engineering/resolve-release/references/exposure.md +178 -0
  239. package/skills/engineering/resolve-release/references/handoff.md +24 -0
  240. package/skills/engineering/resolve-release/references/postmortem.md +230 -0
  241. package/skills/engineering/resolve-release/references/preflight.md +207 -0
  242. package/skills/engineering/resolve-release/references/principles.md +94 -0
  243. package/skills/engineering/resolve-release/references/regression-checklist.md +36 -0
  244. package/skills/engineering/resolve-release/references/related-skills.md +12 -0
  245. package/skills/engineering/resolve-release/references/routing.md +149 -0
  246. package/skills/engineering/resolve-release/references/verified-sha-github-flow.md +285 -0
  247. package/skills/engineering/resolve-release/references/versioning.md +202 -0
  248. package/skills/engineering/resolve-release/references/why.md +53 -0
  249. package/skills/engineering/resolve-release/scripts/adapter-completion-artifact.mjs +389 -0
  250. package/skills/engineering/resolve-release/scripts/build-changes.mjs +209 -0
  251. package/skills/engineering/resolve-release/scripts/candidate-hygiene.mjs +407 -0
  252. package/skills/engineering/resolve-release/scripts/candidate-identity.mjs +904 -0
  253. package/skills/engineering/resolve-release/scripts/candidate-traffic.mjs +81 -0
  254. package/skills/engineering/resolve-release/scripts/checked-adapter-loader.mjs +612 -0
  255. package/skills/engineering/resolve-release/scripts/close-attempt.mjs +135 -0
  256. package/skills/engineering/resolve-release/scripts/closeout-release.mjs +161 -0
  257. package/skills/engineering/resolve-release/scripts/doctrine.mjs +106 -0
  258. package/skills/engineering/resolve-release/scripts/durable-processing.mjs +522 -0
  259. package/skills/engineering/resolve-release/scripts/ensure-target-green.mjs +659 -0
  260. package/skills/engineering/resolve-release/scripts/evidence-bundle.mjs +1014 -0
  261. package/skills/engineering/resolve-release/scripts/finalize-release.mjs +526 -0
  262. package/skills/engineering/resolve-release/scripts/fixtures/durable-processing-adapter.mjs +169 -0
  263. package/skills/engineering/resolve-release/scripts/green-gate.mjs +599 -0
  264. package/skills/engineering/resolve-release/scripts/isolated-adapter-evaluator.mjs +752 -0
  265. package/skills/engineering/resolve-release/scripts/metadata-pr-status.mjs +56 -0
  266. package/skills/engineering/resolve-release/scripts/metadata-sync.mjs +1538 -0
  267. package/skills/engineering/resolve-release/scripts/postmortem.mjs +381 -0
  268. package/skills/engineering/resolve-release/scripts/preflight-probes.mjs +498 -0
  269. package/skills/engineering/resolve-release/scripts/production-endpoints.mjs +326 -0
  270. package/skills/engineering/resolve-release/scripts/rc-circuit-breaker.mjs +272 -0
  271. package/skills/engineering/resolve-release/scripts/report.mjs +417 -0
  272. package/skills/engineering/resolve-release/scripts/reprobe-credentials.mjs +114 -0
  273. package/skills/engineering/resolve-release/scripts/revalidate-candidate.mjs +238 -0
  274. package/skills/engineering/resolve-release/scripts/review-packet.mjs +503 -0
  275. package/skills/engineering/resolve-release/scripts/rollback-floor.mjs +263 -0
  276. package/skills/engineering/resolve-release/scripts/version-assert.mjs +339 -0
  277. package/skills/engineering/resolve-release/scripts/version-postmortem.mjs +485 -0
  278. package/skills/engineering/resolve-release/scripts/version.mjs +1199 -0
  279. package/skills/engineering/resolve-release/scripts/watch-candidate-delivery.mjs +449 -0
  280. package/skills/engineering/resolve-release/vendor/ACORN-LICENSE +21 -0
  281. package/skills/engineering/resolve-release/vendor/README.md +60 -0
  282. package/skills/engineering/resolve-release/vendor/acorn.mjs +6233 -0
  283. package/skills/engineering/resolve-release/vendor/quickjs/core/LICENSE +21 -0
  284. package/skills/engineering/resolve-release/vendor/quickjs/core/README.md +341 -0
  285. package/skills/engineering/resolve-release/vendor/quickjs/core/README.template.md +70 -0
  286. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-TAV5CUKK.mjs +2 -0
  287. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-TAV5CUKK.mjs.map +1 -0
  288. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-V2S4ZYJR.mjs +7 -0
  289. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-V2S4ZYJR.mjs.map +1 -0
  290. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.d.mts +2033 -0
  291. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.d.ts +2033 -0
  292. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.js +7 -0
  293. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.js.map +1 -0
  294. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.mjs +2 -0
  295. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.mjs.map +1 -0
  296. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-ES6BEMUI.mjs +2 -0
  297. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-ES6BEMUI.mjs.map +1 -0
  298. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-asyncify-2EFITU5U.mjs +2 -0
  299. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-asyncify-2EFITU5U.mjs.map +1 -0
  300. package/skills/engineering/resolve-release/vendor/quickjs/core/package.json +49 -0
  301. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/LICENSE +21 -0
  302. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/README.md +5 -0
  303. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.d.mts +549 -0
  304. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.d.ts +549 -0
  305. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.js +2 -0
  306. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.js.map +1 -0
  307. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.mjs +2 -0
  308. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.mjs.map +1 -0
  309. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/package.json +36 -0
  310. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/LICENSE +47 -0
  311. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/README.md +82 -0
  312. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.browser.d.ts +11 -0
  313. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.browser.mjs +22 -0
  314. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cjs +21 -0
  315. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cloudflare.cjs +21 -0
  316. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cloudflare.d.ts +11 -0
  317. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.d.ts +11 -0
  318. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.mjs +25 -0
  319. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.wasm +0 -0
  320. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.d.mts +85 -0
  321. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.d.ts +85 -0
  322. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.js +2 -0
  323. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.js.map +1 -0
  324. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.mjs +2 -0
  325. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.mjs.map +1 -0
  326. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.d.mts +20 -0
  327. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.d.ts +20 -0
  328. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.js +2 -0
  329. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.js.map +1 -0
  330. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.mjs +2 -0
  331. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.mjs.map +1 -0
  332. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/package.json +61 -0
  333. package/skills/engineering/review-pr/LICENSE +3 -0
  334. package/skills/engineering/review-pr/SKILL.md +123 -0
  335. package/skills/engineering/review-pr/references/adversarial-reviewer-prompt.md +42 -0
  336. package/skills/engineering/review-pr/references/code-correctness.md +5 -0
  337. package/skills/engineering/review-pr/references/contract-freshness.md +9 -0
  338. package/skills/engineering/review-pr/references/coordination.md +18 -0
  339. package/skills/engineering/review-pr/references/domain-hazards.md +123 -0
  340. package/skills/engineering/review-pr/references/finding-themes.md +7 -0
  341. package/skills/engineering/review-pr/references/github-posting.md +98 -0
  342. package/skills/engineering/review-pr/references/golden-path-smoke.md +5 -0
  343. package/skills/engineering/review-pr/references/incremental-output.md +16 -0
  344. package/skills/engineering/review-pr/references/inputs-and-discovery.md +31 -0
  345. package/skills/engineering/review-pr/references/output-format.md +99 -0
  346. package/skills/engineering/review-pr/references/over-mock-screen.md +7 -0
  347. package/skills/engineering/review-pr/references/promotion-prs.md +16 -0
  348. package/skills/engineering/review-pr/references/re-review.md +18 -0
  349. package/skills/engineering/review-pr/references/review-method.md +199 -0
  350. package/skills/engineering/review-pr/references/review-mode.md +30 -0
  351. package/skills/engineering/review-pr/references/review-posture.md +53 -0
  352. package/skills/engineering/review-pr/references/round1-depth.md +62 -0
  353. package/skills/engineering/review-pr/references/scripts.md +17 -0
  354. package/skills/engineering/review-pr/references/workflow.md +16 -0
  355. package/skills/engineering/review-pr/schemas/findings.schema.json +282 -0
  356. package/skills/engineering/review-pr/scripts/finding-contract.mjs +285 -0
  357. package/skills/engineering/review-pr/scripts/post-review.mjs +405 -0
  358. package/skills/engineering/review-pr/scripts/pr-context.mjs +207 -0
  359. package/skills/engineering/review-pr/scripts/scan-diff.mjs +365 -0
  360. package/skills/engineering/review-pr/scripts/theme-contract.mjs +57 -0
  361. package/skills/engineering/smoke/LICENSE +3 -0
  362. package/skills/engineering/smoke/SKILL.md +131 -0
  363. package/skills/engineering/smoke/assets/smoke.manifest.example.json +53 -0
  364. package/skills/engineering/smoke/references/manifest.md +192 -0
  365. package/skills/engineering/smoke/scripts/smoke.mjs +713 -0
  366. package/skills/fullstack/better-auth/LICENSE +3 -0
  367. package/skills/fullstack/better-auth/SKILL.md +601 -0
  368. package/skills/fullstack/better-auth/references/feishu-api.md +270 -0
  369. package/skills/fullstack/monorepo/LICENSE +3 -0
  370. package/skills/fullstack/monorepo/SKILL.md +465 -0
  371. package/skills/fullstack/nextjs-fullstack/LICENSE +3 -0
  372. package/skills/fullstack/nextjs-fullstack/SKILL.md +210 -0
  373. package/skills/fullstack/nextjs-fullstack/conventions.md +318 -0
  374. package/skills/fullstack/nextjs-fullstack/frontend-conventions.md +61 -0
  375. package/skills/fullstack/nextjs-fullstack/nextjs16.md +287 -0
  376. package/skills/fullstack/nextjs-fullstack/server-actions.md +409 -0
  377. package/skills/fullstack/prisma-setup/LICENSE +3 -0
  378. package/skills/fullstack/prisma-setup/SKILL.md +180 -0
  379. package/skills/fullstack/prisma-setup/nextjs.md +258 -0
  380. package/skills/fullstack/prisma-setup/turborepo.md +301 -0
  381. package/skills/fullstack/shadcn/LICENSE +3 -0
  382. package/skills/fullstack/shadcn/SKILL.md +119 -0
  383. package/skills/fullstack/shadcn/assets/shadcn-small.png +0 -0
  384. package/skills/fullstack/shadcn/assets/shadcn.png +0 -0
  385. package/skills/fullstack/shadcn/cli.md +411 -0
  386. package/skills/fullstack/shadcn/customization.md +224 -0
  387. package/skills/fullstack/shadcn/evals/evals.json +90 -0
  388. package/skills/fullstack/shadcn/mcp.md +101 -0
  389. package/skills/fullstack/shadcn/rules/base-vs-radix.md +323 -0
  390. package/skills/fullstack/shadcn/rules/component-selection.md +67 -0
  391. package/skills/fullstack/shadcn/rules/composition.md +195 -0
  392. package/skills/fullstack/shadcn/rules/data-table.md +201 -0
  393. package/skills/fullstack/shadcn/rules/forms.md +255 -0
  394. package/skills/fullstack/shadcn/rules/icons.md +103 -0
  395. package/skills/fullstack/shadcn/rules/styling.md +167 -0
  396. package/skills/fullstack/zod-v4/LICENSE +3 -0
  397. package/skills/fullstack/zod-v4/SKILL.md +287 -0
@@ -0,0 +1,465 @@
1
+ ---
2
+ name: monorepo
3
+ description: Turborepo monorepo architecture and conventions. Read when designing or reviewing monorepo structure, shared packages, pnpm workspaces, DAL architecture, or Turborepo pipeline setup.
4
+ ---
5
+
6
+ # Turborepo Monorepo Architecture
7
+
8
+ **Turborepo** | **pnpm workspaces** | **Next.js 16** | **Prisma** | **Shadcn UI**
9
+
10
+ Strictly enforces Data Access Layer (DAL) pattern and package boundaries.
11
+
12
+ ---
13
+
14
+ ## Core Technology Stack
15
+
16
+ - **Manager:** Turborepo
17
+ - **Package Manager:** pnpm
18
+ - **Framework:** Next.js 16 (App Router)
19
+ - **Language:** TypeScript (Strict Mode)
20
+ - **UI System:** Shadcn UI (Radix + Tailwind)
21
+ - **Database:** Prisma (PostgreSQL)
22
+ - **Architecture:** DAL Separation
23
+
24
+ ---
25
+
26
+ ## Directory Structure
27
+
28
+ ```
29
+ repo/
30
+ ├── apps/
31
+ │ └── web/ # Next.js application
32
+ ├── packages/
33
+ │ ├── typescript-config/ # Shared TS configs
34
+ │ ├── eslint-config/ # Shared ESLint configs
35
+ │ ├── database/ # Raw Prisma schema + client
36
+ │ ├── dal/ # Data Access Layer
37
+ │ └── ui/ # Shadcn UI system
38
+ ├── turbo.json
39
+ ├── pnpm-workspace.yaml
40
+ └── package.json
41
+ ```
42
+
43
+ ---
44
+
45
+ ## Root Configuration
46
+
47
+ ### pnpm-workspace.yaml
48
+
49
+ ```yaml
50
+ packages:
51
+ - "apps/*"
52
+ - "packages/*"
53
+ ```
54
+
55
+ ### turbo.json
56
+
57
+ ```json
58
+ {
59
+ "tasks": {
60
+ "build": {
61
+ "dependsOn": ["^build"]
62
+ },
63
+ "dev": {
64
+ "dependsOn": ["^db:generate"],
65
+ "cache": false,
66
+ "persistent": true
67
+ },
68
+ "db:generate": {
69
+ "inputs": ["schema.prisma"]
70
+ },
71
+ "lint": {}
72
+ }
73
+ }
74
+ ```
75
+
76
+ ---
77
+
78
+ ## Package: typescript-config
79
+
80
+ Shared TypeScript configurations.
81
+
82
+ ```
83
+ packages/typescript-config/
84
+ ├── base.json
85
+ ├── nextjs.json
86
+ └── server.json
87
+ ```
88
+
89
+ ### base.json
90
+
91
+ ```json
92
+ {
93
+ "$schema": "https://json.schemastore.org/tsconfig",
94
+ "compilerOptions": {
95
+ "strict": true,
96
+ "esModuleInterop": true,
97
+ "skipLibCheck": true,
98
+ "forceConsistentCasingInFileNames": true,
99
+ "moduleResolution": "bundler",
100
+ "resolveJsonModule": true,
101
+ "isolatedModules": true,
102
+ "noEmit": true
103
+ }
104
+ }
105
+ ```
106
+
107
+ ### nextjs.json
108
+
109
+ ```json
110
+ {
111
+ "extends": "./base.json",
112
+ "compilerOptions": {
113
+ "jsx": "preserve",
114
+ "lib": ["dom", "dom.iterable", "esnext"],
115
+ "module": "esnext",
116
+ "target": "esnext",
117
+ "plugins": [{ "name": "next" }]
118
+ }
119
+ }
120
+ ```
121
+
122
+ ### server.json
123
+
124
+ ```json
125
+ {
126
+ "extends": "./base.json",
127
+ "compilerOptions": {
128
+ "lib": ["esnext"],
129
+ "module": "esnext",
130
+ "target": "esnext"
131
+ }
132
+ }
133
+ ```
134
+
135
+ ---
136
+
137
+ ## Package: database
138
+
139
+ Holds **only** the Prisma schema and raw client. No business logic.
140
+
141
+ ```
142
+ packages/database/
143
+ ├── prisma/
144
+ │ └── schema.prisma
145
+ ├── client.ts
146
+ ├── package.json
147
+ └── index.ts
148
+ ```
149
+
150
+ ### schema.prisma
151
+
152
+ ```prisma
153
+ generator client {
154
+ provider = "prisma-client"
155
+ output = "../generated/prisma"
156
+ }
157
+
158
+ datasource db {
159
+ provider = "postgresql"
160
+ }
161
+
162
+ model User {
163
+ id String @id @default(cuid())
164
+ email String @unique
165
+ name String?
166
+ createdAt DateTime @default(now())
167
+ updatedAt DateTime @updatedAt
168
+ }
169
+ ```
170
+
171
+ ### client.ts
172
+
173
+ ```typescript
174
+ import { PrismaClient } from "./generated/prisma/client"
175
+ import { PrismaPg } from "@prisma/adapter-pg"
176
+
177
+ const adapter = new PrismaPg({
178
+ connectionString: process.env.DATABASE_URL!,
179
+ })
180
+
181
+ const globalForPrisma = globalThis as unknown as { database?: PrismaClient }
182
+
183
+ export const database =
184
+ globalForPrisma.database ?? new PrismaClient({ adapter })
185
+
186
+ if (process.env.NODE_ENV !== "production") {
187
+ globalForPrisma.database = database
188
+ }
189
+ ```
190
+
191
+ ### index.ts
192
+
193
+ ```typescript
194
+ export * from "./generated/prisma"
195
+ export { database } from "./client"
196
+ ```
197
+
198
+ ### package.json
199
+
200
+ ```json
201
+ {
202
+ "name": "@repo/database",
203
+ "private": true,
204
+ "main": "index.ts",
205
+ "scripts": {
206
+ "db:generate": "prisma generate",
207
+ "db:push": "prisma db push"
208
+ }
209
+ }
210
+ ```
211
+
212
+ ---
213
+
214
+ ## Package: dal (Data Access Layer)
215
+
216
+ The **only** package allowed to import `@repo/database`.
217
+
218
+ ```
219
+ packages/dal/
220
+ ├── src/
221
+ │ ├── users/
222
+ │ │ ├── queries.ts
223
+ │ │ └── mutations.ts
224
+ │ └── index.ts
225
+ └── package.json
226
+ ```
227
+
228
+ ### Requirements
229
+
230
+ - **Server-Only:** All files must start with `import 'server-only'`
231
+ - **DTOs:** Return plain objects, not class instances
232
+ - **Dependencies:** `@repo/database`, `server-only`
233
+
234
+ ### src/users/queries.ts
235
+
236
+ ```typescript
237
+ import "server-only"
238
+ import { database } from "@repo/database"
239
+
240
+ export async function getUsers() {
241
+ return database.user.findMany({
242
+ orderBy: { createdAt: "desc" },
243
+ })
244
+ }
245
+
246
+ export async function getUserById(id: string) {
247
+ return database.user.findUnique({
248
+ where: { id },
249
+ })
250
+ }
251
+ ```
252
+
253
+ ### src/users/mutations.ts
254
+
255
+ ```typescript
256
+ import "server-only"
257
+ import { database } from "@repo/database"
258
+
259
+ export async function createUser(data: { email: string; name?: string }) {
260
+ return database.user.create({ data })
261
+ }
262
+
263
+ export async function updateUser(id: string, data: { name?: string }) {
264
+ return database.user.update({
265
+ where: { id },
266
+ data,
267
+ })
268
+ }
269
+ ```
270
+
271
+ ### src/index.ts
272
+
273
+ ```typescript
274
+ export * from "./users/queries"
275
+ export * from "./users/mutations"
276
+ ```
277
+
278
+ ### package.json
279
+
280
+ ```json
281
+ {
282
+ "name": "@repo/dal",
283
+ "private": true,
284
+ "main": "src/index.ts",
285
+ "dependencies": {
286
+ "@repo/database": "*",
287
+ "server-only": "*"
288
+ }
289
+ }
290
+ ```
291
+
292
+ ---
293
+
294
+ ## Package: ui (Shadcn)
295
+
296
+ Centralized, exportable UI library.
297
+
298
+ ```
299
+ packages/ui/
300
+ ├── src/
301
+ │ ├── components/
302
+ │ │ └── ui/
303
+ │ │ ├── button.tsx
304
+ │ │ └── input.tsx
305
+ │ └── styles/
306
+ │ └── globals.css
307
+ ├── components.json
308
+ ├── tailwind.config.ts
309
+ ├── index.ts
310
+ └── package.json
311
+ ```
312
+
313
+ ### tailwind.config.ts (Master Config)
314
+
315
+ ```typescript
316
+ import type { Config } from "tailwindcss"
317
+
318
+ const config: Config = {
319
+ darkMode: ["class"],
320
+ content: ["./src/**/*.{ts,tsx}"],
321
+ theme: {
322
+ extend: {
323
+ colors: {
324
+ border: "hsl(var(--border))",
325
+ background: "hsl(var(--background))",
326
+ foreground: "hsl(var(--foreground))",
327
+ primary: {
328
+ DEFAULT: "hsl(var(--primary))",
329
+ foreground: "hsl(var(--primary-foreground))",
330
+ },
331
+ },
332
+ borderRadius: {
333
+ lg: "var(--radius)",
334
+ md: "calc(var(--radius) - 2px)",
335
+ sm: "calc(var(--radius) - 4px)",
336
+ },
337
+ },
338
+ },
339
+ plugins: [require("tailwindcss-animate")],
340
+ }
341
+
342
+ export default config
343
+ ```
344
+
345
+ ### index.ts
346
+
347
+ ```typescript
348
+ export * from "./src/components/ui/button"
349
+ export * from "./src/components/ui/input"
350
+ // Export tailwind config for apps to preset
351
+ ```
352
+
353
+ ---
354
+
355
+ ## App: apps/web
356
+
357
+ ### Dependencies
358
+
359
+ ```json
360
+ {
361
+ "dependencies": {
362
+ "@repo/ui": "*",
363
+ "@repo/dal": "*"
364
+ }
365
+ }
366
+ ```
367
+
368
+ **FORBIDDEN:** Do not import `@repo/database` directly.
369
+
370
+ ### next.config.ts
371
+
372
+ ```typescript
373
+ import type { NextConfig } from "next"
374
+
375
+ const config: NextConfig = {
376
+ transpilePackages: ["@repo/ui", "@repo/dal"],
377
+ }
378
+
379
+ export default config
380
+ ```
381
+
382
+ ### tailwind.config.ts
383
+
384
+ ```typescript
385
+ import type { Config } from "tailwindcss"
386
+ import sharedConfig from "@repo/ui/tailwind.config"
387
+
388
+ const config: Config = {
389
+ presets: [sharedConfig],
390
+ content: [
391
+ "./app/**/*.{ts,tsx}",
392
+ "../../packages/ui/src/**/*.{ts,tsx}",
393
+ ],
394
+ }
395
+
396
+ export default config
397
+ ```
398
+
399
+ ### Root Layout
400
+
401
+ ```typescript
402
+ import "@repo/ui/src/styles/globals.css"
403
+
404
+ export default function RootLayout({ children }) {
405
+ return (
406
+ <html lang="en">
407
+ <body>{children}</body>
408
+ </html>
409
+ )
410
+ }
411
+ ```
412
+
413
+ ### Page Example
414
+
415
+ ```typescript
416
+ // app/page.tsx
417
+ import { getUsers } from "@repo/dal"
418
+ import { Button } from "@repo/ui"
419
+
420
+ export default async function HomePage() {
421
+ const users = await getUsers()
422
+
423
+ return (
424
+ <main>
425
+ <h1>Users</h1>
426
+ <ul>
427
+ {users.map((user) => (
428
+ <li key={user.id}>{user.name}</li>
429
+ ))}
430
+ </ul>
431
+ <Button>Add User</Button>
432
+ </main>
433
+ )
434
+ }
435
+ ```
436
+
437
+ ---
438
+
439
+ ## Package Boundary Rules
440
+
441
+ | Package | Can Import | Cannot Import |
442
+ |---------|------------|---------------|
443
+ | `database` | - | Any other package |
444
+ | `dal` | `database` | `ui`, apps |
445
+ | `ui` | - | `database`, `dal` |
446
+ | `apps/web` | `dal`, `ui` | `database` directly |
447
+
448
+ ---
449
+
450
+ ## Do / Don't
451
+
452
+ ### Do
453
+
454
+ - Keep database package minimal (schema + client only)
455
+ - Use DAL for all database operations
456
+ - Use `server-only` in DAL packages
457
+ - Export tailwind config from UI package
458
+ - Use transpilePackages in Next.js config
459
+
460
+ ### Don't
461
+
462
+ - Don't import `@repo/database` from apps
463
+ - Don't put business logic in database package
464
+ - Don't skip DAL for "simple" queries
465
+ - Don't duplicate tailwind theme in apps
@@ -0,0 +1,3 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 1AboveIO
@@ -0,0 +1,210 @@
1
+ ---
2
+ name: nextjs-fullstack
3
+ description: "Build or debug Next.js App Router features with React 19 — pages/layouts/route handlers, Server/Client Components, Server Actions, forms, middleware, DAL, strict TypeScript, Zod — plus our conventions: nuqs URL state, SWR cache, Skeleton/Progress + Sonner feedback, drag-and-drop upload, the portal app shell, list pages as filter/sort/paginate tables. shadcn component mechanics: see the shadcn skill."
4
+ ---
5
+
6
+ # Next.js 16 Fullstack Development
7
+
8
+ **Stack:** Next.js 16 (App Router) | React 19 | TypeScript strict | Zod | Prisma
9
+
10
+ ## Quick Reference
11
+
12
+ - [Architectural Conventions](conventions.md) - Layers, DAL, testing
13
+ - [Next.js 16 Patterns](nextjs16.md) - App Router, components, routing
14
+ - [Server Actions & Forms](server-actions.md) - useActionState, withCallbacks
15
+ - [Frontend Conventions](frontend-conventions.md) - nuqs URL state, SWR cache, feedback (Progress/Sonner), file upload, portal app shell, i18n, list pages (components → `shadcn`)
16
+
17
+ ---
18
+
19
+ ## Core Principles
20
+
21
+ 1. **Server Components by default** - Client Components only when needed
22
+ 2. **Server Actions for mutations** - Not API routes for forms
23
+ 3. **DAL for database access** - Never call Prisma from components
24
+ 4. **Zod for validation** - At server action boundary
25
+ 5. **TypeScript strict mode** - Explicit return types on exports
26
+
27
+ ---
28
+
29
+ ## Project Structure
30
+
31
+ ```
32
+ src/
33
+ ├── app/
34
+ │ ├── layout.tsx
35
+ │ ├── page.tsx
36
+ │ ├── (public)/... # Public routes
37
+ │ ├── dashboard/
38
+ │ │ ├── layout.tsx
39
+ │ │ ├── page.tsx
40
+ │ │ ├── settings/
41
+ │ │ │ ├── page.tsx
42
+ │ │ │ ├── actions.ts # Route-scoped server actions
43
+ │ │ │ ├── schema.ts # Route-scoped validation
44
+ │ │ │ └── components/
45
+ │ │ └── [id]/
46
+ │ │ └── page.tsx
47
+ │ └── api/
48
+ │ └── health/
49
+ │ └── route.ts
50
+ ├── lib/
51
+ │ ├── auth.ts # Auth configuration
52
+ │ ├── prisma.ts # Database client
53
+ │ └── server-action.ts # Action utilities
54
+ ├── dal/
55
+ │ └── user.ts # Data access layer
56
+ ├── components/
57
+ │ ├── ui/ # Shared primitives
58
+ │ └── client/ # Reusable client components
59
+ └── context/
60
+ └── session-context.tsx
61
+ ```
62
+
63
+ ---
64
+
65
+ ## Architectural Layers
66
+
67
+ ### 1. UI Layer (Components & Pages)
68
+
69
+ - Location: `app/**`, `components/**`
70
+ - Renders UI (RSC or client components)
71
+ - Calls server actions (via import or `useActionState`)
72
+ - No direct Prisma usage
73
+
74
+ ### 2. Use Case Layer (Server Actions)
75
+
76
+ - Location: `app/**/actions.ts`
77
+ - Always begins with `'use server'`
78
+ - Validates input with Zod
79
+ - Enforces auth and permissions
80
+ - Calls DAL for database operations
81
+ - Returns typed `ActionResult` shape
82
+
83
+ ### 3. Data Access Layer (DAL)
84
+
85
+ - Location: `lib/repositories/**` or `dal/**`
86
+ - All Prisma access
87
+ - Framework-agnostic (no Next.js, no auth)
88
+ - Returns domain objects or `null`
89
+ - No Zod schemas, no logging
90
+
91
+ ---
92
+
93
+ ## Server Action Pattern
94
+
95
+ ```typescript
96
+ // app/dashboard/settings/actions.ts
97
+ 'use server';
98
+
99
+ import { z } from 'zod';
100
+ import { revalidatePath } from 'next/cache';
101
+ import { auth } from '@/lib/auth';
102
+ import { updateUserProfile } from '@/dal/user';
103
+
104
+ const schema = z.object({
105
+ name: z.string().min(1).max(50),
106
+ avatarUrl: z.string().url().optional(),
107
+ });
108
+
109
+ export type ActionResult<T = unknown> = {
110
+ success: boolean;
111
+ data?: T;
112
+ error?: { code: string; message: string };
113
+ };
114
+
115
+ export async function updateProfile(input: unknown): Promise<ActionResult> {
116
+ const session = await auth();
117
+ if (!session?.user) {
118
+ return { success: false, error: { code: 'UNAUTHENTICATED', message: 'Please sign in.' } };
119
+ }
120
+
121
+ const parsed = schema.safeParse(input);
122
+ if (!parsed.success) {
123
+ return { success: false, error: { code: 'VALIDATION_ERROR', message: 'Invalid input.' } };
124
+ }
125
+
126
+ try {
127
+ const user = await updateUserProfile(session.user.id, parsed.data);
128
+ revalidatePath('/dashboard/settings');
129
+ return { success: true, data: user };
130
+ } catch (err) {
131
+ console.error(err);
132
+ return { success: false, error: { code: 'INTERNAL_ERROR', message: 'Something went wrong.' } };
133
+ }
134
+ }
135
+ ```
136
+
137
+ ---
138
+
139
+ ## Client Component with useActionState
140
+
141
+ ```tsx
142
+ 'use client';
143
+
144
+ import { startTransition, useActionState } from 'react';
145
+ import { useForm } from 'react-hook-form';
146
+ import { zodResolver } from '@hookform/resolvers/zod';
147
+ import { toast } from 'sonner';
148
+ import { updateProfile } from './actions';
149
+
150
+ export function ProfileForm() {
151
+ const { register, handleSubmit } = useForm({
152
+ resolver: zodResolver(schema),
153
+ });
154
+
155
+ const [state, formAction, isPending] = useActionState(
156
+ async (prev, data) => {
157
+ const result = await updateProfile(data);
158
+ if (result.success) toast.success('Profile updated');
159
+ else toast.error(result.error?.message);
160
+ return result;
161
+ },
162
+ { success: false }
163
+ );
164
+
165
+ function onSubmit(data) {
166
+ startTransition(() => formAction(data));
167
+ }
168
+
169
+ return (
170
+ <form onSubmit={handleSubmit(onSubmit)}>
171
+ <input {...register('name')} />
172
+ <button disabled={isPending}>Save</button>
173
+ </form>
174
+ );
175
+ }
176
+ ```
177
+
178
+ ---
179
+
180
+ ## Forbidden Patterns
181
+
182
+ | Pattern | Why |
183
+ |---------|-----|
184
+ | `pages/` directory | App Router only |
185
+ | `getServerSideProps`, `getStaticProps` | Use Server Components |
186
+ | `next/router` | Use `next/navigation` |
187
+ | Full-page client components | Bad perf |
188
+ | Fetching data with `useEffect` | Use Server Components |
189
+ | Direct Prisma in components | Use DAL |
190
+ | `HTTPException` from DAL | Keep DAL framework-agnostic |
191
+
192
+ ---
193
+
194
+ ## Do / Don't
195
+
196
+ ### Do
197
+
198
+ - Use `'use server'` actions as use-case boundaries
199
+ - Validate inputs with Zod before DB/auth logic
200
+ - Route all Prisma through repositories/DAL
201
+ - Return consistent `ActionResult` shapes
202
+ - Use explicit TS types for exports
203
+
204
+ ### Don't
205
+
206
+ - Don't call Prisma from components or actions directly
207
+ - Don't access auth inside DAL
208
+ - Don't return raw errors to client
209
+ - Don't put business logic in DAL
210
+ - Don't skip input validation