@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,128 @@
1
+ # Common Runtime Errors — 1Above Stack
2
+
3
+ Known error patterns for `a1-*` services on Cloud Run. Format: symptom → likely cause → fix.
4
+
5
+ ---
6
+
7
+ ## Database Errors
8
+
9
+ ### `FATAL: password authentication failed for user "..."`
10
+ - **Cause:** Secret `database-url-a1-{env}` is pinned to an old version after DB password rotation, or a new secret version was added but the service wasn't redeployed.
11
+ - **Fix:** Add new secret version with updated DB URL, then redeploy the service. Verify the revision picks up `latest` version.
12
+
13
+ ### `sqlalchemy.exc.OperationalError: could not connect to server: No such file or directory`
14
+ - **Cause:** Cloud SQL Unix socket not mounted. `CLOUD_SQL_INSTANCE` env var is missing, wrong format, or Cloud SQL connection not added to the service.
15
+ - **Fix:** Redeploy with `--add-cloudsql-instances cosmic-heaven-479306-v5:us-central1:ai-dev` and ensure `CLOUD_SQL_INSTANCE=cosmic-heaven-479306-v5:us-central1:ai-dev` is set.
16
+
17
+ ### `sqlalchemy.exc.OperationalError: could not connect to server: Connection refused`
18
+ - **Cause:** TCP connection attempted instead of Unix socket, or Cloud SQL proxy not reachable. Often occurs when DB URL uses `localhost` or `127.0.0.1` instead of the socket path.
19
+ - **Fix:** DB URL for Cloud SQL on Cloud Run must use the Unix socket format: `postgresql+asyncpg://user:pass@/dbname?host=/cloudsql/PROJECT:REGION:INSTANCE`
20
+
21
+ ### `tortoise.exceptions.ConfigurationError: DB URL not defined or wrong format`
22
+ - **Cause:** Tortoise ORM initialized before the `DATABASE_URL` env var is resolved, or URL scheme is incompatible (`postgresql://` vs `postgres://` vs `asyncpg://`).
23
+ - **Fix:** Ensure Tortoise uses `asyncpg` scheme (`postgresql+asyncpg://` or `asyncpg://`). Confirm `DATABASE_URL` is present in the revision env vars. Check `Tortoise.init()` is awaited inside the app lifespan, not at module import time.
24
+
25
+ ### `asyncpg.exceptions.TooManyConnectionsError`
26
+ - **Cause:** Connection pool exhausted. Multiple cold starts creating new pools simultaneously, or pool size too large for Cloud SQL's max connection limit.
27
+ - **Fix:** Set `maxsize` on the connection pool (e.g. `maxsize=5`). Consider Cloud SQL connection pooling via PgBouncer or reduce min-instances if connection churn is the issue.
28
+
29
+ ---
30
+
31
+ ## Secret Manager Errors
32
+
33
+ ### `google.api_core.exceptions.PermissionDenied: Secret Manager API ... caller does not have permission`
34
+ - **Cause:** Cloud Run service account missing `roles/secretmanager.secretAccessor` on the project or specific secret.
35
+ - **Fix:**
36
+ ```bash
37
+ gcloud projects add-iam-policy-binding cosmic-heaven-479306-v5 \
38
+ --member="serviceAccount:SA_EMAIL" \
39
+ --role="roles/secretmanager.secretAccessor"
40
+ ```
41
+
42
+ ### `google.api_core.exceptions.NotFound: Secret ... not found`
43
+ - **Cause:** Secret name typo, wrong env suffix (`-dev` vs `-prod`), or secret was deleted.
44
+ - **Fix:** List secrets to confirm correct name: `gcloud secrets list --project cosmic-heaven-479306-v5 --filter="name~a1"`. Check env var that specifies the secret name.
45
+
46
+ ### `Secret Manager API has not been used in project ... before`
47
+ - **Cause:** Secret Manager API not enabled on the project (unlikely for existing project; more likely a wrong project ID).
48
+ - **Fix:** Verify `--project cosmic-heaven-479306-v5` is correct. Enable if needed: `gcloud services enable secretmanager.googleapis.com --project cosmic-heaven-479306-v5`
49
+
50
+ ---
51
+
52
+ ## Container / Config Errors
53
+
54
+ ### `Container failed to start. Failed to start and then listen on the port defined by the PORT environment variable.`
55
+ - **Cause (most common):** Application crash on startup — missing required env var, failed DB connection during init, or unhandled import error.
56
+ - **Cause (port mismatch):** App binding to hardcoded port instead of reading `$PORT`.
57
+ - **Fix:** Check startup logs immediately after this message. If port: ensure FastAPI runs on port `8000`, Next.js portal on `3000`, admin on `3001`. Confirm app reads `PORT` env var or matches Cloud Run's configured port.
58
+
59
+ ### `Revision failed, container listening on wrong port`
60
+ - **Cause:** Cloud Run sends traffic to port 8000 (or configured port) but container is binding to a different port.
61
+ - **Fix:** Update service port: `gcloud run services update SERVICE --port 8000 --region us-central1 --project cosmic-heaven-479306-v5`. Or fix the app to bind to `int(os.environ.get("PORT", 8000))`.
62
+
63
+ ### `Error: Cannot find module '...'` or `ModuleNotFoundError`
64
+ - **Cause:** Dependency not installed in Docker image, or wrong base image used.
65
+ - **Fix:** Rebuild and push a new image. Check `requirements.txt` / `pyproject.toml` / `package.json` includes the missing dep. This is a deploy-time issue — route to Cory or Suzzy + Watt.
66
+
67
+ ---
68
+
69
+ ## Resource / Performance Errors
70
+
71
+ ### `DEADLINE_EXCEEDED` on first request after idle
72
+ - **Cause:** `min-instances=0` (default) causes cold start. Heavy initialization (DB connection pool, model loading, etc.) exceeds Cloud Run's request timeout.
73
+ - **Fix (fast):** Set `min-instances=1` to keep one warm instance:
74
+ ```bash
75
+ gcloud run services update SERVICE-ENV \
76
+ --min-instances 1 \
77
+ --region us-central1 \
78
+ --project cosmic-heaven-479306-v5
79
+ ```
80
+ - **Fix (proper):** Reduce startup work — lazy-load heavy resources, move initialization out of module scope.
81
+
82
+ ### Exit code `137` / `OOMKilled`
83
+ - **Cause:** Container exceeded memory limit (default 256Mi on Cloud Run).
84
+ - **Fix:** Increase memory: `gcloud run services update SERVICE-ENV --memory 1Gi --region us-central1 --project cosmic-heaven-479306-v5`. If memory keeps growing, investigate for memory leaks.
85
+
86
+ ### `Request timeout` / `upstream request timeout`
87
+ - **Cause:** Request processing exceeds Cloud Run's request timeout (default 300s). Common in heavy data processing or slow DB queries.
88
+ - **Fix:** Increase timeout: `gcloud run services update SERVICE-ENV --timeout 600 --region us-central1 --project cosmic-heaven-479306-v5`. Or break long work into async tasks.
89
+
90
+ ---
91
+
92
+ ## Next.js / Frontend Errors
93
+
94
+ ### `Error: Dynamic server usage: headers`
95
+ - **Cause:** Using `headers()`, `cookies()`, or other dynamic APIs inside a component or route that Next.js attempted to statically render at build time.
96
+ - **Fix:** Add `export const dynamic = 'force-dynamic'` at the top of the page/route file. Or move the dynamic call inside a Server Component that is not statically cached.
97
+
98
+ ### `Hydration failed because the initial UI does not match what was rendered on the server`
99
+ - **Cause:** Server-rendered HTML differs from what React renders on the client. Common sources: `Date()`, `Math.random()`, `typeof window`, `localStorage` in render logic.
100
+ - **Fix:** Wrap client-only code in `useEffect`. Use `suppressHydrationWarning` only as last resort. For timestamps: format server-side and pass as prop, or use a stable seed.
101
+
102
+ ### `Error: ECONNREFUSED 127.0.0.1:PORT` (Next.js Server Component or Server Action)
103
+ - **Cause:** Server Component or Server Action making an HTTP call to an internal service using `localhost` or a hardcoded URL that isn't reachable from the Next.js container.
104
+ - **Fix:** Use the Cloud Run service URL (not localhost). Set the backend URL via env var (e.g. `BACKEND_URL=https://a1-engine-dev-xxx-uc.a.run.app`). Confirm the env var is present in the revision.
105
+
106
+ ### `TypeError: Failed to fetch` / `fetch failed` in Server Action
107
+ - **Cause:** Network call from Server Action failing. Could be DNS, wrong URL, or the target service is down.
108
+ - **Fix:** Log the full URL being fetched. Check target service is running: `gcloud run services describe TARGET --region us-central1 --project cosmic-heaven-479306-v5`. Confirm VPC/egress config if services are VPC-internal.
109
+
110
+ ### `Error: cookies() was called outside a request scope`
111
+ - **Cause:** `cookies()` called at module top level or in a static context.
112
+ - **Fix:** Move the call inside the request handler function body, not at module scope.
113
+
114
+ ---
115
+
116
+ ## FastAPI Errors
117
+
118
+ ### HTTP 422 Unprocessable Entity
119
+ - **Cause:** Request body or query params don't match the Pydantic schema. Often a client bug, but can also be a schema mismatch after an API change.
120
+ - **Fix:** Check the response body for `detail` — it includes the exact field and validation error. Confirm client is sending the correct payload shape.
121
+
122
+ ### HTTP 500 with `RuntimeError: no running event loop`
123
+ - **Cause:** Async code called from a sync context, or Tortoise ORM used before `Tortoise.init()` is awaited.
124
+ - **Fix:** Ensure all DB operations happen inside `async def` functions. Confirm the lifespan handler initializes Tortoise before the app accepts requests.
125
+
126
+ ### `fastapi.exceptions.HTTPException: 401 / 403`
127
+ - **Cause:** Auth middleware rejecting requests. JWT expired, wrong secret used to verify, or `auth-secret` mismatch between portal and engine.
128
+ - **Fix:** Check `auth-secret` secret is the same version across both services. Verify token expiry and issuer config.
@@ -0,0 +1,3 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 1AboveIO
@@ -0,0 +1,326 @@
1
+ ---
2
+ name: python-backend
3
+ description: Python backend conventions — architecture, design decisions, and implementation patterns. Read when designing or reviewing features involving FastAPI, Tortoise-ORM, Pydantic Settings, loguru, or uv dependency management.
4
+ ---
5
+
6
+ # Python Backend Conventions
7
+
8
+ **Stack:** Python 3.12 | FastAPI | Tortoise-ORM | Aerich | Pydantic v2 | loguru | uv | pytest
9
+
10
+ ## Critical Rule
11
+
12
+ Use **uv** for all environment, dependency, and tool commands. No raw `pip`, `poetry`, `pipenv`, or manual `venv`.
13
+
14
+ ---
15
+
16
+ ## Tooling & Commands
17
+
18
+ ### Dependencies
19
+
20
+ ```bash
21
+ # Runtime deps
22
+ uv add fastapi tortoise-orm aerich pydantic pydantic-settings loguru
23
+
24
+ # Dev deps
25
+ uv add --dev pytest ruff mypy
26
+ ```
27
+
28
+ ### Running Commands
29
+
30
+ ```bash
31
+ uv run uvicorn app.main:app --reload # Start app
32
+ uv run pytest # Run tests
33
+ uv run ruff check . # Lint
34
+ uv run mypy app # Type check
35
+ uv run aerich migrate # Run migrations
36
+ uv run aerich upgrade # Apply migrations
37
+ ```
38
+
39
+ ---
40
+
41
+ ## Architecture
42
+
43
+ ```
44
+ app/
45
+ ├── api/ # API Layer - routes, endpoints
46
+ ├── services/ # Service Layer - business logic
47
+ ├── dal/ # Data Access Layer - Tortoise queries
48
+ ├── models/ # Tortoise ORM models
49
+ ├── schemas/ # Pydantic schemas
50
+ └── core/ # Infrastructure
51
+ ├── config.py # Pydantic Settings
52
+ ├── logging.py # loguru configuration
53
+ ├── tortoise.py # DB init/close
54
+ ├── errors.py # Domain exceptions
55
+ └── security.py # Auth utilities
56
+ ```
57
+
58
+ ### Export Rule
59
+
60
+ All modules in `core`, `dal`, `services`, `schemas`, `api` must define `__all__`.
61
+ All packages (`__init__.py`) re-export the public API using `__all__`.
62
+
63
+ ---
64
+
65
+ ## Config Management
66
+
67
+ Location: `app/core/config.py`
68
+
69
+ ```python
70
+ from __future__ import annotations
71
+
72
+ from functools import lru_cache
73
+ from typing import Literal
74
+
75
+ from pydantic import AnyUrl
76
+ from pydantic_settings import BaseSettings, SettingsConfigDict
77
+
78
+ __all__ = ["Settings", "get_settings"]
79
+
80
+
81
+ class Settings(BaseSettings):
82
+ model_config = SettingsConfigDict(
83
+ env_file=".env",
84
+ env_file_encoding="utf-8",
85
+ extra="ignore",
86
+ )
87
+
88
+ ENV: Literal["local", "dev", "staging", "prod"] = "local"
89
+ DATABASE_URL: AnyUrl
90
+ LOG_LEVEL: str = "INFO"
91
+ APP_NAME: str = "Backend"
92
+ API_V1_PREFIX: str = "/api/v1"
93
+ JWT_SECRET_KEY: str
94
+ JWT_ALGORITHM: str = "HS256"
95
+ ACCESS_TOKEN_EXPIRE_MINUTES: int = 60
96
+
97
+
98
+ @lru_cache(maxsize=1)
99
+ def get_settings() -> Settings:
100
+ """Global, cached settings accessor."""
101
+ return Settings()
102
+ ```
103
+
104
+ **Rule:** Never create new `Settings()` manually; always use `get_settings()`.
105
+
106
+ ---
107
+
108
+ ## Logging
109
+
110
+ Location: `app/core/logging.py`
111
+
112
+ ```python
113
+ from __future__ import annotations
114
+
115
+ import sys
116
+ from loguru import logger
117
+
118
+ from app.core.config import get_settings
119
+
120
+ __all__ = ["logger", "configure_logging"]
121
+
122
+
123
+ def configure_logging() -> None:
124
+ """Configure global loguru logger. Call once at app startup."""
125
+ settings = get_settings()
126
+
127
+ logger.remove()
128
+ logger.add(
129
+ sys.stderr,
130
+ level=settings.LOG_LEVEL,
131
+ enqueue=True,
132
+ backtrace=False,
133
+ diagnose=False,
134
+ serialize=settings.ENV in ("staging", "prod"),
135
+ )
136
+ ```
137
+
138
+ **Rule:** Import `logger` from `app.core.logging` (not `loguru` directly).
139
+
140
+ ---
141
+
142
+ ## Tortoise-ORM & Aerich
143
+
144
+ Location: `app/core/tortoise.py`
145
+
146
+ ```python
147
+ from __future__ import annotations
148
+
149
+ from tortoise import Tortoise
150
+
151
+ from app.core.config import get_settings
152
+
153
+ __all__ = ["TORTOISE_ORM", "init_db", "close_db"]
154
+
155
+ settings = get_settings()
156
+
157
+ TORTOISE_ORM = {
158
+ "connections": {
159
+ "default": str(settings.DATABASE_URL),
160
+ },
161
+ "apps": {
162
+ "models": {
163
+ "models": ["app.models.user", "app.models.order", "aerich.models"],
164
+ "default_connection": "default",
165
+ },
166
+ },
167
+ }
168
+
169
+
170
+ async def init_db() -> None:
171
+ await Tortoise.init(config=TORTOISE_ORM)
172
+
173
+
174
+ async def close_db() -> None:
175
+ await Tortoise.close_connections()
176
+ ```
177
+
178
+ ---
179
+
180
+ ## Data Access Layer (DAL)
181
+
182
+ Location: `app/dal/**`
183
+
184
+ - Functional style, Tortoise only
185
+ - No FastAPI, no Pydantic, no auth, no logging
186
+
187
+ ```python
188
+ # app/dal/order_dal.py
189
+ from __future__ import annotations
190
+
191
+ from tortoise.transactions import in_transaction
192
+ from app.models.order import Order, OrderItem
193
+
194
+ __all__ = ["get_user_orders_with_items", "create_order_with_items"]
195
+
196
+
197
+ async def get_user_orders_with_items(
198
+ user_id: int,
199
+ limit: int = 20,
200
+ offset: int = 0,
201
+ ) -> list[Order]:
202
+ return await (
203
+ Order
204
+ .filter(user_id=user_id)
205
+ .prefetch_related("items")
206
+ .order_by("-created_at")
207
+ .offset(offset)
208
+ .limit(limit)
209
+ )
210
+
211
+
212
+ async def create_order_with_items(
213
+ user_id: int,
214
+ items: list[dict],
215
+ ) -> Order:
216
+ async with in_transaction() as conn:
217
+ order = await Order.using_db(conn).create(user_id=user_id)
218
+ for item in items:
219
+ await OrderItem.using_db(conn).create(order=order, **item)
220
+ return order
221
+ ```
222
+
223
+ ### Complexity Rule
224
+
225
+ - **Simple / one-off** queries: Direct Tortoise in services
226
+ - **Complex / reused / transactional**: DAL functions
227
+
228
+ ---
229
+
230
+ ## Service Layer
231
+
232
+ Location: `app/services/**`
233
+
234
+ - Center of business logic
235
+ - Uses DAL for complex queries
236
+ - Raises domain exceptions from `app/core/errors.py`
237
+ - Uses `logger` for business-level events
238
+
239
+ ```python
240
+ # app/services/order_service.py
241
+ from __future__ import annotations
242
+
243
+ from app.schemas.order import OrderCreate, OrderRead
244
+ from app.models.order import Order
245
+ from app.dal import get_user_orders_with_items, create_order_with_items
246
+ from app.core.errors import OrderNotFoundError, PermissionDeniedError
247
+ from app.core.logging import logger
248
+
249
+ __all__ = ["list_my_orders", "get_order_detail", "create_order"]
250
+
251
+
252
+ async def list_my_orders(
253
+ user_id: int,
254
+ limit: int = 20,
255
+ offset: int = 0,
256
+ ) -> list[OrderRead]:
257
+ orders = await get_user_orders_with_items(user_id, limit, offset)
258
+ logger.info("Listed orders", user_id=user_id, count=len(orders))
259
+ return [OrderRead.model_validate(o) for o in orders]
260
+ ```
261
+
262
+ ---
263
+
264
+ ## API Layer
265
+
266
+ Location: `app/api/**`
267
+
268
+ - Uses `APIRouter`, `Depends`, `HTTPException`, `status`
269
+ - Converts domain exceptions to HTTP status codes
270
+
271
+ ```python
272
+ # app/api/v1/orders.py
273
+ from __future__ import annotations
274
+
275
+ from fastapi import APIRouter, Depends, HTTPException, status
276
+ from app.schemas.order import OrderCreate, OrderRead
277
+ from app.services import list_my_orders, create_order, get_order_detail
278
+ from app.core.errors import OrderNotFoundError, PermissionDeniedError
279
+ from app.api.deps import get_current_user
280
+ from app.core.logging import logger
281
+
282
+ __all__ = ["router"]
283
+
284
+ router = APIRouter(prefix="/orders", tags=["orders"])
285
+
286
+
287
+ @router.get("/", response_model=list[OrderRead])
288
+ async def list_orders(current_user=Depends(get_current_user)) -> list[OrderRead]:
289
+ return await list_my_orders(user_id=current_user.id)
290
+
291
+
292
+ @router.get("/{order_id}", response_model=OrderRead)
293
+ async def get_order(
294
+ order_id: int,
295
+ current_user=Depends(get_current_user),
296
+ ) -> OrderRead:
297
+ try:
298
+ return await get_order_detail(current_user.id, order_id)
299
+ except OrderNotFoundError as e:
300
+ raise HTTPException(status_code=404, detail=str(e))
301
+ except PermissionDeniedError as e:
302
+ raise HTTPException(status_code=403, detail=str(e))
303
+ ```
304
+
305
+ ---
306
+
307
+ ## Do / Don't
308
+
309
+ ### Do
310
+
311
+ - Use **uv** for env, deps, and all Python tooling
312
+ - Use **Pydantic Settings** with `get_settings()` for config
313
+ - Use **loguru** via `app.core.logging.logger`
314
+ - Keep API -> Service -> DAL separation
315
+ - Use DAL for complex/reused DB logic
316
+ - Use `__all__` and package `__init__.py` for explicit exports
317
+ - Use pytest for all tests
318
+
319
+ ### Don't
320
+
321
+ - Don't use raw `pip`, `venv`, or `pytest` outside `uv run`
322
+ - Don't import `loguru.logger` directly
323
+ - Don't instantiate `Settings()` directly
324
+ - Don't call Tortoise from API routes
325
+ - Don't let DAL log or handle business logic
326
+ - Don't raise `HTTPException` outside the API layer
@@ -0,0 +1,3 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 1AboveIO