@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.
- package/LICENSE +3 -0
- package/README.md +90 -0
- package/bin/1aboveio-skills.mjs +18 -0
- package/package.json +28 -0
- package/runtime/skills/distribution/generated/recipes.json +1189 -0
- package/runtime/skills/distribution/scripts/bundles.mjs +280 -0
- package/runtime/skills/engineering/engineering-runtime/scripts/main-module.mjs +80 -0
- package/skills/backend/airflow-dag-develop/LICENSE +3 -0
- package/skills/backend/airflow-dag-develop/SKILL.md +111 -0
- package/skills/backend/app-debug/LICENSE +3 -0
- package/skills/backend/app-debug/SKILL.md +109 -0
- package/skills/backend/app-debug/references/common-errors.md +128 -0
- package/skills/backend/python-backend/LICENSE +3 -0
- package/skills/backend/python-backend/SKILL.md +326 -0
- package/skills/cicd-pipeline/cloud-build/LICENSE +3 -0
- package/skills/cicd-pipeline/cloud-build/SKILL.md +707 -0
- package/skills/cicd-pipeline/cloud-debug/LICENSE +3 -0
- package/skills/cicd-pipeline/cloud-debug/SKILL.md +316 -0
- package/skills/cicd-pipeline/cloud-debug/references/build-failures.md +238 -0
- package/skills/cicd-pipeline/cloud-debug/references/deploy-failures.md +376 -0
- package/skills/cicd-pipeline/cloud-debug/references/pipeline-failures.md +378 -0
- package/skills/cicd-pipeline/cloud-deploy/LICENSE +3 -0
- package/skills/cicd-pipeline/cloud-deploy/SKILL.md +229 -0
- package/skills/cicd-pipeline/cloud-deploy/references/config-templates.md +257 -0
- package/skills/cicd-pipeline/docker/LICENSE +3 -0
- package/skills/cicd-pipeline/docker/SKILL.md +126 -0
- package/skills/cicd-pipeline/google-cloud/LICENSE +3 -0
- package/skills/cicd-pipeline/google-cloud/SKILL.md +118 -0
- package/skills/cicd-pipeline/google-cloud/references/gcs.md +469 -0
- package/skills/cicd-pipeline/google-cloud/references/iam.md +451 -0
- package/skills/cicd-pipeline/google-cloud/references/project.md +349 -0
- package/skills/cicd-pipeline/google-cloud/references/secrets.md +336 -0
- package/skills/cicd-pipeline/google-cloud/references/vpc.md +312 -0
- package/skills/cicd-pipeline/google-cloud/scripts/create-sa.sh +36 -0
- package/skills/cicd-pipeline/google-cloud/scripts/gcp-config.sh +31 -0
- package/skills/cicd-pipeline/google-cloud/scripts/grant-iap.sh +41 -0
- package/skills/cicd-pipeline/google-cloud/scripts/setup-secrets.sh +48 -0
- package/skills/cicd-pipeline/mergify/LICENSE +3 -0
- package/skills/cicd-pipeline/mergify/SKILL.md +138 -0
- package/skills/cicd-pipeline/mergify/assets/templates/mergify.yml +237 -0
- package/skills/cicd-pipeline/mergify/assets/templates/ruleset.json +46 -0
- package/skills/cicd-pipeline/mergify/references/branch-protection.md +277 -0
- package/skills/cicd-pipeline/mergify/references/configuration.md +183 -0
- package/skills/cicd-pipeline/mergify/references/diagnosis.md +73 -0
- package/skills/cicd-pipeline/mergify/references/traps.md +78 -0
- package/skills/cicd-pipeline/mergify/references/watch-contract.md +218 -0
- package/skills/cicd-pipeline/mergify/scripts/audit-core.mjs +131 -0
- package/skills/cicd-pipeline/mergify/scripts/audit.mjs +4 -0
- package/skills/cicd-pipeline/mergify/scripts/watch-pr-delivery-core.mjs +663 -0
- package/skills/cicd-pipeline/mergify/scripts/watch-pr-delivery.mjs +4 -0
- package/skills/cicd-pipeline/podman/LICENSE +3 -0
- package/skills/cicd-pipeline/podman/SKILL.md +70 -0
- package/skills/cicd-pipeline/podman/agents/openai.yaml +4 -0
- package/skills/cicd-pipeline/podman/assets/templates/podman-compose-socket-directory.yml +6 -0
- package/skills/cicd-pipeline/podman/assets/templates/podman-service-override.conf +3 -0
- package/skills/cicd-pipeline/podman/references/compose-compatibility.md +70 -0
- package/skills/cicd-pipeline/podman/references/networking-and-ports.md +74 -0
- package/skills/cicd-pipeline/podman/references/rootless-services-and-sockets.md +156 -0
- package/skills/cicd-pipeline/podman/references/troubleshooting.md +98 -0
- package/skills/engineering/e2e-test/LICENSE +3 -0
- package/skills/engineering/e2e-test/SKILL.md +156 -0
- package/skills/engineering/e2e-test/assets/ci-gates.cloudbuild.yaml +272 -0
- package/skills/engineering/e2e-test/assets/ci-gates.github.yml +451 -0
- package/skills/engineering/e2e-test/assets/e2e-workflow.yml +282 -0
- package/skills/engineering/e2e-test/references/authoring/auth-flows.md +159 -0
- package/skills/engineering/e2e-test/references/authoring/playwright-config.md +71 -0
- package/skills/engineering/e2e-test/references/authoring/playwright-patterns.md +219 -0
- package/skills/engineering/e2e-test/references/authoring/test-skipping.md +44 -0
- package/skills/engineering/e2e-test/references/ci-integration.md +121 -0
- package/skills/engineering/e2e-test/references/ci-playwright-container.md +280 -0
- package/skills/engineering/e2e-test/references/debugging.md +36 -0
- package/skills/engineering/e2e-test/references/presentation-sweep.md +131 -0
- package/skills/engineering/e2e-test/references/reviewing.md +39 -0
- package/skills/engineering/e2e-test/references/route-discovery.md +50 -0
- package/skills/engineering/e2e-test/references/route-manifest.md +44 -0
- package/skills/engineering/e2e-test/scripts/detect-routes-fastapi.py +290 -0
- package/skills/engineering/e2e-test/scripts/detect-routes-nextjs.mjs +200 -0
- package/skills/engineering/e2e-test/scripts/post-visual-evidence.mjs +158 -0
- package/skills/engineering/e2e-test/scripts/presentation-checks.mjs +171 -0
- package/skills/engineering/e2e-test/scripts/presentation-perceivability.mjs +179 -0
- package/skills/engineering/e2e-test/scripts/presentation-reachability.mjs +154 -0
- package/skills/engineering/e2e-test/scripts/presentation-render-health.mjs +141 -0
- package/skills/engineering/e2e-test/scripts/presentation-sweep.mjs +148 -0
- package/skills/engineering/e2e-test/scripts/presentation-temporal.mjs +127 -0
- package/skills/engineering/e2e-test/scripts/presentation-visual.mjs +84 -0
- package/skills/engineering/e2e-test/scripts/project-route-manifest.mjs +75 -0
- package/skills/engineering/e2e-test/scripts/validate-manifest.mjs +106 -0
- package/skills/engineering/engineering-runtime/LICENSE +3 -0
- package/skills/engineering/engineering-runtime/SKILL.md +10 -0
- package/skills/engineering/engineering-runtime/agents/openai.yaml +6 -0
- package/skills/engineering/engineering-runtime/coherence/workflow.json +553 -0
- package/skills/engineering/engineering-runtime/scripts/exact-head-artifact.mjs +131 -0
- package/skills/engineering/engineering-runtime/scripts/head-check-set.mjs +398 -0
- package/skills/engineering/engineering-runtime/scripts/main-module.mjs +80 -0
- package/skills/engineering/engineering-runtime/scripts/mergify-yaml.mjs +11 -0
- package/skills/engineering/engineering-runtime/scripts/package-lock.json +43 -0
- package/skills/engineering/engineering-runtime/scripts/package.json +10 -0
- package/skills/engineering/engineering-runtime/scripts/required-check-plan.mjs +223 -0
- package/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +576 -0
- package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +166 -0
- package/skills/engineering/ensure-coverage/LICENSE +3 -0
- package/skills/engineering/ensure-coverage/SKILL.md +136 -0
- package/skills/engineering/ensure-coverage/evals/evals.json +125 -0
- package/skills/engineering/ensure-coverage/references/breadth/coverage-ledger.md +91 -0
- package/skills/engineering/ensure-coverage/references/breadth/inventory-contract.md +83 -0
- package/skills/engineering/ensure-coverage/references/breadth/surface-baseline.md +44 -0
- package/skills/engineering/ensure-coverage/references/breadth/surface-discovery.md +16 -0
- package/skills/engineering/ensure-coverage/references/depth/characterization.md +68 -0
- package/skills/engineering/ensure-coverage/references/depth/coverage.config.example.json +25 -0
- package/skills/engineering/ensure-coverage/references/depth/grading.md +35 -0
- package/skills/engineering/ensure-coverage/references/depth/mock-policy.md +87 -0
- package/skills/engineering/ensure-coverage/references/depth/test-smells.md +23 -0
- package/skills/engineering/ensure-coverage/references/enforcement/ci-contract.md +164 -0
- package/skills/engineering/ensure-coverage/references/enforcement/hooks.md +85 -0
- package/skills/engineering/ensure-coverage/references/examples/coverage-ledger.md +109 -0
- package/skills/engineering/ensure-coverage/references/examples/refund-flow.md +33 -0
- package/skills/engineering/ensure-coverage/references/presentation/axis.md +78 -0
- package/skills/engineering/ensure-coverage/references/presentation/runner-contract.md +74 -0
- package/skills/engineering/ensure-coverage/references/process/audit-mode.md +33 -0
- package/skills/engineering/ensure-coverage/references/process/output-template.md +139 -0
- package/skills/engineering/ensure-coverage/references/process/review-contract-template.md +119 -0
- package/skills/engineering/ensure-coverage/references/process/scope-class.md +178 -0
- package/skills/engineering/ensure-coverage/references/process/test-strategy.md +55 -0
- package/skills/engineering/ensure-coverage/schemas/coverage-config.schema.json +45 -0
- package/skills/engineering/ensure-coverage/schemas/coverage-file.schema.json +93 -0
- package/skills/engineering/ensure-coverage/scripts/adapters/nextjs-inventory.mjs +178 -0
- package/skills/engineering/ensure-coverage/scripts/check-quarantine-expiry.mjs +101 -0
- package/skills/engineering/ensure-coverage/scripts/ci-audit.mjs +358 -0
- package/skills/engineering/ensure-coverage/scripts/coverage-checklist.mjs +494 -0
- package/skills/engineering/ensure-coverage/scripts/coverage-ledger.mjs +663 -0
- package/skills/engineering/ensure-coverage/scripts/design-parity.mjs +591 -0
- package/skills/engineering/ensure-coverage/scripts/evidence-block.mjs +367 -0
- package/skills/engineering/ensure-coverage/scripts/lint-tests.mjs +269 -0
- package/skills/engineering/ensure-coverage/scripts/mock-policy-config.mjs +176 -0
- package/skills/engineering/ensure-coverage/scripts/package-lock.json +76 -0
- package/skills/engineering/ensure-coverage/scripts/package.json +19 -0
- package/skills/engineering/ensure-coverage/scripts/scope-class.mjs +554 -0
- package/skills/engineering/harness-runtime/LICENSE +3 -0
- package/skills/engineering/harness-runtime/SKILL.md +18 -0
- package/skills/engineering/harness-runtime/agents/openai.yaml +6 -0
- package/skills/engineering/harness-runtime/bin/discover-models.mjs +4 -0
- package/skills/engineering/harness-runtime/bin/model-catalog.mjs +4 -0
- package/skills/engineering/harness-runtime/contracts.md +15 -0
- package/skills/engineering/harness-runtime/discover-models.mjs +392 -0
- package/skills/engineering/harness-runtime/fixtures/native-question-schemas.json +33 -0
- package/skills/engineering/harness-runtime/fixtures/question-responses.json +54 -0
- package/skills/engineering/harness-runtime/index.mjs +767 -0
- package/skills/engineering/harness-runtime/model-catalog.mjs +787 -0
- package/skills/engineering/harness-runtime/native-question-contracts.md +37 -0
- package/skills/engineering/harness-runtime/references/model-catalog-seed.json +159 -0
- package/skills/engineering/harness-runtime/references/model-catalog.md +57 -0
- package/skills/engineering/implement-and-pr/LICENSE +3 -0
- package/skills/engineering/implement-and-pr/SKILL.md +176 -0
- package/skills/engineering/implement-and-pr/references/ci-iteration.md +10 -0
- package/skills/engineering/implement-and-pr/references/closeout.md +27 -0
- package/skills/engineering/implement-and-pr/references/contract-complete-fix-rounds.md +34 -0
- package/skills/engineering/implement-and-pr/references/evidence-rules.md +39 -0
- package/skills/engineering/implement-and-pr/references/incremental-plan.md +16 -0
- package/skills/engineering/implement-and-pr/references/self-review.md +23 -0
- package/skills/engineering/implement-and-pr/references/tdd-mode.md +18 -0
- package/skills/engineering/resolve-issues/LICENSE +3 -0
- package/skills/engineering/resolve-issues/SKILL.md +167 -0
- package/skills/engineering/resolve-issues/generated/workflow-repair-policy.json +448 -0
- package/skills/engineering/resolve-issues/references/breaker.md +82 -0
- package/skills/engineering/resolve-issues/references/deliverables.md +27 -0
- package/skills/engineering/resolve-issues/references/delivery.md +108 -0
- package/skills/engineering/resolve-issues/references/evidence-lane.md +21 -0
- package/skills/engineering/resolve-issues/references/exact-head-ci.md +287 -0
- package/skills/engineering/resolve-issues/references/fan-out.md +33 -0
- package/skills/engineering/resolve-issues/references/finalization.md +68 -0
- package/skills/engineering/resolve-issues/references/guarantees.md +10 -0
- package/skills/engineering/resolve-issues/references/high-risk.md +29 -0
- package/skills/engineering/resolve-issues/references/incidents/848/README.md +156 -0
- package/skills/engineering/resolve-issues/references/intake.md +86 -0
- package/skills/engineering/resolve-issues/references/integration-gate.md +53 -0
- package/skills/engineering/resolve-issues/references/interference.md +87 -0
- package/skills/engineering/resolve-issues/references/loop.md +134 -0
- package/skills/engineering/resolve-issues/references/model-catalog.md +9 -0
- package/skills/engineering/resolve-issues/references/postmortem.md +27 -0
- package/skills/engineering/resolve-issues/references/pre-flight-model-slots.md +41 -0
- package/skills/engineering/resolve-issues/references/pre-flight-recording-and-checkout.md +48 -0
- package/skills/engineering/resolve-issues/references/pre-flight.md +41 -0
- package/skills/engineering/resolve-issues/references/regression-checklist.md +26 -0
- package/skills/engineering/resolve-issues/references/run-state.md +288 -0
- package/skills/engineering/resolve-issues/references/sandboxed-testing.md +48 -0
- package/skills/engineering/resolve-issues/references/spawn-contract.md +96 -0
- package/skills/engineering/resolve-issues/references/terminal-evidence-journal.md +40 -0
- package/skills/engineering/resolve-issues/references/why.md +653 -0
- package/skills/engineering/resolve-issues/schemas/fix-round.schema.json +49 -0
- package/skills/engineering/resolve-issues/scripts/combine-and-verify.mjs +721 -0
- package/skills/engineering/resolve-issues/scripts/component-candidate.mjs +962 -0
- package/skills/engineering/resolve-issues/scripts/contract-revision.mjs +220 -0
- package/skills/engineering/resolve-issues/scripts/detect-delivery-mode.mjs +420 -0
- package/skills/engineering/resolve-issues/scripts/detect-target-branch.mjs +256 -0
- package/skills/engineering/resolve-issues/scripts/detect-workspace-mode.mjs +168 -0
- package/skills/engineering/resolve-issues/scripts/discover-models.mjs +9 -0
- package/skills/engineering/resolve-issues/scripts/doctrine.mjs +62 -0
- package/skills/engineering/resolve-issues/scripts/evidence-lifecycle-contract.mjs +191 -0
- package/skills/engineering/resolve-issues/scripts/exact-head-ci.mjs +413 -0
- package/skills/engineering/resolve-issues/scripts/exact-head-github-provider.mjs +332 -0
- package/skills/engineering/resolve-issues/scripts/finalize.mjs +488 -0
- package/skills/engineering/resolve-issues/scripts/fix-rounds.mjs +3307 -0
- package/skills/engineering/resolve-issues/scripts/fixtures/evidence-lifecycle-circular-1001.json +16 -0
- package/skills/engineering/resolve-issues/scripts/fixtures/evidence-lifecycle-valid-sequencing.json +51 -0
- package/skills/engineering/resolve-issues/scripts/fixtures/fmm-express-830-component-candidate.json +17 -0
- package/skills/engineering/resolve-issues/scripts/fixtures/head-check-set-1081.json +166 -0
- package/skills/engineering/resolve-issues/scripts/gate-value-series.mjs +92 -0
- package/skills/engineering/resolve-issues/scripts/guide-index.mjs +73 -0
- package/skills/engineering/resolve-issues/scripts/head-check-set.mjs +159 -0
- package/skills/engineering/resolve-issues/scripts/interference.mjs +427 -0
- package/skills/engineering/resolve-issues/scripts/model-catalog.mjs +9 -0
- package/skills/engineering/resolve-issues/scripts/next-operations.mjs +419 -0
- package/skills/engineering/resolve-issues/scripts/postmortem.mjs +909 -0
- package/skills/engineering/resolve-issues/scripts/preflight-questions.mjs +322 -0
- package/skills/engineering/resolve-issues/scripts/reconcile-contained-unit-prs.mjs +415 -0
- package/skills/engineering/resolve-issues/scripts/release-state-contract.mjs +697 -0
- package/skills/engineering/resolve-issues/scripts/report.mjs +494 -0
- package/skills/engineering/resolve-issues/scripts/required-check-plan.mjs +172 -0
- package/skills/engineering/resolve-issues/scripts/round-metadata.mjs +79 -0
- package/skills/engineering/resolve-issues/scripts/run-state-review6-cases.mjs +334 -0
- package/skills/engineering/resolve-issues/scripts/run-state.mjs +4784 -0
- package/skills/engineering/resolve-issues/scripts/sandbox-selftest.mjs +395 -0
- package/skills/engineering/resolve-issues/scripts/spawn-contract.mjs +290 -0
- package/skills/engineering/resolve-issues/scripts/terminal-dispositions.mjs +170 -0
- package/skills/engineering/resolve-issues/scripts/terminal-evidence-journal.mjs +293 -0
- package/skills/engineering/resolve-issues/scripts/unit-kind.mjs +197 -0
- package/skills/engineering/resolve-issues/scripts/unit-lifecycle.mjs +127 -0
- package/skills/engineering/resolve-issues/scripts/watch-delivery.mjs +893 -0
- package/skills/engineering/resolve-issues/scripts/workspaces.mjs +829 -0
- package/skills/engineering/resolve-issues/workflows/independent-review.workflow.js +290 -0
- package/skills/engineering/resolve-issues/workflows/prior-art-scan.workflow.js +80 -0
- package/skills/engineering/resolve-issues/workflows/workflow-smoke.mjs +102 -0
- package/skills/engineering/resolve-release/LICENSE +3 -0
- package/skills/engineering/resolve-release/SKILL.md +112 -0
- package/skills/engineering/resolve-release/references/assembly.md +137 -0
- package/skills/engineering/resolve-release/references/auto-when-green.md +56 -0
- package/skills/engineering/resolve-release/references/candidate.md +167 -0
- package/skills/engineering/resolve-release/references/exposure.md +178 -0
- package/skills/engineering/resolve-release/references/handoff.md +24 -0
- package/skills/engineering/resolve-release/references/postmortem.md +230 -0
- package/skills/engineering/resolve-release/references/preflight.md +207 -0
- package/skills/engineering/resolve-release/references/principles.md +94 -0
- package/skills/engineering/resolve-release/references/regression-checklist.md +36 -0
- package/skills/engineering/resolve-release/references/related-skills.md +12 -0
- package/skills/engineering/resolve-release/references/routing.md +149 -0
- package/skills/engineering/resolve-release/references/verified-sha-github-flow.md +285 -0
- package/skills/engineering/resolve-release/references/versioning.md +202 -0
- package/skills/engineering/resolve-release/references/why.md +53 -0
- package/skills/engineering/resolve-release/scripts/adapter-completion-artifact.mjs +389 -0
- package/skills/engineering/resolve-release/scripts/build-changes.mjs +209 -0
- package/skills/engineering/resolve-release/scripts/candidate-hygiene.mjs +407 -0
- package/skills/engineering/resolve-release/scripts/candidate-identity.mjs +904 -0
- package/skills/engineering/resolve-release/scripts/candidate-traffic.mjs +81 -0
- package/skills/engineering/resolve-release/scripts/checked-adapter-loader.mjs +612 -0
- package/skills/engineering/resolve-release/scripts/close-attempt.mjs +135 -0
- package/skills/engineering/resolve-release/scripts/closeout-release.mjs +161 -0
- package/skills/engineering/resolve-release/scripts/doctrine.mjs +106 -0
- package/skills/engineering/resolve-release/scripts/durable-processing.mjs +522 -0
- package/skills/engineering/resolve-release/scripts/ensure-target-green.mjs +659 -0
- package/skills/engineering/resolve-release/scripts/evidence-bundle.mjs +1014 -0
- package/skills/engineering/resolve-release/scripts/finalize-release.mjs +526 -0
- package/skills/engineering/resolve-release/scripts/fixtures/durable-processing-adapter.mjs +169 -0
- package/skills/engineering/resolve-release/scripts/green-gate.mjs +599 -0
- package/skills/engineering/resolve-release/scripts/isolated-adapter-evaluator.mjs +752 -0
- package/skills/engineering/resolve-release/scripts/metadata-pr-status.mjs +56 -0
- package/skills/engineering/resolve-release/scripts/metadata-sync.mjs +1538 -0
- package/skills/engineering/resolve-release/scripts/postmortem.mjs +381 -0
- package/skills/engineering/resolve-release/scripts/preflight-probes.mjs +498 -0
- package/skills/engineering/resolve-release/scripts/production-endpoints.mjs +326 -0
- package/skills/engineering/resolve-release/scripts/rc-circuit-breaker.mjs +272 -0
- package/skills/engineering/resolve-release/scripts/report.mjs +417 -0
- package/skills/engineering/resolve-release/scripts/reprobe-credentials.mjs +114 -0
- package/skills/engineering/resolve-release/scripts/revalidate-candidate.mjs +238 -0
- package/skills/engineering/resolve-release/scripts/review-packet.mjs +503 -0
- package/skills/engineering/resolve-release/scripts/rollback-floor.mjs +263 -0
- package/skills/engineering/resolve-release/scripts/version-assert.mjs +339 -0
- package/skills/engineering/resolve-release/scripts/version-postmortem.mjs +485 -0
- package/skills/engineering/resolve-release/scripts/version.mjs +1199 -0
- package/skills/engineering/resolve-release/scripts/watch-candidate-delivery.mjs +449 -0
- package/skills/engineering/resolve-release/vendor/ACORN-LICENSE +21 -0
- package/skills/engineering/resolve-release/vendor/README.md +60 -0
- package/skills/engineering/resolve-release/vendor/acorn.mjs +6233 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/LICENSE +21 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/README.md +341 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/README.template.md +70 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-TAV5CUKK.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-TAV5CUKK.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-V2S4ZYJR.mjs +7 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-V2S4ZYJR.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.d.mts +2033 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.d.ts +2033 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.js +7 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.js.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-ES6BEMUI.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-ES6BEMUI.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-asyncify-2EFITU5U.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-asyncify-2EFITU5U.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/core/package.json +49 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/LICENSE +21 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/README.md +5 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.d.mts +549 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.d.ts +549 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.js +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.js.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/package.json +36 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/LICENSE +47 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/README.md +82 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.browser.d.ts +11 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.browser.mjs +22 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cjs +21 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cloudflare.cjs +21 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cloudflare.d.ts +11 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.d.ts +11 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.mjs +25 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.wasm +0 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.d.mts +85 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.d.ts +85 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.js +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.js.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.d.mts +20 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.d.ts +20 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.js +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.js.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.mjs +2 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.mjs.map +1 -0
- package/skills/engineering/resolve-release/vendor/quickjs/release-sync/package.json +61 -0
- package/skills/engineering/review-pr/LICENSE +3 -0
- package/skills/engineering/review-pr/SKILL.md +123 -0
- package/skills/engineering/review-pr/references/adversarial-reviewer-prompt.md +42 -0
- package/skills/engineering/review-pr/references/code-correctness.md +5 -0
- package/skills/engineering/review-pr/references/contract-freshness.md +9 -0
- package/skills/engineering/review-pr/references/coordination.md +18 -0
- package/skills/engineering/review-pr/references/domain-hazards.md +123 -0
- package/skills/engineering/review-pr/references/finding-themes.md +7 -0
- package/skills/engineering/review-pr/references/github-posting.md +98 -0
- package/skills/engineering/review-pr/references/golden-path-smoke.md +5 -0
- package/skills/engineering/review-pr/references/incremental-output.md +16 -0
- package/skills/engineering/review-pr/references/inputs-and-discovery.md +31 -0
- package/skills/engineering/review-pr/references/output-format.md +99 -0
- package/skills/engineering/review-pr/references/over-mock-screen.md +7 -0
- package/skills/engineering/review-pr/references/promotion-prs.md +16 -0
- package/skills/engineering/review-pr/references/re-review.md +18 -0
- package/skills/engineering/review-pr/references/review-method.md +199 -0
- package/skills/engineering/review-pr/references/review-mode.md +30 -0
- package/skills/engineering/review-pr/references/review-posture.md +53 -0
- package/skills/engineering/review-pr/references/round1-depth.md +62 -0
- package/skills/engineering/review-pr/references/scripts.md +17 -0
- package/skills/engineering/review-pr/references/workflow.md +16 -0
- package/skills/engineering/review-pr/schemas/findings.schema.json +282 -0
- package/skills/engineering/review-pr/scripts/finding-contract.mjs +285 -0
- package/skills/engineering/review-pr/scripts/post-review.mjs +405 -0
- package/skills/engineering/review-pr/scripts/pr-context.mjs +207 -0
- package/skills/engineering/review-pr/scripts/scan-diff.mjs +365 -0
- package/skills/engineering/review-pr/scripts/theme-contract.mjs +57 -0
- package/skills/engineering/smoke/LICENSE +3 -0
- package/skills/engineering/smoke/SKILL.md +131 -0
- package/skills/engineering/smoke/assets/smoke.manifest.example.json +53 -0
- package/skills/engineering/smoke/references/manifest.md +192 -0
- package/skills/engineering/smoke/scripts/smoke.mjs +713 -0
- package/skills/fullstack/better-auth/LICENSE +3 -0
- package/skills/fullstack/better-auth/SKILL.md +601 -0
- package/skills/fullstack/better-auth/references/feishu-api.md +270 -0
- package/skills/fullstack/monorepo/LICENSE +3 -0
- package/skills/fullstack/monorepo/SKILL.md +465 -0
- package/skills/fullstack/nextjs-fullstack/LICENSE +3 -0
- package/skills/fullstack/nextjs-fullstack/SKILL.md +210 -0
- package/skills/fullstack/nextjs-fullstack/conventions.md +318 -0
- package/skills/fullstack/nextjs-fullstack/frontend-conventions.md +61 -0
- package/skills/fullstack/nextjs-fullstack/nextjs16.md +287 -0
- package/skills/fullstack/nextjs-fullstack/server-actions.md +409 -0
- package/skills/fullstack/prisma-setup/LICENSE +3 -0
- package/skills/fullstack/prisma-setup/SKILL.md +180 -0
- package/skills/fullstack/prisma-setup/nextjs.md +258 -0
- package/skills/fullstack/prisma-setup/turborepo.md +301 -0
- package/skills/fullstack/shadcn/LICENSE +3 -0
- package/skills/fullstack/shadcn/SKILL.md +119 -0
- package/skills/fullstack/shadcn/assets/shadcn-small.png +0 -0
- package/skills/fullstack/shadcn/assets/shadcn.png +0 -0
- package/skills/fullstack/shadcn/cli.md +411 -0
- package/skills/fullstack/shadcn/customization.md +224 -0
- package/skills/fullstack/shadcn/evals/evals.json +90 -0
- package/skills/fullstack/shadcn/mcp.md +101 -0
- package/skills/fullstack/shadcn/rules/base-vs-radix.md +323 -0
- package/skills/fullstack/shadcn/rules/component-selection.md +67 -0
- package/skills/fullstack/shadcn/rules/composition.md +195 -0
- package/skills/fullstack/shadcn/rules/data-table.md +201 -0
- package/skills/fullstack/shadcn/rules/forms.md +255 -0
- package/skills/fullstack/shadcn/rules/icons.md +103 -0
- package/skills/fullstack/shadcn/rules/styling.md +167 -0
- package/skills/fullstack/zod-v4/LICENSE +3 -0
- package/skills/fullstack/zod-v4/SKILL.md +287 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: podman
|
|
3
|
+
description: "Debug, design, or fix Podman: rootless/rootful containers, pods, podman-compose, the socket and systemd services, Docker-compatible API (DOCKER_HOST/CONTAINER_HOST), networking, volumes, SELinux labels, Docker migration, and CI/SSH provisioning of rootless sockets (user lingering, XDG_RUNTIME_DIR). Covers FailedToOpenSocket and systemctl --user DBUS/XDG errors."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Podman Operations
|
|
7
|
+
|
|
8
|
+
## Core Rule
|
|
9
|
+
|
|
10
|
+
Treat Podman as its own container runtime first. Use Docker-compatible behavior deliberately, and always verify whether a problem belongs to Podman itself, the compatibility socket/API, networking, storage, SELinux, or compose translation.
|
|
11
|
+
|
|
12
|
+
## Decision Path
|
|
13
|
+
|
|
14
|
+
1. Classify the environment.
|
|
15
|
+
- Rootless or rootful.
|
|
16
|
+
- Direct `podman` CLI, `podman-compose`, or Docker-compatible API.
|
|
17
|
+
- Single containers, pods, or compose-managed services.
|
|
18
|
+
- For the triage checklist, read [troubleshooting.md](references/troubleshooting.md).
|
|
19
|
+
|
|
20
|
+
2. If Docker-compatible tooling is involved, verify the socket/API layer.
|
|
21
|
+
- Prefer explicit `DOCKER_HOST` over assuming `/var/run/docker.sock`.
|
|
22
|
+
- Mount socket directories instead of socket files when a container needs access to a rootless socket.
|
|
23
|
+
- Keep the API service lifetime explicit when long-lived clients depend on it.
|
|
24
|
+
- A systemd `User=` **system** service does not get `XDG_RUNTIME_DIR`; set it (or `CONTAINER_HOST`/`DOCKER_HOST`) in a unit drop-in to reach that user's rootless socket. Provisioning `systemctl --user` over SSH needs explicit `XDG_RUNTIME_DIR` + `DBUS_SESSION_BUS_ADDRESS` and lingering on.
|
|
25
|
+
- For details, read [rootless-services-and-sockets.md](references/rootless-services-and-sockets.md).
|
|
26
|
+
|
|
27
|
+
3. If ports or connectivity fail, inspect Podman networking before changing application code.
|
|
28
|
+
- Check port publishing, rootless networking backend, host/container address assumptions, pod membership, and DNS.
|
|
29
|
+
- For details, read [networking-and-ports.md](references/networking-and-ports.md).
|
|
30
|
+
|
|
31
|
+
4. If compose behavior differs from Docker Compose, isolate compose translation from runtime behavior.
|
|
32
|
+
- Compare generated containers, pods, networks, volume mounts, environment variables, and health checks.
|
|
33
|
+
- For details, read [compose-compatibility.md](references/compose-compatibility.md).
|
|
34
|
+
|
|
35
|
+
## Fast Checks
|
|
36
|
+
|
|
37
|
+
Inspect runtime mode and version:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
podman info
|
|
41
|
+
podman version
|
|
42
|
+
podman system connection list
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Inspect containers, pods, networks, and published ports:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
podman ps -a
|
|
49
|
+
podman pod ps
|
|
50
|
+
podman network ls
|
|
51
|
+
podman port --all
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Verify the rootless socket from the host:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
systemctl --user status podman.socket podman.service
|
|
58
|
+
test -S /run/user/$(id -u)/podman/podman.sock
|
|
59
|
+
curl --unix-socket /run/user/$(id -u)/podman/podman.sock \
|
|
60
|
+
http://localhost/v4.0.0/libpod/info
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Review Heuristics
|
|
64
|
+
|
|
65
|
+
- Do not hide Podman runtime issues by hard-coding fixed host ports or privileged containers.
|
|
66
|
+
- Do not mount a rootless socket file directly when the socket may be restarted; mount the socket directory.
|
|
67
|
+
- Do not assume Docker Compose behavior maps exactly to `podman-compose`; inspect the realized containers.
|
|
68
|
+
- Persist socket, service, SELinux, and network fixes in provisioning or preflight code.
|
|
69
|
+
- Validate fixes with live `podman` commands, not only static config review.
|
|
70
|
+
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# Compose fragment for a container that needs rootless Podman's Docker-compatible API.
|
|
2
|
+
# Mount the socket directory rather than the socket file so socket restarts do not stale the mount.
|
|
3
|
+
environment:
|
|
4
|
+
DOCKER_HOST: "unix:///run/user/1000/podman/podman.sock"
|
|
5
|
+
volumes:
|
|
6
|
+
- /run/user/1000/podman:/run/user/1000/podman:z
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Compose Compatibility
|
|
2
|
+
|
|
3
|
+
Use this reference when `podman-compose` or `docker compose` against a Podman socket behaves differently from Docker Compose.
|
|
4
|
+
|
|
5
|
+
## Debug The Realized State
|
|
6
|
+
|
|
7
|
+
Do not rely only on the compose file. Inspect what Podman actually created:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
podman ps -a
|
|
11
|
+
podman pod ps
|
|
12
|
+
podman network ls
|
|
13
|
+
podman volume ls
|
|
14
|
+
podman inspect <container>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Check:
|
|
18
|
+
|
|
19
|
+
- container names
|
|
20
|
+
- pod membership
|
|
21
|
+
- networks and DNS names
|
|
22
|
+
- published ports
|
|
23
|
+
- bind mounts and SELinux labels
|
|
24
|
+
- environment variables
|
|
25
|
+
- health check command and status
|
|
26
|
+
|
|
27
|
+
## Environment Loading
|
|
28
|
+
|
|
29
|
+
`podman-compose` behavior around `.env` files and shell environment may differ from Docker Compose. If substitution is unreliable, explicitly load environment variables before invoking compose:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
set -a
|
|
33
|
+
. ./.env
|
|
34
|
+
set +a
|
|
35
|
+
podman-compose up -d
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Socket-Based Docker Compose
|
|
39
|
+
|
|
40
|
+
Some environments use Docker Compose as a client against Podman's Docker-compatible API:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
export DOCKER_HOST="unix:///run/user/$(id -u)/podman/podman.sock"
|
|
44
|
+
docker compose up -d
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
When doing this, validate the API service and socket first with [rootless-services-and-sockets.md](rootless-services-and-sockets.md).
|
|
48
|
+
|
|
49
|
+
## Health Checks
|
|
50
|
+
|
|
51
|
+
If compose waits forever or reports unhealthy:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
podman inspect <container> --format '{{json .State.Health}}'
|
|
55
|
+
podman logs <container>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Confirm the image contains the health-check binary. For example, `pg_isready` exists in official Postgres images, but a minimal custom image may not include the tool your compose file expects.
|
|
59
|
+
|
|
60
|
+
## SELinux Volume Labels
|
|
61
|
+
|
|
62
|
+
On SELinux systems, bind mounts often need labels:
|
|
63
|
+
|
|
64
|
+
```yaml
|
|
65
|
+
volumes:
|
|
66
|
+
- ./data:/var/lib/app:z
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Use `:z` for shared access and `:Z` for private relabeling. Avoid relabeling system paths.
|
|
70
|
+
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Networking And Ports
|
|
2
|
+
|
|
3
|
+
Use this reference when Podman containers cannot connect to each other, host services are unreachable, or published ports collide.
|
|
4
|
+
|
|
5
|
+
## Inspect Networking
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
podman network ls
|
|
9
|
+
podman network inspect <network>
|
|
10
|
+
podman pod ps
|
|
11
|
+
podman ps --format 'table {{.Names}}\t{{.Networks}}\t{{.Ports}}'
|
|
12
|
+
podman port --all
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Port Publishing
|
|
16
|
+
|
|
17
|
+
Avoid fixed host ports when multiple containers may run concurrently on the same host:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
podman run -p 5432 postgres:17
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Podman will choose an available host port. Discover it with:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
podman port <container> 5432
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Use fixed ports only when the host owns that port and concurrency is impossible:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
podman run -p 5432:5432 postgres:17
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Rootless Host Reachability
|
|
36
|
+
|
|
37
|
+
Rootless networking can differ by Podman version and backend. Validate the actual host alias instead of assuming Docker behavior:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
podman run --rm alpine getent hosts host.containers.internal
|
|
41
|
+
podman run --rm alpine sh -c 'ip route && cat /etc/resolv.conf'
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
If a container needs to reach a host service, test from inside a minimal container on the same network:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
podman run --rm --network <network> curlimages/curl:latest \
|
|
48
|
+
curl -v http://host.containers.internal:<port>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Pods
|
|
52
|
+
|
|
53
|
+
Containers in the same pod share a network namespace. Publish pod ports on the pod, then add containers:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
podman pod create --name app-pod -p 8080:8080
|
|
57
|
+
podman run -d --pod app-pod --name app app-image
|
|
58
|
+
podman run -d --pod app-pod --name sidecar sidecar-image
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Do not debug pod members as if each has independent port publishing.
|
|
62
|
+
|
|
63
|
+
## DNS And Service Names
|
|
64
|
+
|
|
65
|
+
For named containers on a user-defined network:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
podman network create app-net
|
|
69
|
+
podman run -d --name db --network app-net postgres:17
|
|
70
|
+
podman run --rm --network app-net alpine getent hosts db
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
If DNS fails, inspect the network backend and generated container/network configuration.
|
|
74
|
+
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Rootless Services And Sockets
|
|
2
|
+
|
|
3
|
+
Use this reference when long-running tools, nested containers, or Docker-compatible clients need to reach rootless Podman through a socket.
|
|
4
|
+
|
|
5
|
+
## Socket Paths
|
|
6
|
+
|
|
7
|
+
Rootless Podman usually exposes the API at:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
/run/user/$(id -u)/podman/podman.sock
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Rootful Podman commonly uses:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
/run/podman/podman.sock
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Prefer explicit environment configuration for Docker-compatible clients:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
export DOCKER_HOST="unix:///run/user/$(id -u)/podman/podman.sock"
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Mount Directory, Not Socket File
|
|
26
|
+
|
|
27
|
+
When a container needs access to a rootless Podman socket, mount the socket directory rather than the socket file:
|
|
28
|
+
|
|
29
|
+
```yaml
|
|
30
|
+
environment:
|
|
31
|
+
DOCKER_HOST: "unix:///run/user/1000/podman/podman.sock"
|
|
32
|
+
volumes:
|
|
33
|
+
- /run/user/1000/podman:/run/user/1000/podman:z
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Use `assets/templates/podman-compose-socket-directory.yml` for a copyable compose fragment.
|
|
37
|
+
|
|
38
|
+
Why:
|
|
39
|
+
|
|
40
|
+
- Socket activation can replace the socket inode.
|
|
41
|
+
- A direct file mount can become stale after `podman.socket` restarts.
|
|
42
|
+
- A directory mount lets the container see the replacement socket.
|
|
43
|
+
|
|
44
|
+
## Keep The API Service Alive
|
|
45
|
+
|
|
46
|
+
The socket-activated API service can exit after an idle timeout. If long-lived clients need stable access, install a user-level override:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
mkdir -p ~/.config/systemd/user/podman.service.d
|
|
50
|
+
cat > ~/.config/systemd/user/podman.service.d/override.conf <<'EOF'
|
|
51
|
+
[Service]
|
|
52
|
+
ExecStart=
|
|
53
|
+
ExecStart=/usr/bin/podman system service --time=0
|
|
54
|
+
EOF
|
|
55
|
+
|
|
56
|
+
systemctl --user daemon-reload
|
|
57
|
+
systemctl --user restart podman.socket
|
|
58
|
+
systemctl --user restart podman.service
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Use `assets/templates/podman-service-override.conf` for the override file.
|
|
62
|
+
|
|
63
|
+
Persist this in provisioning or preflight. Make it idempotent:
|
|
64
|
+
|
|
65
|
+
- write the override if missing or changed
|
|
66
|
+
- run `systemctl --user daemon-reload` only after changes
|
|
67
|
+
- start `podman.socket`
|
|
68
|
+
- start or restart `podman.service`
|
|
69
|
+
- verify the socket exists
|
|
70
|
+
|
|
71
|
+
## Reaching A Rootless Socket From A System Service (`User=`)
|
|
72
|
+
|
|
73
|
+
A common deploy shape: a long-running binary runs as a **systemd system service** with
|
|
74
|
+
`User=svcuser` and needs to reach `svcuser`'s **rootless** Podman socket.
|
|
75
|
+
|
|
76
|
+
Failure signature — the client falls back to `http://localhost` because it has no
|
|
77
|
+
socket path:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
Error: Was there a typo in the url or port?
|
|
81
|
+
path: "http://localhost/v4.0.0/libpod/pods/create" code: FailedToOpenSocket
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Cause: a `User=` **system** unit is not a user unit, so systemd does **not** set
|
|
85
|
+
`XDG_RUNTIME_DIR`. The Podman/Docker client then builds an empty
|
|
86
|
+
`$XDG_RUNTIME_DIR/podman/podman.sock` path and fails.
|
|
87
|
+
|
|
88
|
+
Fix — make the socket path explicit in a drop-in (pick one):
|
|
89
|
+
|
|
90
|
+
```ini
|
|
91
|
+
# /etc/systemd/system/<svc>.service.d/podman.conf
|
|
92
|
+
[Service]
|
|
93
|
+
# either point XDG_RUNTIME_DIR at the user's runtime dir...
|
|
94
|
+
Environment=XDG_RUNTIME_DIR=/run/user/<uid>
|
|
95
|
+
# ...or set the client host directly (equivalent, more explicit):
|
|
96
|
+
# Environment=CONTAINER_HOST=unix:///run/user/<uid>/podman/podman.sock
|
|
97
|
+
# Environment=DOCKER_HOST=unix:///run/user/<uid>/podman/podman.sock
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Then `daemon-reload` and restart the service. The user's `podman.socket` must also be
|
|
101
|
+
running and lingering enabled (next section). Compute `<uid>` at provision time
|
|
102
|
+
(`id -u svcuser`) — do not hard-code 1000.
|
|
103
|
+
|
|
104
|
+
## Enabling A User Socket Non-Interactively (provisioning / SSH)
|
|
105
|
+
|
|
106
|
+
`systemctl --user …` run via `sudo` over SSH (no login session) fails with:
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
Failed to connect to user scope bus via local transport:
|
|
110
|
+
$DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
There is no user D-Bus/session for the target user in that context. Provide both
|
|
114
|
+
explicitly (lingering must be on so `/run/user/<uid>` exists):
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
sudo loginctl enable-linger svcuser
|
|
118
|
+
UID_AG=$(id -u svcuser)
|
|
119
|
+
sudo -u svcuser \
|
|
120
|
+
XDG_RUNTIME_DIR=/run/user/$UID_AG \
|
|
121
|
+
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UID_AG/bus \
|
|
122
|
+
systemctl --user enable --now podman.socket
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
(`machinectl shell svcuser@` is an alternative that sets up the session for you.)
|
|
126
|
+
Make this idempotent in provisioning: enable-linger → enable+start `podman.socket`
|
|
127
|
+
with explicit env → verify the socket file exists.
|
|
128
|
+
|
|
129
|
+
## Validation
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
systemctl --user status podman.socket podman.service
|
|
133
|
+
curl --unix-socket /run/user/$(id -u)/podman/podman.sock \
|
|
134
|
+
http://localhost/v4.0.0/libpod/info
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
For a system service that uses the drop-in above, confirm it resolved the socket
|
|
138
|
+
(not `http://localhost`) in its own logs after restart.
|
|
139
|
+
|
|
140
|
+
For Docker-compatible clients:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
DOCKER_HOST="unix:///run/user/$(id -u)/podman/podman.sock" docker version
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
For stability after socket/service changes:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
for i in 1 2 3 4 5; do
|
|
150
|
+
DOCKER_HOST="unix:///run/user/$(id -u)/podman/podman.sock" \
|
|
151
|
+
docker version --format '{{.Server.Version}}' >/dev/null || exit 1
|
|
152
|
+
sleep 1
|
|
153
|
+
done
|
|
154
|
+
echo stable
|
|
155
|
+
```
|
|
156
|
+
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Podman Troubleshooting
|
|
2
|
+
|
|
3
|
+
Use this reference for general Podman failures before applying targeted fixes.
|
|
4
|
+
|
|
5
|
+
## First Classification
|
|
6
|
+
|
|
7
|
+
Answer these before editing configuration:
|
|
8
|
+
|
|
9
|
+
- Is Podman running rootless or rootful?
|
|
10
|
+
- Is the failing path using `podman`, `podman-compose`, or Docker-compatible API calls?
|
|
11
|
+
- Is the workload a single container, a pod, or compose-managed services?
|
|
12
|
+
- Is the failure in image pull, container create, network setup, health check, volume mount, permission, or cleanup?
|
|
13
|
+
|
|
14
|
+
## Core Commands
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
podman info
|
|
18
|
+
podman version
|
|
19
|
+
podman system df
|
|
20
|
+
podman ps -a
|
|
21
|
+
podman pod ps
|
|
22
|
+
podman images
|
|
23
|
+
podman network ls
|
|
24
|
+
podman volume ls
|
|
25
|
+
podman events --since 30m
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
For a specific container:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
podman inspect <container>
|
|
32
|
+
podman logs <container>
|
|
33
|
+
podman top <container>
|
|
34
|
+
podman port <container>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Rootless Checks
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
id
|
|
41
|
+
echo "${XDG_RUNTIME_DIR:-unset}"
|
|
42
|
+
test -d /run/user/$(id -u)
|
|
43
|
+
test -S /run/user/$(id -u)/podman/podman.sock
|
|
44
|
+
systemctl --user status podman.socket podman.service
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
If user services are unavailable after login/session changes, check lingering:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
loginctl show-user "$(id -un)" --property=Linger
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
If a client reports `FailedToOpenSocket` and falls back to `http://localhost/...`
|
|
54
|
+
(e.g. `path: "http://localhost/v4.0.0/libpod/..."`), `XDG_RUNTIME_DIR` is unset or
|
|
55
|
+
the socket path is empty. For a systemd `User=` system service reaching a rootless
|
|
56
|
+
socket, or for enabling `podman.socket` non-interactively over SSH, see
|
|
57
|
+
[rootless-services-and-sockets.md](rootless-services-and-sockets.md).
|
|
58
|
+
|
|
59
|
+
## Storage And Permission Checks
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
podman info --format '{{.Store.GraphRoot}}'
|
|
63
|
+
podman unshare cat /proc/self/uid_map
|
|
64
|
+
podman unshare cat /proc/self/gid_map
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
For host mounts:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
ls -ldZ <host-path>
|
|
71
|
+
podman unshare ls -ld <host-path>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
SELinux symptoms often appear as permission denied despite Unix permissions looking correct. Prefer `:z` or `:Z` mount labels where appropriate:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
podman run --rm -v "$PWD/data:/data:z" alpine ls -la /data
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Cleanup
|
|
81
|
+
|
|
82
|
+
Inspect before removing:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
podman ps -a
|
|
86
|
+
podman pod ps
|
|
87
|
+
podman network ls
|
|
88
|
+
podman volume ls
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Then clean targeted resources by ID/name. Use broad pruning only when the environment owns all local Podman state:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
podman container prune
|
|
95
|
+
podman pod prune
|
|
96
|
+
podman network prune
|
|
97
|
+
```
|
|
98
|
+
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: e2e-test
|
|
3
|
+
description: "Playwright end-to-end standard: the 3-tier suite (render-health / functional / journey), generated route manifest, presentation sweep, and CI route gates. Use when browser routes or user flows ship or change, or a Playwright test flakes. NOT for non-browser tests, defining what to test (ensure-coverage), or the curated ALIVE/DEAD gate (smoke)."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# E2E Testing Standard
|
|
7
|
+
|
|
8
|
+
This file is the **spine** — tiers, rules, and where this fits. Mechanics (route discovery, manifest projection, the presentation sweep, Playwright config, CI wiring) live in `references/`; load one only when the step needs it (see [Reference Map](#reference-map)).
|
|
9
|
+
|
|
10
|
+
## Where this fits (pipeline)
|
|
11
|
+
|
|
12
|
+
Not a pipeline stage — invoked by the stages as the **executable browser layer** for `ensure-coverage`'s doctrine. `ensure-coverage` defines *what must be proven* (required levels, the Coverage Ledger, the presentation floor) and owns the gate *contract* (`ensure-coverage/references/enforcement/ci-contract.md`); this skill is *how* browser/journey surfaces get proven and *the scripts CI runs*.
|
|
13
|
+
|
|
14
|
+
| Stage | This skill's role |
|
|
15
|
+
|---|---|
|
|
16
|
+
| `resolve-issues` | **orchestrate**: the issue→merge-ready loop that invokes this skill at the implement/verify steps |
|
|
17
|
+
| `to-issues` | route/journey discovery so issues are sliced as vertical journeys |
|
|
18
|
+
| `implement-and-pr` | **produce**: write tiered tests, regenerate the manifest, tag `@covers/@level`, run the presentation sweep locally |
|
|
19
|
+
| `review-pr` | **verify**: the [reviewing checklist](references/reviewing.md); confirm the sweep ran and the manifest isn't stale |
|
|
20
|
+
| **CI build** | **enforce**: route-detect, manifest-validate, the functional/journey suite, and the **presentation sweep as a separate blocking job** |
|
|
21
|
+
|
|
22
|
+
The **gate contract** lives in `ensure-coverage`; the **runnable templates** that satisfy it are in this skill's `assets/` (`ci-gates.cloudbuild.yaml`, `ci-gates.github.yml`). A repo copies a template; `ensure-coverage`'s `ci-audit.mjs` verifies it stays wired.
|
|
23
|
+
|
|
24
|
+
## Test Tiers
|
|
25
|
+
|
|
26
|
+
| Tier | Name | What to test | Required when |
|
|
27
|
+
|------|------|-------------|---------------|
|
|
28
|
+
| 1 | **Render-health** | Route loads, no crash, heading visible, no console errors (the `presentation:render-health` spine) | Every route/endpoint |
|
|
29
|
+
| 2 | **Functional** | Forms, filters, auth, API responses, error states | Routes with user interaction |
|
|
30
|
+
| 3 | **Journey** | Multi-step flows crossing pages/APIs — the **golden paths**: critical business flows whose failure means do-not-ship | Core business flows |
|
|
31
|
+
|
|
32
|
+
**Tier 3 is where the golden paths live.** A *golden path* is a Tier-3 journey whose failure alone means do-not-ship — not a separate test type. `smoke` authors nothing new: it **selects a curated `@smoke`-tagged subset of this tier** and gates it (ALIVE/DEAD) as the per-PR liveness floor, adding only curation, a binary verdict, and target-safety. Breadth across *all* core journeys is Tier 3's job; the do-not-ship *subset* is `smoke`'s.
|
|
33
|
+
|
|
34
|
+
## Verify e2e changes locally before the batch
|
|
35
|
+
|
|
36
|
+
A repo's merge queue re-validates the full browser matrix on the merged
|
|
37
|
+
candidate, so one e2e regression (or a bug in the e2e test/helper code itself)
|
|
38
|
+
fails the whole batch and resets every PR in it — 20-30 min per round. Before
|
|
39
|
+
relying on that gate, verify affected specs locally:
|
|
40
|
+
|
|
41
|
+
1. **Check the environment before assuming it can't run.** Docker/Podman +
|
|
42
|
+
PostgreSQL + cached Playwright browsers may all be present even when a doc
|
|
43
|
+
says the lane is "unavailable" — actually probe (`docker info`, `pg_isready`,
|
|
44
|
+
`ls ~/Library/Caches/ms-playwright`).
|
|
45
|
+
2. **Run the affected specs, not the whole suite** (repo-local runner, e.g.
|
|
46
|
+
`pnpm test:functional:shard 1 --grep <pattern>`; see the repo's E2E.md for
|
|
47
|
+
the exact command). A focused run is minutes; the full matrix is the
|
|
48
|
+
batch's job.
|
|
49
|
+
3. **Docker-space gotcha**: a full Docker VM disk surfaces as `tar: Cannot
|
|
50
|
+
create symlink ... No space left on device` inside the run — free it with
|
|
51
|
+
`docker system prune --volumes -f` and retry.
|
|
52
|
+
4. **Unit-test your own test/helper changes** where possible (a hydration
|
|
53
|
+
marker, a wait helper, a retry loop are all testable with mocked page/locator
|
|
54
|
+
objects) — that catches bugs the e2e run itself would only expose as flakes.
|
|
55
|
+
|
|
56
|
+
## Directory Structure
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
e2e/
|
|
60
|
+
├── route-manifest.json # generated projection (see references/route-manifest.md)
|
|
61
|
+
├── route-manifest.overlay.json # curated tier/ignore deviations
|
|
62
|
+
├── render/ # Tier 1 (render-health)
|
|
63
|
+
├── functional/ # Tier 2 (subdirs by feature: auth/, filters/, forms/)
|
|
64
|
+
├── journeys/ # Tier 3 (golden paths; do-not-ship subset tagged @smoke)
|
|
65
|
+
├── fixtures/ # Shared auth, test data
|
|
66
|
+
└── utils/ # Helpers
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Backend: `tests/e2e/` with `endpoint-manifest.json`, same tier subdirectories, `conftest.py`.
|
|
70
|
+
|
|
71
|
+
## Writing Tests
|
|
72
|
+
|
|
73
|
+
1. Every new route/endpoint needs at least a Tier 1 render-health test.
|
|
74
|
+
2. Interactive routes need Tier 2 tests (success + error + edge cases).
|
|
75
|
+
3. Core business flows need Tier 3 journey tests (the golden paths); tag the do-not-ship subset `@smoke` so the smoke gate selects it.
|
|
76
|
+
4. The manifest is **generated**, not hand-edited — regenerate it (see [route-manifest.md](references/route-manifest.md)); put curation in the overlay.
|
|
77
|
+
5. Use Given/When/Then comments; use `getByRole`/`getByLabel`/`getByText`, never CSS selectors; never `waitForTimeout()`.
|
|
78
|
+
6. Auth in shared fixtures — never duplicate across files.
|
|
79
|
+
7. **Tag every test with `// @covers <surface-id>` and `// @level <level>`** so ensure-coverage's `coverage-ledger.mjs` resolves your evidence. Untagged specs are invisible to the accounting gate. Use the presentation tokens for sweep/instrument specs.
|
|
80
|
+
8. **Never skip a test.** The committed suite contains only tests that run and assert — no `test.skip`/`xit`/`describe.skip`, no conditional skip, no disguised `if (!x) return`. A missing precondition is the test's *arrange* step. Pick the non-skip path by case:
|
|
81
|
+
|
|
82
|
+
| Situation | Instead of skip |
|
|
83
|
+
|---|---|
|
|
84
|
+
| Missing data / session / migration / flag / entity-state | **seed it** |
|
|
85
|
+
| Third-party dependency | **sandbox at the boundary** |
|
|
86
|
+
| Un-sandboxable external **or** genuine flake | **quarantine lane** (`@quarantine` tag — non-blocking, still runs+reports, graded `Unverified`) |
|
|
87
|
+
| Platform/capability-specific | **route** via project/matrix/tag |
|
|
88
|
+
| Behavior not built yet | **land the test with it** (TDD red→green) |
|
|
89
|
+
| Obsolete / wrong test | **delete it** |
|
|
90
|
+
| Can't run in any env we control | **manual-check doc**, tracked |
|
|
91
|
+
|
|
92
|
+
Full rationale + enforcement: [authoring/test-skipping.md](references/authoring/test-skipping.md). The `lint-tests.mjs` gate (`no-skip` rule) fails CI on a skip added in a PR; it also carries `no-fixed-timeout` (no `waitForTimeout`).
|
|
93
|
+
|
|
94
|
+
Locator patterns, tier examples, mocking → [authoring/playwright-patterns.md](references/authoring/playwright-patterns.md). Playwright config + AGENTS.md snippet → [authoring/playwright-config.md](references/authoring/playwright-config.md). No-skip policy (seed/quarantine/route/delete — never disable a test) → [authoring/test-skipping.md](references/authoring/test-skipping.md). Auth surfaces (login/signup/forgot-password — assert authenticated state not form presence; fake the email boundary) → [authoring/auth-flows.md](references/authoring/auth-flows.md).
|
|
95
|
+
|
|
96
|
+
**Lead every coverage deliverable with the verdict.** Whether you added tests, wrote a `notes.md`, or reviewed a PR, put a one-line verdict at the *top*: is this surface covered, do gaps remain, is it ship-ready? Then what the new tests prove (and deliberately do *not*), and concrete **follow-up action items** for anything uncovered (owner/level where known). The reader's first question is "is this safe to ship?" — answer it before the spec detail.
|
|
97
|
+
|
|
98
|
+
## Route Discovery & Coverage
|
|
99
|
+
|
|
100
|
+
Never audit coverage from memory — produce a deterministic route/endpoint inventory and classify reachability **first**. Full protocol + per-framework discovery sources: [route-discovery.md](references/route-discovery.md). The route manifest is a **generated projection** of ensure-coverage's surface inventory (no drift by construction): [route-manifest.md](references/route-manifest.md).
|
|
101
|
+
|
|
102
|
+
## Presentation Sweep (the third axis)
|
|
103
|
+
|
|
104
|
+
A green functional suite can pass while a route throws on render — if its only spec intercepts the route's own API, the real render path is never exercised. The **presentation sweep** opens every manifest route in a real browser (no first-party interception) and asserts the presentation floor **spine first** (`presentation:render-health`: no `pageerror`/`console.error`/error-boundary/5xx). It is a **separate gate** from the functional suite — a green functional run is not the presentation gate. The floor levels auto-apply to every route; **`presentation:visual`** is an **opt-in** pixel-baseline level a surface raises via its `*.coverage.yml`, run CI-only in a pinned Playwright container (`toHaveScreenshot()`). Instruments, the sweep command, fixtures, "mutate-health" (render-health held *through* a write), and the visual job/evidence step: [presentation-sweep.md](references/presentation-sweep.md).
|
|
105
|
+
|
|
106
|
+
## CI Enforcement
|
|
107
|
+
|
|
108
|
+
Blocking gates, each a separate job (per ensure-coverage's CI contract). The **per-PR floor**: inventory freshness, accounting (`coverage-ledger.mjs validate`), the presentation sweep, no-over-mock (`lint-tests --rules mock-internal-seam`), the Review-Contract checklist validate, quarantine auto-resurface, and the **curated E2E smoke gate** (gate 8 — boots the real app and drives the do-not-ship golden journeys; for browser paths a tiny curated subset driven through this skill's Playwright layer). Manifest validation proves a spec was *authored*; only the sweep proves the page *renders*; only smoke proves the selected golden journeys are *alive*. The **broad functional + journey suite (gate 4)** is **demoted off the per-PR critical path to the integration lane** (the integration-branch push; nightly optional) — required before release, not per-PR. Commands, templates, and the post-deploy pattern: [ci-integration.md](references/ci-integration.md).
|
|
109
|
+
|
|
110
|
+
**Wiring conventions** (encoded in the templates; `ci-audit.mjs` checks they stay):
|
|
111
|
+
|
|
112
|
+
- **Docker-preferred.** Every browser job runs in the **pinned official Playwright
|
|
113
|
+
container** (`mcr.microsoft.com/playwright:<version>`) — browsers ship in the image
|
|
114
|
+
(no per-job install), so the rendering environment is identical across jobs. The
|
|
115
|
+
plain-runner + `playwright install` alternative stays sanctioned but is not the
|
|
116
|
+
default. A missing browser shared library such as `libnspr4.so` means the job is in
|
|
117
|
+
the wrong container. Options, `docker run` for self-hosted runners,
|
|
118
|
+
`services.postgres` networking, native `container:` caveats:
|
|
119
|
+
[ci-playwright-container.md](references/ci-playwright-container.md).
|
|
120
|
+
- **5-minute PR lane.** PR-lane jobs carry `timeout-minutes: 5` / `timeout: 300s`;
|
|
121
|
+
golden paths run in parallel (workers; matrix fan-out when needed) so wall clock ≈
|
|
122
|
+
the slowest path. Actions/assertions time out at **15s**
|
|
123
|
+
([authoring/playwright-config.md](references/authoring/playwright-config.md)). Longer
|
|
124
|
+
leashes are for the integration-lane suite and auxiliary (quarantine/visual) jobs —
|
|
125
|
+
never the PR-lane gates.
|
|
126
|
+
- **One umbrella check.** On GitHub Actions, branch protection requires only the
|
|
127
|
+
**`all-gates`** job (it `needs:` every blocking gate) — a renamed or added gate can't
|
|
128
|
+
silently fall out of protection. Cloud Build needs none: the build's single status is
|
|
129
|
+
the check.
|
|
130
|
+
|
|
131
|
+
**Three lanes.** *PR lane* = the per-PR floor above. *Integration lane* = the broad functional/journey suite, on the integration-branch push (where the `resolve-issues` epic gate boots + smokes the assembled branch). *Release lane* = a **promotion to production**: don't re-run the mutating suite on prod — where the promotion fast-forwards, prod is the exact SHA the PR + integration gates already passed, so gate on *that* result (under GitHub Flow the release branch is rebased first, which demotes that result to a pre-filter). Prod gets only a **read-only smoke, run against a 0%-traffic candidate before traffic shifts**, under a **read-only production profile** (`prod-preview`/`prod-active`) — against production a declared synthetic tenant is not sufficient. See [ci-integration.md](references/ci-integration.md) → Three lanes.
|
|
132
|
+
|
|
133
|
+
## Reviewing PRs
|
|
134
|
+
|
|
135
|
+
Checklist + comment template: [reviewing.md](references/reviewing.md). Block on: route discovery not run, a new route without a manifest entry, an interactive route without Tier 2, or a browser-route change with the presentation sweep absent/warn-only.
|
|
136
|
+
|
|
137
|
+
## Reference Map
|
|
138
|
+
|
|
139
|
+
| When you need to… | Read |
|
|
140
|
+
|---|---|
|
|
141
|
+
| write tests (locators, tiers, mocking) | [authoring/playwright-patterns.md](references/authoring/playwright-patterns.md) |
|
|
142
|
+
| Playwright config + AGENTS.md snippet | [authoring/playwright-config.md](references/authoring/playwright-config.md) |
|
|
143
|
+
| no-skip policy + per-case solutions map | [authoring/test-skipping.md](references/authoring/test-skipping.md) |
|
|
144
|
+
| test auth flows (login / signup / forgot-password) | [authoring/auth-flows.md](references/authoring/auth-flows.md) |
|
|
145
|
+
| discover routes / classify reachability | [route-discovery.md](references/route-discovery.md) |
|
|
146
|
+
| (re)generate the route manifest, understand the projection | [route-manifest.md](references/route-manifest.md) |
|
|
147
|
+
| run/understand the presentation sweep + mutate-health | [presentation-sweep.md](references/presentation-sweep.md) |
|
|
148
|
+
| drive a route's real render when there's no in-app way in (prefer `agent-browser`) | [presentation-sweep.md → "No in-app way to view it"](references/presentation-sweep.md#no-in-app-way-to-view-it-is-not-blocked) |
|
|
149
|
+
| wire CI / gate templates / post-deploy pattern | [ci-integration.md](references/ci-integration.md) · `assets/ci-gates.*` |
|
|
150
|
+
| run Playwright in the pinned official container (preferred; incl. self-hosted Docker/Podman) | [ci-playwright-container.md](references/ci-playwright-container.md) |
|
|
151
|
+
| review a PR for E2E coverage | [reviewing.md](references/reviewing.md) |
|
|
152
|
+
| debug a failing E2E | [debugging.md](references/debugging.md) |
|
|
153
|
+
|
|
154
|
+
## Scripts
|
|
155
|
+
|
|
156
|
+
`detect-routes-nextjs.mjs` · `detect-routes-fastapi.py` (discovery) · `project-route-manifest.mjs` · `validate-manifest.mjs` (manifest) · `presentation-sweep.mjs` + `presentation-{render-health,checks,perceivability,reachability,temporal,visual}.mjs` (the sweep + instruments; `presentation-visual.mjs` is the **opt-in**, CI-only pixel-baseline gate) · `post-visual-evidence.mjs` (upserts the baseline/diff evidence comment to the issue + PR after baseline-regen).
|