@xgent-ai/skills 0.3.0 → 0.5.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/README.md +117 -11
- package/bin/xgent-skills.js +269 -9
- package/docs/claude-context-goal-guard.md +125 -0
- package/docs/codex-context-goal-guard.md +110 -0
- package/hooks/claude/context-goal-guard.js +139 -0
- package/hooks/claude/settings.example.json +26 -0
- package/hooks/codex/context-goal-guard.py +189 -0
- package/hooks/codex/hooks.example.json +26 -0
- package/package.json +7 -1
- package/skills/agi-mode/SKILL.md +225 -0
- package/skills/agi-mode/evals/baseline-coverage.md +96 -0
- package/skills/agi-mode/evals/scenarios.md +331 -0
- package/skills/agi-mode/evals/test_check_evidence.py +141 -0
- package/skills/agi-mode/playbooks/arena.md +47 -0
- package/skills/agi-mode/playbooks/authoring-a-skill.md +26 -0
- package/skills/agi-mode/playbooks/autonomous-run.md +39 -0
- package/skills/agi-mode/playbooks/bug-fix.md +27 -0
- package/skills/agi-mode/playbooks/design-prototype.md +41 -0
- package/skills/agi-mode/playbooks/eval.md +72 -0
- package/skills/agi-mode/playbooks/feature.md +26 -0
- package/skills/agi-mode/playbooks/forensics.md +31 -0
- package/skills/agi-mode/playbooks/hillclimb.md +73 -0
- package/skills/agi-mode/playbooks/investigation.md +29 -0
- package/skills/agi-mode/playbooks/migration-refactoring.md +27 -0
- package/skills/agi-mode/playbooks/optimization.md +27 -0
- package/skills/agi-mode/playbooks/pr-lifecycle.md +38 -0
- package/skills/agi-mode/playbooks/program.md +57 -0
- package/skills/agi-mode/playbooks/reflection.md +41 -0
- package/skills/agi-mode/playbooks/resource-cleanup.md +24 -0
- package/skills/agi-mode/playbooks/review.md +27 -0
- package/skills/agi-mode/playbooks/session-handoff.md +37 -0
- package/skills/agi-mode/playbooks/shipping.md +35 -0
- package/skills/agi-mode/playbooks/ui-delivery.md +34 -0
- package/skills/agi-mode/playbooks/unblock.md +54 -0
- package/skills/agi-mode/principles/autonomous-decisions.md +21 -0
- package/skills/agi-mode/principles/behavioral-tests.md +21 -0
- package/skills/agi-mode/principles/boundary-discipline.md +21 -0
- package/skills/agi-mode/principles/bounded-convergence.md +21 -0
- package/skills/agi-mode/principles/build-leverage.md +21 -0
- package/skills/agi-mode/principles/challenge-premises.md +21 -0
- package/skills/agi-mode/principles/complete-migrations.md +21 -0
- package/skills/agi-mode/principles/context-as-state.md +21 -0
- package/skills/agi-mode/principles/critical-path-throughput.md +21 -0
- package/skills/agi-mode/principles/domain-models-and-types.md +23 -0
- package/skills/agi-mode/principles/evidence-lifetime.md +21 -0
- package/skills/agi-mode/principles/experience-first.md +21 -0
- package/skills/agi-mode/principles/explore-alternatives.md +21 -0
- package/skills/agi-mode/principles/falsifiable-verification.md +21 -0
- package/skills/agi-mode/principles/foundations-first.md +21 -0
- package/skills/agi-mode/principles/idempotent-effects.md +21 -0
- package/skills/agi-mode/principles/information-first.md +21 -0
- package/skills/agi-mode/principles/minimize-complexity.md +21 -0
- package/skills/agi-mode/principles/outcome-ownership.md +21 -0
- package/skills/agi-mode/principles/prove-real-outcomes.md +21 -0
- package/skills/agi-mode/principles/redesign-from-constraints.md +21 -0
- package/skills/agi-mode/principles/root-cause.md +21 -0
- package/skills/agi-mode/principles/state-ownership.md +21 -0
- package/skills/agi-mode/principles/structural-learning.md +21 -0
- package/skills/agi-mode/principles/verifiable-units.md +21 -0
- package/skills/agi-mode/references/continuity.md +75 -0
- package/skills/agi-mode/references/eval-protocol.md +71 -0
- package/skills/agi-mode/references/evidence-contract.md +57 -0
- package/skills/agi-mode/references/evolution-evidence.md +71 -0
- package/skills/agi-mode/references/experiments.md +82 -0
- package/skills/agi-mode/references/reflection/divergent-reviewer.md +45 -0
- package/skills/agi-mode/references/reflection/judgment-reviewer.md +44 -0
- package/skills/agi-mode/references/reflection/synthesizer.md +39 -0
- package/skills/agi-mode/references/reflection/tooling-reviewer.md +57 -0
- package/skills/agi-mode/references/skill-evolution.md +50 -0
- package/skills/agi-mode/scripts/check_evidence.py +147 -0
- package/skills/apply-code-review/SKILL.md +53 -0
- package/skills/apply-code-review/agents/openai.yaml +4 -0
- package/skills/apply-code-review/references/record-contract.md +77 -0
- package/skills/apply-doc-review/SKILL.md +79 -0
- package/skills/apply-doc-review/agents/openai.yaml +4 -0
- package/skills/apply-doc-review/references/disposition-contract.md +57 -0
- package/skills/archify/LICENSE +22 -0
- package/skills/archify/SKILL.md +137 -0
- package/skills/archify/THIRD_PARTY_NOTICES.md +69 -0
- package/skills/archify/assets/JetBrainsMono-OFL.txt +93 -0
- package/skills/archify/assets/template.html +14937 -0
- package/skills/archify/bin/archify.mjs +2139 -0
- package/skills/archify/bin/open-artifact.mjs +86 -0
- package/skills/archify/bin/preview.mjs +653 -0
- package/skills/archify/bin/visual-check.mjs +829 -0
- package/skills/archify/brand-marks/README.md +31 -0
- package/skills/archify/brand-marks/catalog.json +131 -0
- package/skills/archify/delta/architecture-delta.mjs +1232 -0
- package/skills/archify/examples/agent-run.lifecycle.json +60 -0
- package/skills/archify/examples/agent-tool-call.workflow.json +94 -0
- package/skills/archify/examples/async-job-roundtrip.sequence.json +61 -0
- package/skills/archify/examples/brand-aware-delivery.architecture.json +47 -0
- package/skills/archify/examples/cache-miss-request.sequence.json +82 -0
- package/skills/archify/examples/checkout-platform.base.architecture.json +31 -0
- package/skills/archify/examples/checkout-platform.head.architecture.json +31 -0
- package/skills/archify/examples/dataflow-product-analytics.html +15048 -0
- package/skills/archify/examples/deployment-release.lifecycle.json +49 -0
- package/skills/archify/examples/event-stream.dataflow.json +57 -0
- package/skills/archify/examples/incident-response.workflow.json +64 -0
- package/skills/archify/examples/lifecycle-agent-run.html +14983 -0
- package/skills/archify/examples/product-analytics.dataflow.json +76 -0
- package/skills/archify/examples/production-deployment.architecture.json +71 -0
- package/skills/archify/examples/release-delivery.workflow.json +62 -0
- package/skills/archify/examples/sequence-cache-miss-request.html +15063 -0
- package/skills/archify/examples/web-app-rendered.html +15012 -0
- package/skills/archify/examples/web-app.architecture.json +46 -0
- package/skills/archify/examples/workflow-agent-tool-call-rendered.html +15054 -0
- package/skills/archify/migrations/workflow-v2.mjs +279 -0
- package/skills/archify/package-lock.json +149 -0
- package/skills/archify/package.json +39 -0
- package/skills/archify/recipes/scenarios.mjs +391 -0
- package/skills/archify/references/authoring-contract.md +247 -0
- package/skills/archify/references/brand-marks.md +65 -0
- package/skills/archify/references/delivery-contract.md +138 -0
- package/skills/archify/references/viewer-runtime.md +45 -0
- package/skills/archify/renderers/architecture/grid.mjs +62 -0
- package/skills/archify/renderers/architecture/render-architecture.mjs +1078 -0
- package/skills/archify/renderers/dataflow/README.md +104 -0
- package/skills/archify/renderers/dataflow/render-dataflow.mjs +483 -0
- package/skills/archify/renderers/lifecycle/README.md +115 -0
- package/skills/archify/renderers/lifecycle/render-lifecycle.mjs +561 -0
- package/skills/archify/renderers/sequence/README.md +114 -0
- package/skills/archify/renderers/sequence/render-sequence.mjs +464 -0
- package/skills/archify/renderers/shared/brand-marks.mjs +563 -0
- package/skills/archify/renderers/shared/cli.mjs +218 -0
- package/skills/archify/renderers/shared/desktop-readability.mjs +26 -0
- package/skills/archify/renderers/shared/diagnostics.mjs +160 -0
- package/skills/archify/renderers/shared/engineering-profiles.mjs +157 -0
- package/skills/archify/renderers/shared/generated-brand-marks.mjs +2003 -0
- package/skills/archify/renderers/shared/generated-validators.mjs +13 -0
- package/skills/archify/renderers/shared/geometry.mjs +1423 -0
- package/skills/archify/renderers/shared/i18n.mjs +595 -0
- package/skills/archify/renderers/shared/layout-report.mjs +40 -0
- package/skills/archify/renderers/shared/legend.mjs +217 -0
- package/skills/archify/renderers/shared/output-path.mjs +340 -0
- package/skills/archify/renderers/shared/repository-evidence.mjs +239 -0
- package/skills/archify/renderers/shared/repository-location.mjs +58 -0
- package/skills/archify/renderers/shared/text-fit.mjs +49 -0
- package/skills/archify/renderers/shared/utils.mjs +232 -0
- package/skills/archify/renderers/shared/validator.mjs +86 -0
- package/skills/archify/renderers/workflow/README.md +223 -0
- package/skills/archify/renderers/workflow/render-workflow.mjs +35 -0
- package/skills/archify/renderers/workflow/workflow-compiler.mjs +4400 -0
- package/skills/archify/renderers/workflow/workflow-migration-geometry.mjs +144 -0
- package/skills/archify/schemas/README.md +211 -0
- package/skills/archify/schemas/architecture.schema.json +178 -0
- package/skills/archify/schemas/common.schema.json +115 -0
- package/skills/archify/schemas/dataflow.schema.json +243 -0
- package/skills/archify/schemas/lifecycle.schema.json +266 -0
- package/skills/archify/schemas/sequence.schema.json +223 -0
- package/skills/archify/schemas/workflow.schema.json +428 -0
- package/skills/archify/scripts/check-render-output.mjs +916 -0
- package/skills/archify/scripts/check-update.mjs +1667 -0
- package/skills/archify/scripts/generate-brand-marks.mjs +141 -0
- package/skills/archify/scripts/generate-validators.mjs +66 -0
- package/skills/archify/scripts/render-examples.mjs +26 -0
- package/skills/archify/scripts/update-contract.mjs +182 -0
- package/skills/archify/skill-release.json +10 -0
- package/skills/archify/test/adaptive-reader-layout.test.mjs +86 -0
- package/skills/archify/test/animation.test.mjs +179 -0
- package/skills/archify/test/architecture-compare-recovery.test.mjs +157 -0
- package/skills/archify/test/architecture-delta-markers.test.mjs +137 -0
- package/skills/archify/test/architecture-delta.test.mjs +705 -0
- package/skills/archify/test/artifact-receipt-flush.test.mjs +126 -0
- package/skills/archify/test/authored-reachability.test.mjs +95 -0
- package/skills/archify/test/authoring-safety-contract.test.mjs +54 -0
- package/skills/archify/test/automatic-port-spread.test.mjs +376 -0
- package/skills/archify/test/base-input-compatibility.test.mjs +42 -0
- package/skills/archify/test/brand-marks.test.mjs +678 -0
- package/skills/archify/test/chapter-delta-preview.test.mjs +157 -0
- package/skills/archify/test/chapter-handoff.test.mjs +97 -0
- package/skills/archify/test/chapter-rail.test.mjs +86 -0
- package/skills/archify/test/checkout-line-endings.test.mjs +72 -0
- package/skills/archify/test/ci-scope.test.mjs +59 -0
- package/skills/archify/test/clean-skill-staging.test.mjs +440 -0
- package/skills/archify/test/cli-output-types.test.mjs +201 -0
- package/skills/archify/test/cli.test.mjs +986 -0
- package/skills/archify/test/community-proof-intake.test.mjs +125 -0
- package/skills/archify/test/cursor-onboarding.test.mjs +74 -0
- package/skills/archify/test/degraded.test.mjs +161 -0
- package/skills/archify/test/delivery-contract.test.mjs +52 -0
- package/skills/archify/test/desktop-reader-browser.test.mjs +80 -0
- package/skills/archify/test/diagram-guide.test.mjs +92 -0
- package/skills/archify/test/engineering-profile.test.mjs +209 -0
- package/skills/archify/test/export-browser.test.mjs +305 -0
- package/skills/archify/test/export-cleanup-browser.test.mjs +294 -0
- package/skills/archify/test/finder-browser.test.mjs +274 -0
- package/skills/archify/test/finder.test.mjs +104 -0
- package/skills/archify/test/fixtures/automatic-routing-node-border-clearance.workflow.json +40 -0
- package/skills/archify/test/fixtures/fail-migration-cleanup.mjs +17 -0
- package/skills/archify/test/fixtures/issue-126/custom-widths.workflow.json +18 -0
- package/skills/archify/test/fixtures/issue-126/explicit-route.workflow.json +28 -0
- package/skills/archify/test/fixtures/issue-126/explicit-viewbox.workflow.json +19 -0
- package/skills/archify/test/fixtures/issue-126/labels.workflow.json +18 -0
- package/skills/archify/test/fixtures/v1-baseline/agent-run.lifecycle.json +64 -0
- package/skills/archify/test/fixtures/v1-baseline/agent-tool-call.workflow.json +88 -0
- package/skills/archify/test/fixtures/v1-baseline/cache-miss-request.sequence.json +75 -0
- package/skills/archify/test/fixtures/v1-baseline/event-stream.dataflow.json +57 -0
- package/skills/archify/test/fixtures/v1-baseline/product-analytics.dataflow.json +70 -0
- package/skills/archify/test/fixtures/v1-baseline/production-deployment.architecture.json +71 -0
- package/skills/archify/test/fixtures/v1-baseline/web-app.architecture.json +41 -0
- package/skills/archify/test/fixtures/v1-workflow-700x400.workflow.json +22 -0
- package/skills/archify/test/fixtures/v1-workflow-explicit-coordinates.workflow.json +47 -0
- package/skills/archify/test/focus-browser.test.mjs +226 -0
- package/skills/archify/test/gallery.test.mjs +130 -0
- package/skills/archify/test/generate-validators.test.mjs +59 -0
- package/skills/archify/test/generate-viewer.test.mjs +165 -0
- package/skills/archify/test/generated-artifact-xml.test.mjs +88 -0
- package/skills/archify/test/geometry.test.mjs +739 -0
- package/skills/archify/test/golden.mjs +207 -0
- package/skills/archify/test/grid.test.mjs +47 -0
- package/skills/archify/test/guide-page.test.mjs +85 -0
- package/skills/archify/test/guide.test.mjs +81 -0
- package/skills/archify/test/guided-views-browser.test.mjs +460 -0
- package/skills/archify/test/guided-views.test.mjs +144 -0
- package/skills/archify/test/helpers/desktop-browser.mjs +48 -0
- package/skills/archify/test/helpers/offline-fonts.mjs +76 -0
- package/skills/archify/test/helpers/viewer-click.mjs +72 -0
- package/skills/archify/test/helpers/xml.mjs +37 -0
- package/skills/archify/test/i18n.test.mjs +422 -0
- package/skills/archify/test/intent-trace-browser.test.mjs +284 -0
- package/skills/archify/test/intent-trace.test.mjs +111 -0
- package/skills/archify/test/landing.test.mjs +97 -0
- package/skills/archify/test/layout-rules.test.mjs +1498 -0
- package/skills/archify/test/legend-contract.test.mjs +404 -0
- package/skills/archify/test/motion-governor-browser.test.mjs +342 -0
- package/skills/archify/test/motion-governor.test.mjs +111 -0
- package/skills/archify/test/offline-font-browser.test.mjs +210 -0
- package/skills/archify/test/offline-self-containment.test.mjs +80 -0
- package/skills/archify/test/open-artifact.test.mjs +118 -0
- package/skills/archify/test/ordinary-model-floor.test.mjs +1052 -0
- package/skills/archify/test/output-path.test.mjs +587 -0
- package/skills/archify/test/presentation.test.mjs +71 -0
- package/skills/archify/test/preset-tryon.test.mjs +113 -0
- package/skills/archify/test/preview-contract.test.mjs +40 -0
- package/skills/archify/test/preview.test.mjs +530 -0
- package/skills/archify/test/proof-aperture.test.mjs +78 -0
- package/skills/archify/test/reach-share-card.test.mjs +149 -0
- package/skills/archify/test/reader-layout-browser.test.mjs +320 -0
- package/skills/archify/test/readme-showcase.test.mjs +319 -0
- package/skills/archify/test/real-repository-proof.test.mjs +209 -0
- package/skills/archify/test/relationship-direct-explorer.test.mjs +115 -0
- package/skills/archify/test/relationship-lens.test.mjs +128 -0
- package/skills/archify/test/relationship-permalink.test.mjs +130 -0
- package/skills/archify/test/relationship-pulse.test.mjs +122 -0
- package/skills/archify/test/release-identity.test.mjs +476 -0
- package/skills/archify/test/release-package-gates.test.mjs +750 -0
- package/skills/archify/test/render-output-checks.test.mjs +588 -0
- package/skills/archify/test/renderer-diagnostic-boundary.test.mjs +107 -0
- package/skills/archify/test/repair-receipt.test.mjs +181 -0
- package/skills/archify/test/repository-evidence-replacement.test.mjs +136 -0
- package/skills/archify/test/repository-evidence.test.mjs +605 -0
- package/skills/archify/test/repository-language-metadata.test.mjs +67 -0
- package/skills/archify/test/route-journey.test.mjs +125 -0
- package/skills/archify/test/route-probe-browser.test.mjs +363 -0
- package/skills/archify/test/route-probe.test.mjs +114 -0
- package/skills/archify/test/route-share-card.test.mjs +163 -0
- package/skills/archify/test/semantic-camera.test.mjs +88 -0
- package/skills/archify/test/semantic-flow.test.mjs +90 -0
- package/skills/archify/test/semantic-legend-gateway.test.mjs +156 -0
- package/skills/archify/test/semantic-lens-browser.test.mjs +372 -0
- package/skills/archify/test/semantic-lens.test.mjs +103 -0
- package/skills/archify/test/semantic-passport.test.mjs +99 -0
- package/skills/archify/test/semantic-radar.test.mjs +735 -0
- package/skills/archify/test/semantic-zoom.test.mjs +86 -0
- package/skills/archify/test/sequence-column-fit.test.mjs +137 -0
- package/skills/archify/test/settled-flow.test.mjs +97 -0
- package/skills/archify/test/share-card-export.test.mjs +132 -0
- package/skills/archify/test/site-language-continuity.test.mjs +569 -0
- package/skills/archify/test/site-language-integration.mjs +9 -0
- package/skills/archify/test/skill-metadata.test.mjs +84 -0
- package/skills/archify/test/stable-update-manifest.test.mjs +167 -0
- package/skills/archify/test/start-page.test.mjs +312 -0
- package/skills/archify/test/story-beat-navigator.test.mjs +103 -0
- package/skills/archify/test/story-carrier.test.mjs +90 -0
- package/skills/archify/test/story-director-strip.test.mjs +91 -0
- package/skills/archify/test/story-follow-camera.test.mjs +103 -0
- package/skills/archify/test/story-horizon.test.mjs +91 -0
- package/skills/archify/test/story-moment-link.test.mjs +93 -0
- package/skills/archify/test/story-shelf.test.mjs +84 -0
- package/skills/archify/test/story-trail.test.mjs +81 -0
- package/skills/archify/test/toolbar-polish.test.mjs +57 -0
- package/skills/archify/test/update-contract.test.mjs +133 -0
- package/skills/archify/test/update-notifier.test.mjs +3317 -0
- package/skills/archify/test/v1-compatibility.test.mjs +329 -0
- package/skills/archify/test/vertical-edge.test.mjs +68 -0
- package/skills/archify/test/viewer-camera-browser.test.mjs +395 -0
- package/skills/archify/test/viewer-chrome-layout.test.mjs +1104 -0
- package/skills/archify/test/viewer-identifiers-browser.test.mjs +135 -0
- package/skills/archify/test/visual-check.test.mjs +400 -0
- package/skills/archify/test/webm-artifact.smoke.mjs +1855 -0
- package/skills/archify/test/workflow-compiler-hard-contract.test.mjs +2136 -0
- package/skills/archify/test/workflow-compiler.test.mjs +1163 -0
- package/skills/archify/test/workflow-migration.test.mjs +620 -0
- package/skills/archify/test/workflow-semantic-contract.test.mjs +131 -0
- package/skills/architect/SKILL.md +83 -0
- package/skills/architect/references/design-red-flags.md +33 -0
- package/skills/architect/references/rationale-template.md +35 -0
- package/skills/architect/references/runner-prompt.md +20 -0
- package/skills/arena/SKILL.md +13 -0
- package/skills/automate-me/SKILL.md +104 -0
- package/skills/autoresearch/SKILL.md +14 -0
- package/skills/debugging/SKILL.md +279 -0
- package/skills/dev-plan/SKILL.md +25 -18
- package/skills/dev-plan/references/execution-workflow.md +8 -61
- package/skills/dev-plan/references/plan-skeleton.md +43 -28
- package/skills/dev-plan/scripts/check_progress.sh +5 -1
- package/skills/documentation-writer/SKILL.md +204 -0
- package/skills/documentation-writer/assets/templates/ARCHITECTURE.md +49 -0
- package/skills/documentation-writer/assets/templates/CONCERNS.md +56 -0
- package/skills/documentation-writer/assets/templates/CONVENTIONS.md +52 -0
- package/skills/documentation-writer/assets/templates/FEATURES.md +43 -0
- package/skills/documentation-writer/assets/templates/INTEGRATIONS.md +48 -0
- package/skills/documentation-writer/assets/templates/STACK.md +56 -0
- package/skills/documentation-writer/assets/templates/STRUCTURE.md +44 -0
- package/skills/documentation-writer/assets/templates/TESTING.md +57 -0
- package/skills/documentation-writer/references/api-docs.md +185 -0
- package/skills/documentation-writer/references/architecture.md +134 -0
- package/skills/documentation-writer/references/codebase-map.md +113 -0
- package/skills/documentation-writer/references/inquiry-checkpoints.md +78 -0
- package/skills/documentation-writer/references/readme.md +89 -0
- package/skills/documentation-writer/references/stack-detection.md +134 -0
- package/skills/documentation-writer/references/user-manual.md +103 -0
- package/skills/documentation-writer/references/writing-style.md +220 -0
- package/skills/documentation-writer/scripts/check_doc.py +273 -0
- package/skills/documentation-writer/scripts/scan.py +712 -0
- package/skills/elintp/SKILL.md +27 -1
- package/skills/figure-it-out/SKILL.md +53 -0
- package/skills/gdpr-compliant/SKILL.md +283 -0
- package/skills/gdpr-compliant/references/Security.md +266 -0
- package/skills/gdpr-compliant/references/data-rights.md +177 -0
- package/skills/how/SKILL.md +58 -0
- package/skills/how/references/explainer-prompt.md +55 -0
- package/skills/how/references/explorer-prompt.md +52 -0
- package/skills/humanize-writing/SKILL.md +417 -0
- package/skills/humanize-writing/references/ai-tells.md +291 -0
- package/skills/kpi-dashboard-design/SKILL.md +103 -0
- package/skills/landing-page-conversion-audit/SKILL.md +122 -0
- package/skills/meeting-minutes/SKILL.md +235 -0
- package/skills/portal-app-exchange/SKILL.md +8 -17
- package/skills/portal-dev-setup/SKILL.md +137 -46
- package/skills/portal-dev-setup/puller.env.example +3 -2
- package/skills/portal-dev-setup/references/kafka.md +140 -0
- package/skills/portal-dev-setup/references/troubleshooting.md +22 -26
- package/skills/portal-dev-setup/scripts/onebox.sh +510 -56
- package/skills/portal-external-app/SKILL.md +57 -21
- package/skills/portal-external-app/references/contract-doc-template.md +1 -1
- package/skills/portal-external-app/references/integration-contract.md +4 -4
- package/skills/portal-external-app/references/public-entrypoints.md +100 -0
- package/skills/portal-external-app/references/quota-and-seats.md +12 -31
- package/skills/portal-external-app/references/registration-and-onebox.md +67 -11
- package/skills/portal-micro-app/SKILL.md +18 -28
- package/skills/portal-micro-app/references/manifest-and-acl.md +21 -3
- package/skills/portal-micro-app/references/open-api-and-extensions.md +1 -1
- package/skills/portal-micro-app/references/sdk-reference.md +1 -1
- package/skills/prd/SKILL.md +56 -38
- package/skills/prd/references/prd-skeleton.md +72 -34
- package/skills/prd/references/product-quality.md +89 -0
- package/skills/prd/references/spms-mapping.md +9 -7
- package/skills/react/SKILL.md +26 -4
- package/skills/react/references/actions.md +251 -0
- package/skills/react/references/data-fetching.md +25 -1
- package/skills/react/references/react19-migration.md +407 -0
- package/skills/reflect/SKILL.md +13 -0
- package/skills/review-code/SKILL.md +63 -0
- package/skills/review-code/agents/openai.yaml +4 -0
- package/skills/review-code/references/git-scopes.md +38 -0
- package/skills/review-code/references/report-contract.md +56 -0
- package/skills/review-code/references/review-lenses.md +33 -0
- package/skills/review-dev-plan/SKILL.md +88 -0
- package/skills/review-dev-plan/agents/openai.yaml +4 -0
- package/skills/review-dev-plan/references/report-contract.md +59 -0
- package/skills/review-dev-plan/references/review-lenses.md +82 -0
- package/skills/review-prd/SKILL.md +84 -0
- package/skills/review-prd/agents/openai.yaml +4 -0
- package/skills/review-prd/references/report-contract.md +64 -0
- package/skills/review-prd/references/review-lenses.md +82 -0
- package/skills/review-prd-dev-gaps/SKILL.md +84 -0
- package/skills/review-prd-dev-gaps/agents/openai.yaml +4 -0
- package/skills/review-prd-dev-gaps/references/report-contract.md +72 -0
- package/skills/security-audit/SKILL.md +191 -0
- package/skills/security-audit/references/language-patterns.md +221 -0
- package/skills/security-audit/references/report-format.md +194 -0
- package/skills/security-audit/references/secret-patterns.md +178 -0
- package/skills/security-audit/references/vuln-categories.md +288 -0
- package/skills/security-audit/references/vulnerable-packages.md +111 -0
- package/skills/sql-optimization/SKILL.md +296 -0
- package/skills/summarize/SKILL.md +1 -0
- package/skills/swarm/references/teams/product.md +2 -2
- package/skills/tdd/SKILL.md +42 -0
- package/skills/teach/SKILL.md +21 -0
- package/skills/test-plan/SKILL.md +12 -11
- package/skills/test-plan/references/case-taxonomy.md +3 -2
- package/skills/why/SKILL.md +158 -0
- package/skills/why/references/epistemics.md +144 -0
- package/skills/why/references/investigator-prompt.md +103 -0
- package/skills/why/references/source-playbook.md +17 -0
- package/skills/why/references/sources/code-archaeology.md +88 -0
- package/skills/why/references/sources/databricks.md +70 -0
- package/skills/why/references/sources/datadog.md +99 -0
- package/skills/why/references/sources/incident-postmortem.md +15 -0
- package/skills/why/references/sources/linear.md +48 -0
- package/skills/why/references/sources/notion.md +55 -0
- package/skills/why/references/sources/sentry.md +100 -0
- package/skills/why/references/sources/slack.md +54 -0
- package/skills/why/references/synthesizer-prompt.md +135 -0
- package/skills/xgent-app-release/SKILL.md +97 -28
- package/skills/xgent-app-release/references/build-and-package.md +8 -3
- package/skills/xgent-app-release/references/embed-csp.mjs +126 -0
- package/skills/xgent-app-release/references/frontend-archive.md +67 -0
- package/skills/xgent-app-release/references/public-delivery.md +75 -0
- package/skills/xgent-app-release/references/publish-api.md +62 -56
- package/skills/xgent-app-release/references/troubleshooting.md +18 -2
- package/skills/xgent-app-release/references/verify-preflight.mjs +50 -0
- package/skills/xgent-app-release/scripts/npm-token.mjs +8 -3
- package/skills/xgent-app-release/scripts/preflight.mjs +13 -2
- package/skills/xgent-init/SKILL.md +23 -82
- package/skills/xgent-init/references/external-app-AGENTS.template.md +149 -0
- package/skills/xgent-init/references/fill-guide.md +10 -22
- package/skills/xgent-init/scripts/check-docs.mjs +14 -86
- package/vendor/impeccable/VERSION.json +10 -16
- package/vendor/impeccable/bundle/blobs/{daa2a8ecd874f9f940dfd72aaa329318b06bb9be25515be85fea84c871b637a6 → 00c067253d37cd20a41dbe9c806d6a72cbff983ad1418b3c3e447998f577b9c2} +18 -11
- package/vendor/impeccable/bundle/blobs/{4ce929b8cafd37247ea4c148bbe39a9afe15908d1abf4a8248c5122275d16499 → 00d167d9183c8d0c6c0682055107382e6672bacf7a712de0abc8f157c2cb2210} +3 -2
- package/vendor/impeccable/bundle/blobs/{a9515f6f084d8f51c378eb3cdc6db1f12e06dba2d32fc61b7ee7950fa2586f2e → 016c082dcd2aa8f3c080a757c8ed335c6070a904bd2f39668bb9d3e6f95929c1} +1 -1
- package/vendor/impeccable/bundle/blobs/0221a193d111a9de33a785706a603e55dd974a115f549dbdf74e0f9ec72bde7d +101 -0
- package/vendor/impeccable/bundle/blobs/055c571f2960b8f929d6a8d3806a4d32dfcb9750b3ef8b60adc8930fff34b559 +101 -0
- package/vendor/impeccable/bundle/blobs/{3aa908c18db91d5f31d6bba6402eab6afc4e0b75137f841a86bd012386e0d8e2 → 0605c8729dc638a46798e90ab12486fe3ae3372a869757cfb387a08e23b3c84a} +18 -11
- package/vendor/impeccable/bundle/blobs/{ec58806f16fc7ba29bccef08f2e158cd00be077ce05d45e943a59bd26dc6dc55 → 0648e4e06d01cabc91fa7dc19256ceedeeeea213b9265e9d36b0918370e16fb2} +6 -0
- package/vendor/impeccable/bundle/blobs/06b20bd42e5682a42c5d6fbfaad4c55e66ff9b9d99a604bd31d3545af120fc2d +101 -0
- package/vendor/impeccable/bundle/blobs/{420e2fdee2b7f555d9a37ce348cf62610ddd98f96b1a0a511796ba600881588c → 08346755b13f1a3f7c6fb4e512387884b80467aaeff109fd41f5521d2a95635a} +3 -1
- package/vendor/impeccable/bundle/blobs/{8f651cb1f8cde0acc5cc511b77fddd98558a527f54974698a1650b0fd7e849a7 → 08398fa2d8e2b06b849f1c0f032e1e93b832e9294aed35c1c7f62b938d62ee80} +1 -1
- package/vendor/impeccable/bundle/blobs/087f6715114e901c2ce00b438e75b82fd48978c020a782f3dc361d39eb7198a6 +26 -0
- package/vendor/impeccable/bundle/blobs/{bc7a5128cfed46148396c08798b6b9429406fbe477e84e331a36ee2840b6b776 → 09310582ed23393b171eb99ad4a288cc422ac53c26d76311586ce54c6df77b22} +3 -1
- package/vendor/impeccable/bundle/blobs/{633903ba7cb38ed502448a66691fbf655805786a2f06be67043f12294ad08e86 → 0bc2bc36ca6e74f9f610392f1a4fb8f57b2676238ba1f9c65cd8714f5d27e8a2} +5 -0
- package/vendor/impeccable/bundle/blobs/0c064c9975f25f6eb5cf7911c2eeafd3e695d729f8c86a49a24ff2d76cb3cd94 +63 -0
- package/vendor/impeccable/bundle/blobs/{4a7d8695741e2cd354baada215b06798c050aa7a8e1ca6814f0e395e054d1ab1 → 0ccf57f758eb0d53bc32c5c77156f016e528d20fe2c2740662bf19964dfbb00b} +18 -11
- package/vendor/impeccable/bundle/blobs/0dd1e6ccf053cb80e057caf7bf2fef30fd0197a41d907a1a8d2d2d02f6978674 +63 -0
- package/vendor/impeccable/bundle/blobs/{943b0d7c9ce4f6802d8440a07b2ad3c61cbd1cc00ab63962bab7eea9ca584d20 → 0ed5986d1503399f48c11104df5e523a63be2d6558770ebfbbeb2323ca3f2ad3} +5 -5
- package/vendor/impeccable/bundle/blobs/14c9c9a7816026dd77494d06b8d1777c8d64785126b0c9ac8db5ebd996dfd6b6 +101 -0
- package/vendor/impeccable/bundle/blobs/{54cb270e8826380caefc8c40642a5d973f27df46bfdb762d822541a0c72a9877 → 14ef0ab84c10331f8af6b4124387a3f80b493175a04a3f89200719b4b5aea221} +18 -11
- package/vendor/impeccable/bundle/blobs/{6abbf5979db5cb1d7965bf5f91d589e984843069c587f4d1e63aab135bbace0f → 1547005438784032de3254cb35bff393e8187d7a459d0c20a693d9bfb0b5c1a4} +5 -0
- package/vendor/impeccable/bundle/blobs/162b814ddd1133923b9584bb95f85959e64844c94341d6bf10a81c06ab7cc02c +101 -0
- package/vendor/impeccable/bundle/blobs/16498466a97a5b19a593d5b3f245468c71784bea069d7fc8aa9690db5ac1d968 +29 -0
- package/vendor/impeccable/bundle/blobs/{b31ff29c7a1ea979c6d039f7e8d17007410697ab49536690dca109f0af3f20f8 → 16ba7fca1973c5faf53dd2ca523559129c0fe9e5f8d50b645f527afa78186cd2} +9 -0
- package/vendor/impeccable/bundle/blobs/1725ca4aa546a34770f29191b58bf8dc14957d4258fb9e7d02f7b1c59c412ea4 +63 -0
- package/vendor/impeccable/bundle/blobs/{598bfed550954471ba4d257d46b4d608cd82e4cdbf36d07bf93c5f4a563f7727 → 1898529e994bf0a31ee9ff3f87c343caea3d8a7e0986f404e129fbf89078ade0} +4 -3
- package/vendor/impeccable/bundle/blobs/{6e20041e209e8705d14aa9c4fb8cca3f0d743791de633785e5b46e2dd1ff1a6b → 19b439d7d16e139357459d3874f739ea94dbdffeb2a0e201df1620ed1e40574d} +1 -1
- package/vendor/impeccable/bundle/blobs/{04af9f2d6883fe76f9539d310d9c369052822a24886d2c330ab1e3fe5981c8a1 → 1b289c8c09de9d4442109ada91b1fa3a190e113a310cab7aa26a3633c5df0bb0} +1 -1
- package/vendor/impeccable/bundle/blobs/{eb3213b9c9f4d6b2f153e7b457f13aa131bcf633695229dad4eac39a920bdf38 → 1bb3bdce54386e96e21b5956713a80583e6b3b9d1170f3bb8dec3819fa341bc3} +5 -5
- package/vendor/impeccable/bundle/blobs/{e71d6b97680084a7ccec01844e658cbd2042aec00da0c91bec62a240ad7dcf6a → 1c11cb8ea42536c7a51e197f1aa32198960bb89262da2eaf32e0feb03c70792c} +18 -11
- package/vendor/impeccable/bundle/blobs/{f0c4d0615c7d520dfc2536c01cc7f1f3aab9b60ddc399ba01289fe62edb12370 → 1c6258015ed02c522948f8f1a3b6457395a8f7954497b87c1cd83f1791f9f819} +1 -1
- package/vendor/impeccable/bundle/blobs/{27c4b6c90ad12a186136f9ece9cb1830d4a6e36b11382ab334efc4543f8082de → 1d7145fd5bf65282b2e05cf42faf41766d68e83e2b75f460b3b62d81ada5e5d7} +18 -11
- package/vendor/impeccable/bundle/blobs/{1484a7ae206ab4f0e6262b21afe0f6307a629ed27d28fb7de69536a6800a4883 → 1e2f696760ee55fb154bdcc302c7d7b0fbb807e0308130594bd892dae14dc9ea} +5 -0
- package/vendor/impeccable/bundle/blobs/{6989120346e87907d59cc6d4708dd9dee29227ad583fbefee28935395b68ce34 → 1f6c3a1d7344f44eaa88b6f38334ad7d7b60201709589039a58cee73de486f5d} +1 -1
- package/vendor/impeccable/bundle/blobs/207d443cabe4e6fe1351f91785748957f757bf1e7aeca405433c0329dad46a15 +63 -0
- package/vendor/impeccable/bundle/blobs/{f7916d0113da7a19d4e03c113d5563d181457e44f1646ecab9191cfee5ae776d → 20e2111b3e065e8e8054f715ea3902e64b77886b30d2bddee723558f22942620} +4 -3
- package/vendor/impeccable/bundle/blobs/21e78c8a77badb3f83290cd4577ed3b24bd4dd3b57136d7da75733d4f3ee9ac0 +19 -0
- package/vendor/impeccable/bundle/blobs/{0f83648f6b425225290305bced51eacebacf9bf9bc05e21cdbad46863fbc89ce → 223f08673b267f81d7586f686afe05d7cd7529a8e11ac37d979f95c2ceaae8ce} +1 -1
- package/vendor/impeccable/bundle/blobs/2499b18f26639694344ca95682f47c65494f730cfff88aa9bd2aa83a22e5926d +101 -0
- package/vendor/impeccable/bundle/blobs/{074575671f24cf4298d06f0019f76e94f62e9a6ed205fce05b8e507341e64266 → 26cd88d10f8a14ed0ddb6e6b21e5e2c981f410eac93afa179202c354d7d1c0d5} +3 -1
- package/vendor/impeccable/bundle/blobs/{5f24c5a97b4ffcabc7c432b064cfdd04c7a2ad52f52e765be648dc0aadab8f38 → 275dd1b6e63bbd30d2713227c4f79b880a8bc4e01cc48d392068bb86939d3afa} +1 -1
- package/vendor/impeccable/bundle/blobs/{356cfa0ebf61589cf5d52691d101a69d69256062fe1d11d71d95d41a78289cbd → 28f65b42c1ce9aaea35dc37a51257d7c703bb7f6553ebe3b8ca238a1007251e0} +3 -1
- package/vendor/impeccable/bundle/blobs/{a1dbde501ffabb50f30f28f2de6755b5e91b3d4028292c5a3abd3358106eb457 → 2ac1624b1253f3b6fcf2da54d54293624176539b2e9609a49245e7e46c65ca5f} +5 -0
- package/vendor/impeccable/bundle/blobs/{3895765e9434400dfc1b30e364be002cf499c1718fb2431e65b907c14ae2cb27 → 2b9379cdb329890eebe2384fbaa23f771745f30d8cfc43e180ebd092e69bcd2f} +4 -3
- package/vendor/impeccable/bundle/blobs/{1a9180cec754f8afd354e7cb759750247e97c5bd26d3242ad4c45e315069e8c0 → 2bc5d62463cc83d6417df7b8f4a02b4135e2b1bb654aa7727890662496f86e3d} +5 -0
- package/vendor/impeccable/bundle/blobs/2ce1722bd1a9f366182d9357d629796b1448f7a0126a854df507eb044d891cab +26 -0
- package/vendor/impeccable/bundle/blobs/{e21af575fcc0f1df54ae422bea4dfa1e5211422606908919f6a86e19e0d5c20c → 3149a87bbed84bffe3558d5eaf1dc596b2e84d3c1be290fc7b1c13e481ae0803} +4 -3
- package/vendor/impeccable/bundle/blobs/3253eab02b62efa80abc74a5c85da08f3e2c6c20dff8dec38f4d236cbbfa0f3c +63 -0
- package/vendor/impeccable/bundle/blobs/{38c2e839e130008b6da814ab9c16f3fcbbedfdf721a9638eebd31a9e65341a7a → 37680abf9a8e446619fcd33862718f483d197bf2652f966adca8dc54d2909b9d} +3 -2
- package/vendor/impeccable/bundle/blobs/385a0efe833bd4afe4a257e7159590de0cf1b7fd8f7b213b732f1e537c62dab7 +21 -0
- package/vendor/impeccable/bundle/blobs/{8a1c872773996dfa1c1eb765ac7ed8e8d41f99d4f12f090b4725b694e85eaa62 → 3898bd9b56a042e860a0db4fb4dd81ac81126fa218b604702e2ac0c2287ae09b} +9 -0
- package/vendor/impeccable/bundle/blobs/3b2b60f23fa8ed9d73e721e17142c3933dc5318fa9a251742a76fee890ac81a8 +26 -0
- package/vendor/impeccable/bundle/blobs/3bd55b35c253f7841ca4e6e1a855a4b477d59aa2daf6e61e93fd685caaaff131 +63 -0
- package/vendor/impeccable/bundle/blobs/{dde1b74aeab3d90320e134f0ed0422bef99917dcab4c1749aa1720a2c94f725f → 3bed76a0d528e2d73da8acae4dc63702bdb5baca5ab11600d70e75fc9f2ba90b} +5 -0
- package/vendor/impeccable/bundle/blobs/{9b2fc50c5062073d097140cde85602bba181e325ec6b9eea1bd3da74582acb9d → 3ef9a43006bc68d83bc958fc8401e59f9beb6379048f5ced047747fdad05b895} +5 -5
- package/vendor/impeccable/bundle/blobs/{30e006fdee873bac23edaeadce0371161625e021e3cf442dff4b05bb82297ba1 → 400419aaa20f710e1a7e5ca1fce9e8bc995c4db84053f40cf778d987619e0210} +1 -1
- package/vendor/impeccable/bundle/blobs/40cd6024312a1339aa66801df533afa543e60c36e708f0f9659dd8d558f83dce +63 -0
- package/vendor/impeccable/bundle/blobs/{55e95137b3f9198c1d4dfc425366b82f1ef5f77d602682b2edf91f2ce9296289 → 412dd9a5238aee223397591fe49b3bd27b6b53d649a0e67ed8570f3e199cebb9} +1 -1
- package/vendor/impeccable/bundle/blobs/{181e814c1b9317098b2300c1b02ad0d137b6d82bd1e7e8cc64de4d00b4c50c25 → 41ef23c048ab739f48afdce26a2678d36ee40bcced34ef4b969d1d8ffafca64c} +3 -1
- package/vendor/impeccable/bundle/blobs/{edddeb3fad88adec9a055b1bf9d5c75418cbe97a13b1a7f6765e73249e482563 → 42831c3cd874346d8e7f120808d91e6ed3cda5c3eca6eefd76b126659536bc87} +5 -1
- package/vendor/impeccable/bundle/blobs/{e3c331cc21d9a216e25e08628610ea99c97e150893c3d26e5c0cecc532f26d7b → 43dbfcb7c2e54c9cca9fce66024f17c06a2f2be645547b718b75c8828a463de2} +1 -1
- package/vendor/impeccable/bundle/blobs/4435529820c3fc2eceae8b1ee35c906a34c7612fb860117e896152b45aee0770 +26 -0
- package/vendor/impeccable/bundle/blobs/44a60aedcc350c2d7d501d0f830a31a586a6511a9ff9b4e361cb328bb747339d +101 -0
- package/vendor/impeccable/bundle/blobs/{c6a0ec6c28ae55fe539f0f41a507b1638495afd285d6eb15c00245fc8cc7e7fe → 45dcea8da47cc21f447041daa942cf5d92cddde9a5a02c196cedbd159c829304} +5 -0
- package/vendor/impeccable/bundle/blobs/{015725eeca94f52bffd2132d4cb49bc3eb1ee76e6ac7378c065e629d59f56613 → 4700adf4542874f204c680ebad8317a97bf7169dbc04147082618ab59ce70c7d} +3 -2
- package/vendor/impeccable/bundle/blobs/4777bbeaff2efcd6a2a66b07aacaaf57cd32f3fab1c1da5a0513937fafb48bd1 +63 -0
- package/vendor/impeccable/bundle/blobs/{b6022a8c7200e96b0b55c2ff599a01d64123a2f5fe01557d4ca5192a6e0f0b0c → 484ea165f6d49ecc15b7a5c5623e377f2e203f4dad366df23eae99255ecf4572} +18 -11
- package/vendor/impeccable/bundle/blobs/485774d58dfd5796956024cdd9c12f05e692a3703f70b12a02ab43918885c3fd +101 -0
- package/vendor/impeccable/bundle/blobs/{3bf5d8661351831dbb2195e3b677fea1f128ca319c0589d538b66d9c9d7dddbc → 488da2e7406c6b4b5c92d7bc8cbd370cdaafc82a5f3ab5adbcffb21d1d1c4df4} +3 -1
- package/vendor/impeccable/bundle/blobs/{6f1d52863482fa0f6fff877f0cc8f6dd0b4230d28050b0d267e082776e61a332 → 492a8030d11e2f4908d934bd817bd6d16a3164056c74a7172f60e2cec5ff3055} +5 -0
- package/vendor/impeccable/bundle/blobs/{51e2f8963377f142ebdc9864e0ecc5aa1e5b7d344ed72d0e9d748d2d3d8c71b3 → 4972f28d96897c8dec891f0de7a0d9d51f36030ff780ed9d960241c75413da2b} +5 -5
- package/vendor/impeccable/bundle/blobs/4a6f0386bff78bb42efa285df2919e75209ec336672cf5fff91ba66ffb352eaa +63 -0
- package/vendor/impeccable/bundle/blobs/{12c1afcd15e86d840b89a78c6d17ce6d1b5609bac713d59271c6ab5932975dac → 4e3cc4d0e229ca96dd2e28fb2da0478a7f0bb64e447d07a652c425d8fbc57573} +3 -1
- package/vendor/impeccable/bundle/blobs/4ea8e05d0f88d24f182ad554da84317f90b9730e29fad262143ddf423a1f8645 +26 -0
- package/vendor/impeccable/bundle/blobs/{402656ca6df17bad1cd55ede0a966a7bb5b187cf4f89c517851f9efe7f14c0fd → 50d4b14134fc06daeac0aab6960800f171ef85250d3bcce6f246cf81e824463f} +3 -2
- package/vendor/impeccable/bundle/blobs/{43852ca5917de66704f73f9019d15482bb1efd92f2eefaeeeae23610b4c0c6a0 → 50f3b5714ca3e2c1bcf070003733407935ee050609d3123c2c065489fbc9950b} +5 -0
- package/vendor/impeccable/bundle/blobs/{f597742c8e5562263d3bce725cb55e920d8c2c60223f41a632d523ca30cdd12b → 51032bb883137007127d30189b44b516d0e6140271bf5881da7eca76f8bd282c} +3 -1
- package/vendor/impeccable/bundle/blobs/{13bd27aa8573e6d45d8bbf9f3fc991e4719d28a7e8f709009a4a5a49a227fff3 → 511ecde67e6bd976c9bdfa8d92f0dba359621344f8135c2a5ce5a66b385a4cb5} +5 -0
- package/vendor/impeccable/bundle/blobs/514a27fc9830455828d337cfc2fa95fa86be8e5464501bbabb9aca09a66b40ad +63 -0
- package/vendor/impeccable/bundle/blobs/{78ac93689928a580c2f90242cbaa96dda3fa4e55ff1f1d00e412b2a62ad85232 → 529cb2ace696ec11a86f4b010c9b137acf282072e483932181be1871df2aa690} +18 -11
- package/vendor/impeccable/bundle/blobs/53628d05b7eff0d4f48b95e48fad40266452fe1b42f398bd88dd9328353e0dd8 +101 -0
- package/vendor/impeccable/bundle/blobs/{00023f9e7f2e27604fde978b56510a8f837b76eeadd93221d11adcf4c98f1a10 → 53de37260c4f1c37e467557e9b038faa0f285b056bb2b95f435e0a7d1b69b0de} +3 -2
- package/vendor/impeccable/bundle/blobs/{0dbbef70048cc3ae44e6710ff09992ce14ad049ce8ed519b0ff8a1ddb4633f4e → 5415103ca4422ea1422e23bfe9f9bae181f5d6d6407442f7fba31856ada58d12} +3 -1
- package/vendor/impeccable/bundle/blobs/{af34b8af89edb10e228c0482754423f48238fce816eceb8703b8781c130da54e → 56285b28b0ffe471761c2ad062d3f933ed2346ca1b617f1323a30fed99a1a852} +1 -1
- package/vendor/impeccable/bundle/blobs/{12fefe52d80d25014e5f7e2f9b278275a675653d3d99ae8f0ecf344cdb9abbe6 → 56cc1bba51e6805de370160ce4a9399fef3740571204f13c3c751725870305e5} +3 -1
- package/vendor/impeccable/bundle/blobs/571f5c3bcf01c9b1bd02ab853a54db3f88375c4b8f39dd67d53e983a33e08bb7 +26 -0
- package/vendor/impeccable/bundle/blobs/{5ce02fc8f353d7f659535fb80e453963dc047a07c4396adf098fe010b479e7c0 → 5855d7595b0212bb8d521e0265378d437df8d2343d5f8a30408c3edde0a14d96} +3 -2
- package/vendor/impeccable/bundle/blobs/{2b21f0142ee88a11dbe2593362f5a910718a61062e3a64e7ff936ef1e74fd394 → 5a07d4769a741cd00fdf8c95b943ef072eb12cd0c9e2c2d2622d5fe0a4fa3894} +5 -5
- package/vendor/impeccable/bundle/blobs/{3dd45e1c32db3d3163a96ef198954905807b25cb9a1d206a7d77986f21d27652 → 5a9626fb8c1e9051155c68626fe7c765a55be325113245d44b4991fc3d3b014e} +5 -0
- package/vendor/impeccable/bundle/blobs/{d07e3131cdf3e392e59eaa3e2f59fcb0799d9494df4adfee12a21067fb8365ce → 5e354ae11913d5846faa3681a9ed98b68d1881fbbb1ecebf0769e3010bb0a426} +5 -0
- package/vendor/impeccable/bundle/blobs/{ad389ab12800738b0e5c97618278b7a824654b25990166ec9f389caa5c3386ca → 5e6eea05456108b8766cf354dda998e90b6a5ecca7f15d807e28659ee78c306f} +5 -0
- package/vendor/impeccable/bundle/blobs/{85b9c2d051de94ee9129c58be111946f73035ca62bbd2a3936f4fa48768fe5cf → 634257e766b1fecacd25e27dbfc7e21ef3b440b01e94e92b8b17711018d8a661} +18 -11
- package/vendor/impeccable/bundle/blobs/6428239079f98fd6500e9fd032dd289b52052da7a4364ff357b0a5341b6444db +63 -0
- package/vendor/impeccable/bundle/blobs/{f424dafa190533cd32c0bc3e4131d0c472d58e16bb191eab14f0ae73c2cea917 → 647bab2f5cf6279d58d808f4df05d1ac63c1c86c6df9d13406ae776458653995} +5 -0
- package/vendor/impeccable/bundle/blobs/{8e7bb79db7331b93f99de314dd5599de8587ec0b6c25e26cf1efab25c0777fcb → 6528f2aebe4a425b724de293c8f6dc8a42ca80c7f1ed3039b8b9a813b004956a} +4 -3
- package/vendor/impeccable/bundle/blobs/{89eb0206a0d9308c6c6a7cc01bc4fd8812d2bd34bb9a831988c5d86fac2c60de → 6575a657642ccdab42d0743ceaee06621c77811b4dc4f21c616e28aabf5e28ef} +1 -1
- package/vendor/impeccable/bundle/blobs/66d60356172ccafdd334fca9bf33243c8409216a733dcde0d66a24fd70ee8132 +1 -0
- package/vendor/impeccable/bundle/blobs/{759bab1d8adc071fdde2efcf6e2157aa4026f3c2b4f3c342a8070bf328011616 → 69cad1ae7355825ef320ac9638a1c9675ba9fda01c9a0fa12244cc4a1973e550} +2 -2
- package/vendor/impeccable/bundle/blobs/6d21d8e2729effaecc5b6239dadbcffb1ec8d51e8bdadeb47a39827266a61c5e +26 -0
- package/vendor/impeccable/bundle/blobs/{ff882c59c9aced92338aa194cc99a521ea2f083fd22eef3b1c1225e06bc72f66 → 6d9258a49c0b0583ec255eeb1092554298d5eea676fb9391f5a5a1377c3fd770} +4 -3
- package/vendor/impeccable/bundle/blobs/{68bc52a604731ca024610051fc763f4d78a53eb2a45d35b40a8c0383043baa63 → 6f4dfe968f47302ea64dca0e02f8c6d81497d93e4f436d09236e305456cbcc02} +4 -3
- package/vendor/impeccable/bundle/blobs/{f97a6891c80bbbc728edefcf4b638d1a823b38f3cb16ecd0fbb717734cc5c0c8 → 6f7f1639a933ed88e116aa8ab0cfb951096930d14f413349ae22ed04e28d2358} +5 -5
- package/vendor/impeccable/bundle/blobs/713a942482531ef8ef103adf48d9decd7327697450e444289aa0479458e4ee1f +101 -0
- package/vendor/impeccable/bundle/blobs/{6d47503587ad6da17ac529f44a96123bbb96a9c91a7a9350b7690fc467561a5d → 7212014fb2477d1d54aedaa79cdb861071a58afb2ae6d4dc5a495fa4810c6f8a} +5 -5
- package/vendor/impeccable/bundle/blobs/{21bc91f6e07691e82b7bba99f9e1d956f9d7a6810dcdc18d231fe73b53a13b23 → 73f8bdec7d9a97476fd7d7e0b4114b5c3e9c7b84c22cbb876cd18c3e64a9b8c5} +5 -0
- package/vendor/impeccable/bundle/blobs/{a8547c8565979894f0c07f92a96ac2a38e681a31fbf155ffeefc7566e185d9c2 → 754e9f0aa2101245a83cb17d8cc5bc49cf87997b29a83dedbfff283dbd0a8c4f} +5 -0
- package/vendor/impeccable/bundle/blobs/{84df879a0332a56ece4bff1922ecf4f50635951b3c67e67eb46f31bc5d30fa9a → 765d3e890cd7f58ca94b6834181052166e9c4f9ef06278dc241da4d64da2d595} +3 -1
- package/vendor/impeccable/bundle/blobs/778cedc9199b407d3e23fa1041e38d548b00b1101a33517aa2a2eb299f9d0edc +26 -0
- package/vendor/impeccable/bundle/blobs/{ef0b8eca20e1321cf7216fd0bda41ce54b0cca197cfd1b075eb51f3436f59059 → 77ae09542fbc10aa4e8b119d6fd19359908a47c13c30068d6a150bfdb50e3e10} +1 -1
- package/vendor/impeccable/bundle/blobs/{15b4837dccb27d7382e2f134ef050b244c4488b1906e0308f288112183cc09ac → 796bbd8231413fcbf22eb7e6f40c402842aa4b10b1894545a7b05d9201ca7c4a} +18 -11
- package/vendor/impeccable/bundle/blobs/{5e3616ac45568f239fda3a4764f7d3bf3473b8b5eefd91e402dd9208a4b851d1 → 7af7fcc09c6b14f26ba78734460a2f9dddd2dcd2e2fa0c47c682f539e2f4cad5} +1 -1
- package/vendor/impeccable/bundle/blobs/7b1a4cc5ce94837c8309962a204c47361927e442b7a1c3cc472f90276eca8b8c +63 -0
- package/vendor/impeccable/bundle/blobs/7c417abe75f0ce4341b6f5acbadcafbbeabcc32cdb13c930aecc5cabda9f9242 +26 -0
- package/vendor/impeccable/bundle/blobs/7e36403ed58e0e82c0e42bf2fbea1c066b8e63276978647a6f1e44bf1edb23fb +63 -0
- package/vendor/impeccable/bundle/blobs/80191b3580a996a2045105976f728e0f46de22c412fc7640741add9767b2d8f4 +101 -0
- package/vendor/impeccable/bundle/blobs/814610dee1081abc4213476ff0c4ae3e8f457909550d250ea0f89953687c85c6 +63 -0
- package/vendor/impeccable/bundle/blobs/8157b5a376e46980117f1ad6d08b24ee7be966f5de64b041bd213d486ea8c077 +26 -0
- package/vendor/impeccable/bundle/blobs/{bad9250670c18d89722563fd747bae4c4bec64d1db0ee09d12d4fea04fe271b8 → 8373668da1aa37c39888809ed9e834a7edfcb884af12f74934c270d004fba626} +3 -2
- package/vendor/impeccable/bundle/blobs/{46250caaec1bd69619a5b28a73cb3c845b319d029b0af9228aaa7001e7e0104a → 83d614fec61078175383012a088f49a9c0bb08b9ebd2b651c77cb94a323474ab} +5 -0
- package/vendor/impeccable/bundle/blobs/{a5371492582dbeb69b24a1a2947b256a2da8a4d55917af709bbab6e452d9d23c → 8449781319a33d4a10a7fab9bfa4812241c303b95f33703b300b097dba51089a} +18 -11
- package/vendor/impeccable/bundle/blobs/{12d2a8043ae8668ad29c32bfa92995849fc49cb016e6ebd4f7e59539d96e7b03 → 857c4a0db5859f1fa91152db684528299dfc552525f50f416d1625a270e12671} +5 -5
- package/vendor/impeccable/bundle/blobs/{bead87679caad7c537dd7c04c3bb78be56ac7eec279ad6aad7322f48ff2df2d9 → 871a8e4d749b807c693ebabd83defbd6c76e1bd2a0f53a28a460cb1308ba8634} +6 -0
- package/vendor/impeccable/bundle/blobs/{cf3ae16765e7b5bc333ef76e24ab37f080e3d62e931c4986158e3cbcda6b9f7a → 881a58aadf300bcc8f4947243e82192ae8dd7f14822a70fabc84fc74a5f9199c} +5 -5
- package/vendor/impeccable/bundle/blobs/{896da399bafcffb0623bdd81bb18709d6eab25c9d5917e739c8798f31ff0d076 → 88549c11ea55d5dfc9f551db9a9c270d7362a9d42aa83db7747c9a7f020e1255} +5 -5
- package/vendor/impeccable/bundle/blobs/9287af96048c58ed0e72493cf7eb90c3957d4ba8b19e70ecf5d1f54264e9e597 +101 -0
- package/vendor/impeccable/bundle/blobs/92b7ab84c828fa888f4882c417c3d7f8fde2e5445b40f96f4fc8181a3e058afc +101 -0
- package/vendor/impeccable/bundle/blobs/{e2f98c4136d0ab70ec32fcdef58edb20ed8ec4f6cc067e0dae952b22cfd6a471 → 93c53421c3376f695fe9dad5c82102f74bb5dd15e4ced81bb4ad50a71e5f1027} +1 -1
- package/vendor/impeccable/bundle/blobs/{a8f4056a85706c0c8f80ec48e9b437e198464100aa42786f9252051f4b931c19 → 95f0c7935a6d0375e09ae67ae0066c0ce7b583bf1d445d268cc4d2f4f900b1bb} +3 -1
- package/vendor/impeccable/bundle/blobs/98384b78af087855dbb526ec1e870a676ecd87f57237643dfea815317dad8a07 +26 -0
- package/vendor/impeccable/bundle/blobs/{948326fab89f0d5c07355a06b9b9c30d08bba2e3a673a0151ebbf5a39dff7b9a → 99e4a6facdb07986aa721bda8a4e35466b30091f32e38d7a71d9fcbe3591f65a} +5 -0
- package/vendor/impeccable/bundle/blobs/{44a91b3f0810f43829d8584e912812444d15614e4b57ca8070aee7ab899f7c1e → 9a4aa0d4903eabee987fdc92053466ff7f6eb0604797aee0efe67d67999b3eae} +5 -5
- package/vendor/impeccable/bundle/blobs/{9b85b85443aec09918befb83208c72f475457db8261a8fc5e83ef7eec474c869 → 9d45e5f6c082de6df4a2cfff11deb969715c49b5d9891d100dd1b2252c5bdcdd} +18 -11
- package/vendor/impeccable/bundle/blobs/9db3c0857f4c2c8877b1fe24a47a229fee0de76ec9057bd8ee95f0677fb58d74 +26 -0
- package/vendor/impeccable/bundle/blobs/{5738bcf9ac21dbb2113fd0c5cc7e4bbfc8174778916ab5843644332b3dbbc36e → 9e82126a2e08aa365f9c430d383cf6e1921e04d1e0a1b5777716ff97828cfad8} +5 -5
- package/vendor/impeccable/bundle/blobs/{b3782f2d9215eb0f5df4fe3c0e0bec07cef011e1836d4d0e45ef02bc48d3adde → 9f2993499adadfdef4065a9a7fb69c75f888d892d4ee6bdbe62619bc772f495c} +1 -1
- package/vendor/impeccable/bundle/blobs/{1c804990fd8ac23a4b19c42972b5ae591d17f620d0006f0f32927c8db5d5bf50 → a1af8b8a97665a3692eb39872c235796684a387a0b83785872f81aebd9dab046} +18 -11
- package/vendor/impeccable/bundle/blobs/{824b994782a1fe68a244bbdff7218a2e0854655d90cc0fb5ade7ef9259ba6305 → a27399e3056c77a28ddd310fb5b4dee6e8e440dfa1737f7e38815097bec4c3a9} +5 -5
- package/vendor/impeccable/bundle/blobs/a569989e6a3d6453b4c45e9474e162a15cc54e11732ac6baa7990a6e7cccc0b5 +21 -0
- package/vendor/impeccable/bundle/blobs/a75b892696469e3ccd2af33c9eef793e635efc3c5ac45336b0c1373d90c856b0 +63 -0
- package/vendor/impeccable/bundle/blobs/{3ba92d4aa840ec1b6c2fda224339489d6dd65eedf43bb45836af02584d1faa88 → a7e8e60df83c6f47590467094ab2a13f1fe28ce45959a4e69dd89575a4208646} +5 -0
- package/vendor/impeccable/bundle/blobs/{e49d2b0110c55751da3c965b4ae4d294aa676c961a09f8efbbbf22c1ec7c4fa0 → a892e337eee548d53252abb72ba5aa85cbcf556ffd8dc74e05534652c010d574} +1 -1
- package/vendor/impeccable/bundle/blobs/{8f0867db7c6f6a54348a0d951f198a1bd852cd12505d821e6e1ac6bd42e7fcea → a93397adc906e245c69b42d4b25931fc92dc75baa60ca9a3749ba23b52ba01a0} +3 -2
- package/vendor/impeccable/bundle/blobs/{424b2e75cb204e2dca7db4a40dfe5a81f78dc0fc58ac4790e8b7bbf2f330bba4 → a9e63b2df611805e845e0bb1cca1a0c27e83640a78185c9fd9de90d53a539cdc} +5 -0
- package/vendor/impeccable/bundle/blobs/ab80e6a971baa66342548a846ce3fb69824ef9ef4e0f26c6f02685f225d00bbd +26 -0
- package/vendor/impeccable/bundle/blobs/af35b5fb6e45acb6483a5fbb864c3eaa9c57bacc43857f48183c836041c670ae +101 -0
- package/vendor/impeccable/bundle/blobs/af5842c4844b692b817319d5375611d4211dc7f459fb12da358baefc3a6cd373 +63 -0
- package/vendor/impeccable/bundle/blobs/b2732083f8f1d1924d38f84f179491430aebda8e0fd1f1d0785e3f883bcf3a40 +63 -0
- package/vendor/impeccable/bundle/blobs/b3b1d5a4c80ce279d88896601deee9ccfeacdae0d0cd433600985a5f7ac93c72 +26 -0
- package/vendor/impeccable/bundle/blobs/{fd5579dbae1fc2495b7dddde48df9673acebd27953bbb56d506d3b470375c9e9 → b4be5499f404a926cdd2c55d8fb7409ba74a56b3d0c7d865594cc0254d3e499a} +5 -0
- package/vendor/impeccable/bundle/blobs/{2fd096823e4a93f19edd421a69e10f90ebb630a014c673d1802a927c6f47b7d2 → b626e0677288a1660e9ce80c4f0454b527010239681f6b8dcc0f36b4a4d6bcb2} +3 -1
- package/vendor/impeccable/bundle/blobs/{33b6b32c0c3c0c4a2b22bd2275176b1c88a006dd94592a854f629911a0b21cdc → b719be9c5d4ced5d649ec6c0c90630196e7ee513d0da482aef13c705fdc23ab6} +3 -1
- package/vendor/impeccable/bundle/blobs/{df0eb9e9a484fc7b8a0f3e50573a7d7f81e0f17598ac30d9f3fe5a6c6aa5fefa → b8938fea3399aa639b4c873248035c219658069eef7be62672254e2f72c056f4} +5 -0
- package/vendor/impeccable/bundle/blobs/{ee0a15fcfc244b76b896a2650a17b35e444d4311166b69a3cfa32d11f8f44851 → ba0d96d88ab40fad1cb522e60b11affc568cfe9d340110ac5e71f834ac3d0f4a} +12 -0
- package/vendor/impeccable/bundle/blobs/{426c7f5437dd3c23a4cfaef6964dc7f1e038480f92238499b85f3ce7e4472bf4 → bc48bca63dff44e1f0205bafb64e16b2d6fb294ace405dbc9ae06a3bc6107154} +3 -1
- package/vendor/impeccable/bundle/blobs/{c3ad2a5fa570876af6645c48d246c664859e19f253d2dc9e0ead34e785d5b40a → bdd676c8f29295addfdbceaab285bb1184ec3ef7ff60501908b97ea8269580c4} +3 -2
- package/vendor/impeccable/bundle/blobs/{38d4d404030c6ea935d3223db1eeb22c45d04a94f41f98e02a43cdc5af7ff2e3 → c06effcdc60859157208d3b7ee23d56160f2386f6a2dfa2514ba82fe21828ae0} +1 -1
- package/vendor/impeccable/bundle/blobs/c100b67a4ae248ad564182b181acb1ee2fe64c00049aeef62d4e7a3213726f37 +26 -0
- package/vendor/impeccable/bundle/blobs/c2dfc965319745c403b99e00e9e97de15f1300ea721bd3f708f0ac47aadc537b +101 -0
- package/vendor/impeccable/bundle/blobs/{e9da72a13eb3411d6bbb316953022f62abc4434f505e5345907b216eda9f793b → c6b3bc811eb23d90ff9add1e0e5b40999a0bbbab364f5e6d08061f36d30429a5} +1 -1
- package/vendor/impeccable/bundle/blobs/{82a5e564563333aabb7ab4d2f8c26c785dfe2c2416ac6e9f30cba31440676194 → cdf8a88b9865599c58fe285041d2d46eea7d9bd2d4075d82de358191742b20ad} +5 -5
- package/vendor/impeccable/bundle/blobs/cf3d3a296890ac1ee363fee930f252e20d0935cd575367ad017b3cdc2dc5a50d +26 -0
- package/vendor/impeccable/bundle/blobs/{a1e4febca3455787d7c753fe177a150dccde6e742957de400b0307247802d200 → d2e16da9bb6b33c931378d1bf57dcfff5dc426a71434bc352cec6aece715a66f} +18 -11
- package/vendor/impeccable/bundle/blobs/{c36f6aac0ddf52eabbb21df09fd3310540dca6b09e7a4017d18e94c06c469405 → d4a9e18a879bbb92aa0a56e16b45481090dffa4470efdecf52fb0da8c900be5d} +5 -5
- package/vendor/impeccable/bundle/blobs/{869fa5390b84bfd00d072f5280a9002ea3e3936edf5985241be641a87f03ff7b → d57c3e0453f601ad688911fca4471057c7b46b561fcd42a1e12a581101c5186c} +1 -1
- package/vendor/impeccable/bundle/blobs/{910461b1c1f8216155165955c860a884a1e2f557cb38f21ef512ea90ef6503c2 → d5f83912eda93d42f93522bb74aeff0ea04d9c559577ec52fcccc130dd03166d} +2 -1
- package/vendor/impeccable/bundle/blobs/{9deb14303b421b5a9232755b5b9f317716f33e1e211557a98a00a9c409775c4d → d6489d7f3e607ce3f8514a7a7d3a0eb5e8f1ac55859eaf7d5c31b53de8fab9f3} +18 -11
- package/vendor/impeccable/bundle/blobs/{37080ea5e5b381adb7eae7a427231b0ad0dee0f0916fc1d6b673b7101a5b425b → d6a51f4df6d76f16b95ab81268a689f4c5936d505c5bb25c80ad7423f927bbc6} +5 -0
- package/vendor/impeccable/bundle/blobs/{61c72fdde649bf7f2e0668e48f9d222666c81672100b5f2265940e7aa13c8767 → d7b99a57652cb8741d57a15ba7e06de4707fac02a97e5e001179da007272f2b8} +3 -1
- package/vendor/impeccable/bundle/blobs/{57402ef6fd9d0745f8c60d778f77da83a8b16edf751fa1013598a0f6e5f0f541 → d9963fd73bf6129fe0c8ec25c5148f50617ec85683b8eeae7e411c9a42e2db33} +2 -1
- package/vendor/impeccable/bundle/blobs/{581409ace104a81744b7d08f5398a2c207cf76d9e50751f807b4382eaf66454f → da3b2399814db89d67959268c646601957d3e8c641b09a5bdbce84217c1c2cfe} +5 -5
- package/vendor/impeccable/bundle/blobs/{249f0437a52ab3eb4bc4d4a9f38e085334c0fbb7795e88dd419e32b5f58c924d → dc3aeccbea3e997704ce8b170f56b0eaf343a14ad4fedb22a6dbee0f205aa37f} +5 -0
- package/vendor/impeccable/bundle/blobs/{433a79eee3ce4c99e79a7aebe3a6d8ec9ff70216772e0c2ff9dce3a01d672963 → dcc1572e739cdabcbf084f276b447cb686aa18459896e6d8fe29f4d7d807bd1d} +5 -5
- package/vendor/impeccable/bundle/blobs/{2d7086992c07df1fc734cdf9c420c4bd8ad409ab7909e07c8b486c303d420732 → dd66761b291c7dbca6e9efd22023e38f8c53ad310f3a6cdab5dc7ecd7ae8f31f} +3 -2
- package/vendor/impeccable/bundle/blobs/dd953992625c240fd1842aaf533a865aabd09487cbc16fa01fe8bb4b4365b843 +101 -0
- package/vendor/impeccable/bundle/blobs/{df4f14df1daaad1606b682995f649da19a85debf264092447b3b7ddb8b4bc1ce → de70398719140e4951aa111e9625de5ed916ad1ef0877e4ab6f6b4a7e3cc5f8f} +18 -11
- package/vendor/impeccable/bundle/blobs/{8b23562ccc3e41609ce6e67fdad6cc57b6c961964c329eff6975a1b4c5471c0d → deaaa533475b6a9f7dd52e01a1f1997aa3af146694334981650f8c846f939559} +3 -1
- package/vendor/impeccable/bundle/blobs/{041535231366047a0beeb5daa64ea9c23d5a566580f7dafdb8c0623cb4a7e76b → e07176229b8a330970ca3c9c5e3dd68c2aaeb726285e30f471e91053d7f8e798} +1 -1
- package/vendor/impeccable/bundle/blobs/{115e1c3f1b58b5129910ed925dbf65d61d5ac4c2036618847555ce40098aae97 → e1075ea5b34ac9c60f7c5bda97356eeaf1b683b599592d324fd3704f0852ad7a} +18 -11
- package/vendor/impeccable/bundle/blobs/e3af212117e0c552b0976687200fe8f95846a01725a482e8e4dbfd75e40dbfa6 +26 -0
- package/vendor/impeccable/bundle/blobs/e3c2031978cd670d7150ff3140f12cf8b6882ef638ea9a9985caffa9a80c8713 +63 -0
- package/vendor/impeccable/bundle/blobs/e6e18e7c23cfe82961d90b9714cb466c20bd83f222ac63e9339b6b2c304e1787 +26 -0
- package/vendor/impeccable/bundle/blobs/e7af7ad18b307a3171fcf49421df2a557f93289d27af2430f10ee74e2a2fc2d3 +101 -0
- package/vendor/impeccable/bundle/blobs/{b161198874e4e77599bc31691e78790be14bacc2eb03be168c8a7543ece9fbe1 → e85da3098368807689009184eca2bb09a91bdb6cb1be3e7a61f91f1ae31cd69b} +18 -11
- package/vendor/impeccable/bundle/blobs/{6bdbc3f745ceee15e10b050f109ce42bbeb53ab3c3b5239257de1d596654dee7 → e8720f3aa41135211cc58cc299a39eeda86c75651f4279cc1ede8db10dcc0584} +4 -0
- package/vendor/impeccable/bundle/blobs/e9861052457cc1ddc42c687bb8c33a877834ced94fed74af2a4f00f6bae50795 +101 -0
- package/vendor/impeccable/bundle/blobs/{d1faa55eb956033d28e9f27fd2bc2a9f62c5da0f0abd6534819cc0a04db54d9d → eb3e86876c20f1cfc443dcbe48d8f41fea6e815082a304610be432272429a06d} +5 -0
- package/vendor/impeccable/bundle/blobs/{0e1819750e5448311a051d35ab6d0be0830418f78ca872ef10469fafebb27d4f → eba472f6190541c28e2e647ed019f43564ba5b92d629963f34c899175b25b31e} +5 -5
- package/vendor/impeccable/bundle/blobs/{f173ff03f989f162cee815feb2d8ca72daf00019c48694d89db16d52171a79c0 → eba609589a5a051643a7bae60b7cceef7cfe44d0f8bd9229e61473ac75910fb3} +1 -1
- package/vendor/impeccable/bundle/blobs/{8eb466778023fccea641654d662157b123eeb360f4a0875bf6fbe3d93680851c → ec81b008d2641402e3352b09b1a90562ef7a24598d7c5aded475038cce63aca0} +1 -1
- package/vendor/impeccable/bundle/blobs/{4acfb9e38f6e09f7484e36fc19704d69eab159436ee9329168be74c493042f22 → ec86b8633fbeb14ef2272f220fdd98089972b03b99da83e49eeb6a8b73b00617} +3 -1
- package/vendor/impeccable/bundle/blobs/{d15a2914d93e07a4956acd5c8b8211af17380f527acd10d8acf4f4920badaaaf → ef2e97cd690baf6fe5c895dd2d8844aff9fcc4a8bc04973402678a739c81d712} +4 -3
- package/vendor/impeccable/bundle/blobs/f0fbe529f63961a027bada2e6a3cbe86f4af0dba4b8e1010da22b007f9002f66 +63 -0
- package/vendor/impeccable/bundle/blobs/{c02feba25a961a72647ad317aba2d65baeeed53c4cdcc072f25bb37f4d867d43 → f254d59ff973e907cacdc2c34b8b4de075437d292de31dac30e10a9d7035086c} +3 -2
- package/vendor/impeccable/bundle/blobs/f5efb1b1dd4cd18e1d4789d7c8e0188f4342b25fffd53af6088ba8b67774fb99 +26 -0
- package/vendor/impeccable/bundle/blobs/{7af0a8665057c83b39bca2c8c7427ef2343734f70d4128c377113a6726a1e3b1 → f68a3d68ac92606e91aa8878e003d9432ddd09aa97ca01c6b3ce46c937dca316} +524 -4
- package/vendor/impeccable/bundle/blobs/{381ff89aa76e82a0d98456ec31cb117555ae045539fba47c45056daa50f611ca → f84b653ede0804d21e6210c6d21fd5352023914fedceae6ff14e20f1e93b06e7} +5 -5
- package/vendor/impeccable/bundle/blobs/{5b30a06646ad5e453d6b5ed1b8d446f69fca3cd13b8aeda28f0d0b2cbe8f62d1 → fb32d99751c5fc24493ff4460be1767bd5236dc820fd337775067c0620d1a7a6} +3 -1
- package/vendor/impeccable/bundle/blobs/{733504a70ed20bcfca9c26c353f7b88f8491d24f3f2fe124dc1e73b28eefa296 → fb5fec24adafa48df43eece6907c1c986a4772cbdc64142c881f00c3b312e9ca} +18 -11
- package/vendor/impeccable/bundle/blobs/fc149b5bc7a8d0cc9b9bf86e5013793f3857c1c302212e9aaf101cb95427386b +101 -0
- package/vendor/impeccable/bundle/manifest.json +413 -298
- package/skills/grafton-view-dev/SKILL.md +0 -195
- package/skills/grafton-view-dev/references/bindings.md +0 -120
- package/skills/grafton-view-dev/references/components.md +0 -168
- package/skills/grafton-view-dev/references/recipes.md +0 -208
- package/skills/grafton-view-dev/references/schema.md +0 -86
- package/skills/grafton-view-dev/references/stores.md +0 -310
- package/skills/portal-backend-app/SKILL.md +0 -56
- package/skills/portal-backend-app/references/gate-and-tokens.md +0 -93
- package/skills/portal-backend-app/references/wiring-and-conventions.md +0 -71
- package/skills/xgent-init/references/external-app-CLAUDE.template.md +0 -249
- package/vendor/impeccable/bundle/blobs/800cf1c0392b24de7c0a1c6ea6778ecb433dec71c49a150bce96a98477527b2f +0 -1
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: react-19-migration
|
|
3
|
+
description: Upgrade React 18 source and test files to React 19 — removed APIs, ref as a prop, defaultProps, test-utils, and StrictMode changes.
|
|
4
|
+
license: MIT
|
|
5
|
+
last_reviewed: 2026-09-26
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# React 19 migration — removed APIs, source rewrites, and tests
|
|
9
|
+
|
|
10
|
+
## Contents
|
|
11
|
+
|
|
12
|
+
- [Ground rule](#ground-rule--an-upgrade-pr-changes-api-surface-only)
|
|
13
|
+
- Source files: [root API](#pattern-1--root-api-render--hydrate--unmountcomponentatnode) · [findDOMNode](#pattern-2--finddomnode--a-ref-on-the-dom-element) · [forwardRef](#pattern-3--forwardref--ref-as-a-prop) · [defaultProps](#pattern-4--defaultprops-on-function-components--default-parameters) · [legacy context](#pattern-5--legacy-context--createcontext) · [string refs](#pattern-6--string-refs--createref-or-callback-refs) · [propTypes](#pattern-7--proptypes-are-silently-ignored) · [JSX transform](#pattern-8--new-jsx-transform-and-unused-react-imports) · [TypeScript](#pattern-9--typescript-only-changes)
|
|
14
|
+
- Test files: [act](#test-1--import-act-from-react) · [test-utils](#test-2--replace-the-rest-of-react-domtest-utils) · [react-test-renderer](#test-3--react-test-renderer-is-deprecated) · [StrictMode counts](#test-4--strictmode-call-counts-what-actually-changed) · [act warnings](#test-5--not-wrapped-in-act-warnings)
|
|
15
|
+
- [Scan checklist](#scan-checklist) · [Decision table](#decision-table--react-19-fix-by-symptom)
|
|
16
|
+
|
|
17
|
+
## When to apply
|
|
18
|
+
|
|
19
|
+
- Upgrading `react` / `react-dom` from 18 to 19
|
|
20
|
+
- Errors after the upgrade: `ReactDOM.render is not a function`, `findDOMNode is not a function`, a missing `act` export, the "outdated JSX transform" warning
|
|
21
|
+
- Code uses `forwardRef`, `defaultProps` on function components, `contextTypes`, string refs, or `react-dom/test-utils`
|
|
22
|
+
- Tests fail or change call counts after the upgrade
|
|
23
|
+
|
|
24
|
+
Most mechanical rewrites have official codemods. Run them first, then fix what's left by hand:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npx codemod@latest react/19/migration-recipe # render/hydrate, string refs, act import, useFormState, propTypes
|
|
28
|
+
npx types-react-codemod@latest preset-19 ./src # TypeScript type changes
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Ground rule — an upgrade PR changes API surface only
|
|
32
|
+
|
|
33
|
+
Keep the upgrade diff limited to removed or changed APIs. `createRoot`, `useTransition`, `startTransition`, `useDeferredValue`, `Suspense`, and `lazy` work the same in React 19 — leave that logic untouched. Adopt new APIs ([`use`](data-fetching.md#pattern-5--use-suspense-boundaries-for-non-critical-data), [Actions](actions.md)) in follow-up PRs once the upgrade is green; mixing the two makes regressions impossible to bisect.
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# Files the upgrade touched that also contain concurrent logic — review each diff:
|
|
37
|
+
git diff --name-only main... | xargs grep -lE "useTransition|useDeferredValue|startTransition|<Suspense" 2>/dev/null
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Source files
|
|
41
|
+
|
|
42
|
+
### Pattern 1 — Root API: `render` / `hydrate` / `unmountComponentAtNode`
|
|
43
|
+
|
|
44
|
+
All three are removed from `react-dom`.
|
|
45
|
+
|
|
46
|
+
**Incorrect (React 18 legacy root):**
|
|
47
|
+
|
|
48
|
+
```tsx
|
|
49
|
+
import ReactDOM from 'react-dom'
|
|
50
|
+
|
|
51
|
+
ReactDOM.render(<App />, container)
|
|
52
|
+
ReactDOM.hydrate(<App />, container)
|
|
53
|
+
ReactDOM.unmountComponentAtNode(container)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Correct:**
|
|
57
|
+
|
|
58
|
+
```tsx
|
|
59
|
+
import { createRoot, hydrateRoot } from 'react-dom/client'
|
|
60
|
+
|
|
61
|
+
const root = createRoot(container)
|
|
62
|
+
root.render(<App />)
|
|
63
|
+
|
|
64
|
+
const ssrRoot = hydrateRoot(container, <App />)
|
|
65
|
+
|
|
66
|
+
root.unmount() // needs the root object, not the container
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
`unmount()` needs the root that `createRoot` returned. If the old code only kept the container, store the root where it's created (a module variable, or a `Map` keyed by container for widgets that mount many roots).
|
|
70
|
+
|
|
71
|
+
### Pattern 2 — `findDOMNode` → a ref on the DOM element
|
|
72
|
+
|
|
73
|
+
**Incorrect:**
|
|
74
|
+
|
|
75
|
+
```tsx
|
|
76
|
+
class Tooltip extends React.Component {
|
|
77
|
+
componentDidMount() {
|
|
78
|
+
const width = findDOMNode(this).offsetWidth
|
|
79
|
+
}
|
|
80
|
+
render() {
|
|
81
|
+
return <div>{this.props.children}</div>
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Correct:**
|
|
87
|
+
|
|
88
|
+
```tsx
|
|
89
|
+
class Tooltip extends React.Component {
|
|
90
|
+
nodeRef = React.createRef<HTMLDivElement>()
|
|
91
|
+
|
|
92
|
+
componentDidMount() {
|
|
93
|
+
const width = this.nodeRef.current!.offsetWidth
|
|
94
|
+
}
|
|
95
|
+
render() {
|
|
96
|
+
return <div ref={this.nodeRef}>{this.props.children}</div>
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Put the ref on the DOM element the code measures. A ref on a class component points to the instance, not its DOM, so `componentRef.current` is not a drop-in replacement for `findDOMNode(componentRef.current)`.
|
|
102
|
+
|
|
103
|
+
### Pattern 3 — `forwardRef` → `ref` as a prop
|
|
104
|
+
|
|
105
|
+
Function components receive `ref` as a regular prop. `forwardRef` still works in React 19, so converting is optional in the upgrade PR — do it when you touch the file.
|
|
106
|
+
|
|
107
|
+
**Before:**
|
|
108
|
+
|
|
109
|
+
```tsx
|
|
110
|
+
const Input = forwardRef<HTMLInputElement, InputProps>((props, ref) => (
|
|
111
|
+
<input ref={ref} {...props} />
|
|
112
|
+
))
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**After:**
|
|
116
|
+
|
|
117
|
+
```tsx
|
|
118
|
+
function Input({ ref, ...props }: InputProps & { ref?: React.Ref<HTMLInputElement> }) {
|
|
119
|
+
return <input ref={ref} {...props} />
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
`useImperativeHandle` is unchanged — only the wrapper goes away (see [Ref rule 3](component-patterns.md#ref-rule-3--use-useimperativehandle-to-limit-exposed-dom-surface)).
|
|
124
|
+
|
|
125
|
+
Code that inspects children must read `element.props.ref`. `element.ref` is deprecated and warns: "Accessing element.ref is no longer supported. ref is now a regular prop."
|
|
126
|
+
|
|
127
|
+
### Pattern 4 — `defaultProps` on function components → default parameters
|
|
128
|
+
|
|
129
|
+
React 19 ignores `defaultProps` on function components. **Class components still support `static defaultProps`** — leave them alone.
|
|
130
|
+
|
|
131
|
+
**Incorrect (silently ignored in React 19):**
|
|
132
|
+
|
|
133
|
+
```tsx
|
|
134
|
+
function Button({ label, variant }: Props) {
|
|
135
|
+
return <button className={variant}>{label}</button>
|
|
136
|
+
}
|
|
137
|
+
Button.defaultProps = { label: 'Click', variant: 'primary' }
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Correct:**
|
|
141
|
+
|
|
142
|
+
```tsx
|
|
143
|
+
function Button({ label = 'Click', variant = 'primary' }: Props) {
|
|
144
|
+
return <button className={variant}>{label}</button>
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Both mechanisms apply only when the prop is `undefined`; an explicit `null` is passed through either way, so the semantics match.
|
|
149
|
+
|
|
150
|
+
Watch non-primitive defaults. `defaultProps = { items: [] }` created the array once; `{ items = [] }` creates a new array on every render and breaks `memo` and effect dependencies. Hoist it (see [Pattern 9](rerender-optimization.md#pattern-9--extract-stable-default-values-for-memoized-components)):
|
|
151
|
+
|
|
152
|
+
```tsx
|
|
153
|
+
const NO_ITEMS: Item[] = []
|
|
154
|
+
|
|
155
|
+
function List({ items = NO_ITEMS }: Props) { /* ... */ }
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Pattern 5 — Legacy context → `createContext`
|
|
159
|
+
|
|
160
|
+
`contextTypes`, `childContextTypes`, and `getChildContext` are removed.
|
|
161
|
+
|
|
162
|
+
**Incorrect:**
|
|
163
|
+
|
|
164
|
+
```tsx
|
|
165
|
+
class App extends React.Component {
|
|
166
|
+
static childContextTypes = { theme: PropTypes.string }
|
|
167
|
+
getChildContext() { return { theme: 'dark' } }
|
|
168
|
+
render() { return <Toolbar /> }
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
class Button extends React.Component {
|
|
172
|
+
static contextTypes = { theme: PropTypes.string }
|
|
173
|
+
render() { return <button className={this.context.theme} /> }
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**Correct:**
|
|
178
|
+
|
|
179
|
+
```tsx
|
|
180
|
+
const ThemeContext = createContext('light')
|
|
181
|
+
|
|
182
|
+
function App() {
|
|
183
|
+
return (
|
|
184
|
+
<ThemeContext value="dark"> {/* React 19; older versions use <ThemeContext.Provider> */}
|
|
185
|
+
<Toolbar />
|
|
186
|
+
</ThemeContext>
|
|
187
|
+
)
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
class Button extends React.Component {
|
|
191
|
+
static contextType = ThemeContext // class consumers: modern contextType is fine
|
|
192
|
+
render() { return <button className={this.context} /> }
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Migrate the provider and every consumer in the same change. The old and new APIs don't see each other, so a half-migrated tree reads `undefined`. Search for all consumers first (`grep -rn "contextTypes" src/`) — they're often in other files.
|
|
197
|
+
|
|
198
|
+
### Pattern 6 — String refs → `createRef` or callback refs
|
|
199
|
+
|
|
200
|
+
**Incorrect:**
|
|
201
|
+
|
|
202
|
+
```tsx
|
|
203
|
+
class Search extends React.Component {
|
|
204
|
+
render() {
|
|
205
|
+
return (
|
|
206
|
+
<>
|
|
207
|
+
<input ref="input" />
|
|
208
|
+
<button onClick={() => this.refs.input.focus()}>Focus</button>
|
|
209
|
+
</>
|
|
210
|
+
)
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
**Correct:**
|
|
216
|
+
|
|
217
|
+
```tsx
|
|
218
|
+
class Search extends React.Component {
|
|
219
|
+
input = React.createRef<HTMLInputElement>()
|
|
220
|
+
// or a callback ref: input: HTMLInputElement | null = null; <input ref={el => { this.input = el }} />
|
|
221
|
+
|
|
222
|
+
render() {
|
|
223
|
+
return (
|
|
224
|
+
<>
|
|
225
|
+
<input ref={this.input} />
|
|
226
|
+
<button onClick={() => this.input.current?.focus()}>Focus</button>
|
|
227
|
+
</>
|
|
228
|
+
)
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Pattern 7 — `propTypes` are silently ignored
|
|
234
|
+
|
|
235
|
+
React 19 removed the `propTypes` checks; declarations stay valid but nothing validates at runtime. React recommends migrating to TypeScript (`npx codemod@latest react/prop-types-typescript`). That is a separate change — don't delete `propTypes` in the upgrade PR. If they stay, say so in the code so readers don't assume runtime validation:
|
|
236
|
+
|
|
237
|
+
```tsx
|
|
238
|
+
// NOTE: React 19 no longer runs propTypes validation at runtime.
|
|
239
|
+
// PropTypes kept for documentation and IDE tooling only.
|
|
240
|
+
Button.propTypes = { label: PropTypes.string }
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Pattern 8 — New JSX transform and unused `React` imports
|
|
244
|
+
|
|
245
|
+
React 19 requires the new JSX transform; without it you get "Your app (or one of its dependencies) is using an outdated JSX transform." With the new transform, `import React from 'react'` is only needed where the file references `React.*`.
|
|
246
|
+
|
|
247
|
+
```tsx
|
|
248
|
+
// Before
|
|
249
|
+
import React, { useState } from 'react'
|
|
250
|
+
|
|
251
|
+
// After (no React.* usage in the file)
|
|
252
|
+
import { useState } from 'react'
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
# Files importing React as a default that never reference React.*:
|
|
257
|
+
grep -rlE "^import React[ ,]" src/ | xargs grep -L "React\."
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### Pattern 9 — TypeScript-only changes
|
|
261
|
+
|
|
262
|
+
These fail type checking, not at runtime. JavaScript projects need no change.
|
|
263
|
+
|
|
264
|
+
| Change | Fix |
|
|
265
|
+
|---|---|
|
|
266
|
+
| `useRef()` requires an argument | `useRef<HTMLDivElement>(null)` or `useRef<number>(undefined)` |
|
|
267
|
+
| Ref callbacks may not return a value (the return is now treated as a cleanup) | `ref={el => { instance = el }}`, not `ref={el => (instance = el)}` |
|
|
268
|
+
| `ReactElement` props default to `unknown`, not `any` | Type the props, or run `types-react-codemod react-element-default-any-props` |
|
|
269
|
+
|
|
270
|
+
`preset-19` in `types-react-codemod` handles most of these.
|
|
271
|
+
|
|
272
|
+
## Test files
|
|
273
|
+
|
|
274
|
+
Fix in this order — each step unblocks the next:
|
|
275
|
+
|
|
276
|
+
1. `act` import
|
|
277
|
+
2. `Simulate` → `fireEvent`
|
|
278
|
+
3. The rest of `react-dom/test-utils`
|
|
279
|
+
4. StrictMode call counts — measure, don't guess
|
|
280
|
+
5. Remaining "not wrapped in act" warnings
|
|
281
|
+
6. The custom render helper — check once per codebase, not per test
|
|
282
|
+
|
|
283
|
+
### Test 1 — Import `act` from `react`
|
|
284
|
+
|
|
285
|
+
**Incorrect (removed in React 19):**
|
|
286
|
+
|
|
287
|
+
```tsx
|
|
288
|
+
import { act } from 'react-dom/test-utils'
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
**Correct:**
|
|
292
|
+
|
|
293
|
+
```tsx
|
|
294
|
+
import { act } from 'react'
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
Codemod: `npx codemod@latest react/19/replace-act-import`. When `act` shares an import with other test-utils helpers, split it off and replace the rest (next section).
|
|
298
|
+
|
|
299
|
+
### Test 2 — Replace the rest of `react-dom/test-utils`
|
|
300
|
+
|
|
301
|
+
Every other `test-utils` export errors when called in React 19. Use React Testing Library:
|
|
302
|
+
|
|
303
|
+
| `react-dom/test-utils` | Replacement |
|
|
304
|
+
|---|---|
|
|
305
|
+
| `act` | `import { act } from 'react'` |
|
|
306
|
+
| `Simulate.click(el)`, `.change(el, init)`, `.submit`, `.keyDown` | `fireEvent.click(el)`, `fireEvent.change(el, init)`, … from `@testing-library/react` (same arguments) |
|
|
307
|
+
| `renderIntoDocument` | `render` |
|
|
308
|
+
| `findRenderedDOMComponentWithTag` / `...WithClass` | `getByRole`, `getByTestId`, or `container.querySelector` |
|
|
309
|
+
| `scryRenderedDOMComponentsWithTag` | `getAllByRole` |
|
|
310
|
+
| `isElement`, `isCompositeComponent`, `isDOMComponent` | Delete — RTL tests don't inspect component types |
|
|
311
|
+
|
|
312
|
+
```tsx
|
|
313
|
+
// Before
|
|
314
|
+
import { act, Simulate } from 'react-dom/test-utils'
|
|
315
|
+
Simulate.change(input, { target: { value: 'hello' } })
|
|
316
|
+
|
|
317
|
+
// After
|
|
318
|
+
import { fireEvent } from '@testing-library/react'
|
|
319
|
+
fireEvent.change(input, { target: { value: 'hello' } })
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Test 3 — `react-test-renderer` is deprecated
|
|
323
|
+
|
|
324
|
+
In React 19 it logs a deprecation warning and renders concurrently, so snapshots and synchronous assertions may shift. Move those tests to React Testing Library instead of re-recording snapshots.
|
|
325
|
+
|
|
326
|
+
### Test 4 — StrictMode call counts: what actually changed
|
|
327
|
+
|
|
328
|
+
StrictMode **still** runs one extra setup → cleanup → setup cycle for every Effect in development (see [Cleanup rule 3](effect-patterns.md#cleanup-rule-3--development-double-fire-is-intentional-fix-cleanup-not-the-guard)). Effect spy counts do not change because of the upgrade — if one did, find out why rather than editing the number.
|
|
329
|
+
|
|
330
|
+
What changed in React 19 StrictMode:
|
|
331
|
+
|
|
332
|
+
| Spy on | React 18 StrictMode | React 19 StrictMode |
|
|
333
|
+
|---|---|---|
|
|
334
|
+
| Component body (render) | 2 per render | 2 per render — unchanged |
|
|
335
|
+
| `useEffect` setup | setup, cleanup, setup | Unchanged |
|
|
336
|
+
| `useMemo` / `useCallback` factory on mount | Ran in both renders | Second render reuses the first result — count drops |
|
|
337
|
+
| Ref callback on initial mount | Once | Invoked, cleaned up, invoked again — count rises |
|
|
338
|
+
|
|
339
|
+
These counts only apply when the test renders inside StrictMode — an explicit `<StrictMode>` wrapper, a custom render helper, or RTL's `reactStrictMode` option. Check the helper once.
|
|
340
|
+
|
|
341
|
+
Read the real numbers before editing any assertion:
|
|
342
|
+
|
|
343
|
+
```bash
|
|
344
|
+
npm test -- --watchAll=false --testPathPattern="<file>" 2>&1 | grep -E "Expected|Received"
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
Then match the difference to a row above. An unexplained change is a bug, not a new baseline.
|
|
348
|
+
|
|
349
|
+
### Test 5 — "not wrapped in act(...)" warnings
|
|
350
|
+
|
|
351
|
+
React recommends async `act`; the sync form "doesn't work in all cases" and will be removed:
|
|
352
|
+
|
|
353
|
+
```tsx
|
|
354
|
+
await act(async () => {
|
|
355
|
+
fireEvent.click(button)
|
|
356
|
+
})
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
RTL's `findBy*` queries and `waitFor` already wrap `act`. Prefer them over manual `act` for anything that resolves asynchronously. Outside RTL, set `globalThis.IS_REACT_ACT_ENVIRONMENT = true` in the test setup.
|
|
360
|
+
|
|
361
|
+
## Scan checklist
|
|
362
|
+
|
|
363
|
+
```bash
|
|
364
|
+
grep -rnE "ReactDOM\.(render|hydrate)\(|unmountComponentAtNode|findDOMNode" src/ # Pattern 1–2
|
|
365
|
+
grep -rn "forwardRef" src/ # Pattern 3 (optional)
|
|
366
|
+
grep -rnE "\.defaultProps\s*=" src/ # Pattern 4 — function components only
|
|
367
|
+
grep -rnE "contextTypes|childContextTypes|getChildContext" src/ # Pattern 5
|
|
368
|
+
grep -rnE "ref=\"|this\.refs\." src/ # Pattern 6
|
|
369
|
+
grep -rnE "\.propTypes\s*=|static propTypes" src/ # Pattern 7
|
|
370
|
+
grep -rn "useRef()" src/ # Pattern 9 (TypeScript)
|
|
371
|
+
grep -rnE "react-dom/test-utils|react-test-renderer" src/ # Test 1–3
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
## Decision table — React 19 fix by symptom
|
|
375
|
+
|
|
376
|
+
| Symptom | Fix |
|
|
377
|
+
|---|---|
|
|
378
|
+
| `ReactDOM.render` / `hydrate` is not a function | `createRoot(container).render()` / `hydrateRoot(container, ui)` |
|
|
379
|
+
| `unmountComponentAtNode` is not a function | Keep the root object; call `root.unmount()` |
|
|
380
|
+
| `findDOMNode` is not a function | Ref on the DOM element |
|
|
381
|
+
| Function component defaults stopped applying | ES6 default parameters; hoist non-primitive defaults |
|
|
382
|
+
| `this.context` is `undefined` in a class | Legacy context → `createContext` + `static contextType` |
|
|
383
|
+
| `this.refs.x` is `undefined` | `createRef()` or a callback ref |
|
|
384
|
+
| PropTypes warnings stopped appearing | Expected — migrate to TypeScript in a separate PR |
|
|
385
|
+
| "outdated JSX transform" warning | Enable the automatic JSX runtime in the compiler config |
|
|
386
|
+
| `act` import fails | `import { act } from 'react'` |
|
|
387
|
+
| `Simulate` / other test-utils throw | React Testing Library equivalents |
|
|
388
|
+
| StrictMode spy count changed | Match it to the table in Test 4; effect counts should not change |
|
|
389
|
+
|
|
390
|
+
## When NOT to apply
|
|
391
|
+
|
|
392
|
+
- **Class component `defaultProps`:** still supported — rewriting them as constructor logic loses the "only when `undefined`" semantics.
|
|
393
|
+
- **Converting every `forwardRef` in the upgrade PR:** it still works; convert when you touch the file.
|
|
394
|
+
- **Deleting `propTypes`:** they're harmless; replacing them with types is its own change.
|
|
395
|
+
- **Adopting `use`, Actions, or `useOptimistic` during the upgrade:** stabilize first (see the ground rule).
|
|
396
|
+
|
|
397
|
+
## Common failure modes
|
|
398
|
+
|
|
399
|
+
| Mistake | Consequence |
|
|
400
|
+
|---|---|
|
|
401
|
+
| Changing effect-count assertions from 2 to 1 "because React 19 stopped double-invoking" | Wrong premise — tests go green while cleanup bugs go unnoticed |
|
|
402
|
+
| Removing `static defaultProps` from class components | Needless rewrite; hand-rolled defaults often mishandle `false` and `0` |
|
|
403
|
+
| `{ items = [] }` replacing `defaultProps` in a memoized component | New array every render; `memo` and effect deps break |
|
|
404
|
+
| Migrating the legacy context provider but not all consumers | Consumers read `undefined` |
|
|
405
|
+
| `componentRef.current` as a `findDOMNode` replacement on a class ref | Gets the instance, not the DOM node |
|
|
406
|
+
| Mixing new-API adoption into the upgrade PR | Regressions can't be bisected |
|
|
407
|
+
| Sync `act` around async updates | Flaky "not wrapped in act" warnings and missed updates |
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reflect
|
|
3
|
+
description: "Compatibility entry for agi-mode Reflection: review the active conversation for evidenced, durable lessons and route them to bounded improvements. Use when the user asks to reflect or run /reflect."
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Reflect
|
|
8
|
+
|
|
9
|
+
The maintained workflow and reviewer templates now live in **agi-mode**. Read and execute [Reflection](../agi-mode/playbooks/reflection.md).
|
|
10
|
+
|
|
11
|
+
Use only the current conversation and authorized materials. Preserve whether the user requested findings or also authorized skill edits; a reflection request alone does not authorize external tickets or global changes.
|
|
12
|
+
|
|
13
|
+
Resolve the sibling path or the registered installation of `agi-mode`. This compatibility entry requires that skill; if unavailable, report the missing dependency and do not claim the review workflow ran.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review-code
|
|
3
|
+
description: 评审未提交变更(含 staged、unstaged、untracked)、指定 commit、commit 范围或相对基准分支的差异,可附开发计划核对本次实现,默认将有证据、按 P0–P3 排序的完整评审报告落盘。用户要求 review-code、代码审查、审查 diff 或提交前评审时使用;不用于单独评审开发计划、全仓质量普查或直接实现修复。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# review-code · 代码变更评审
|
|
7
|
+
|
|
8
|
+
判断本次变更是否引入值得作者修复的缺陷,以及是否满足本次承诺的行为。以 Codex 原生 review 的缺陷门槛为准,补充需求符合性、跨文件影响和验证证据;不以问题数量衡量评审质量。
|
|
9
|
+
|
|
10
|
+
**默认交付是完整 Markdown 报告:实际写入文件、回读核验,聊天给结论摘要与文件链接。用户明确要求仅聊天或不写文件时例外。** 代码和计划默认只读,不自动修复、更新计划进度、提交、发 PR 评论或审批 PR。用户同时授权修复时,先保留原始评审基线,再执行修复并区分复核结果。
|
|
11
|
+
|
|
12
|
+
`references/` 相对本文件解析;目标仓路径、技术栈、规则和工具在运行时发现。语言跟随用户。本 skill 可独立工作,不依赖本机安装 Codex CLI 或社区 skill。
|
|
13
|
+
|
|
14
|
+
## 1. 确定审查对象
|
|
15
|
+
|
|
16
|
+
1. 读取适用的仓库和子目录指令、review 专项约定。用一句话概括变更意图,区分用户明确要求与从代码推断的意图;缺少提交说明不自动中止评审。
|
|
17
|
+
2. 按 [references/git-scopes.md](references/git-scopes.md) 解析输入,固定仓库根、模式、base/target SHA、工作树快照、文件限制与可选计划版本。未指定模式且存在未提交变更时,声明采用 uncommitted;工作树干净且没有明确对象时询问目标,不擅自选择最近 commit 或默认主分支。
|
|
18
|
+
3. 用户给出的模式冲突、ref 不存在或范围端点含义无法确定时,先澄清该部分;可继续读取规则。不要静默替换基准或扩成整仓审查。
|
|
19
|
+
4. 读 [references/report-contract.md](references/report-contract.md) 确定报告路径。建立简短覆盖清单:变更文件/行为、必要上下游、计划范围(若有)、验证方式、证据缺口、落盘和回读。
|
|
20
|
+
|
|
21
|
+
## 2. 理解需求与行为
|
|
22
|
+
|
|
23
|
+
- 先读完整 diff,再按风险阅读所在函数、调用者、数据模型、权限边界、相关测试和配置。diff 之外的代码用于证明影响,不把与本次变更无关的旧问题塞进 findings。截断输出须分段补读;无法读完就标明未覆盖。
|
|
24
|
+
- 按 [references/review-lenses.md](references/review-lenses.md) 检查适用维度:需求符合性、正确性与兼容性、安全与数据、性能与资源、测试与交付。按实际变更选择深度,不套全量 checklist 或强制每个维度产出问题。
|
|
25
|
+
- 附开发计划时,读取用户指定版本及必要引用,提取本次任务/里程碑承诺、需求与验收 ID、排除项。核查遗漏、偏离和越界的实际后果。计划是待验证的契约材料,作者“已完成”的声明不能代替代码证据。
|
|
26
|
+
- 只要求本次范围应完成的内容;不得因后续里程碑未实现而报缺陷。范围不清时列待确认项,继续独立代码审查。不改计划、不把代码评审变成计划架构重审;未附计划时照常依据用户要求、已有契约和调用链审查。
|
|
27
|
+
- 默认由当前 agent 完成。用户或适用仓库规则要求并行 reviewer 时,给每位相同基线和明确只读范围,分派互补的行为链或风险维度;主 agent 复核原始证据、去重并单独写报告。不得把多数意见当证据,也不虚构独立复核。
|
|
28
|
+
|
|
29
|
+
## 3. 验证候选问题
|
|
30
|
+
|
|
31
|
+
每个进入 findings 的问题必须同时满足:
|
|
32
|
+
|
|
33
|
+
1. **由本次变更引入或实际激活**:能说明基线与目标行为的差别;若改动让旧代码新近可达,证明这条因果链。
|
|
34
|
+
2. **具体且可执行**:有真实可达的输入/状态、故障行为、受影响调用方或契约,以及最小修复方向。不能只说“可能影响其他模块”。
|
|
35
|
+
3. **有实质影响**:影响正确性、安全、性能或可维护性,且修复要求符合该仓库实际标准。纯风格、个人偏好、无关重构和假设性的防御代码不报。
|
|
36
|
+
4. **证据足够**:直接阅读目标版本代码、相关需求/规则,必要时做最小复现;不能依赖作者未表达的意图。明确的行为变更本身不是 bug,但仍要验证它是否破坏承诺的契约。
|
|
37
|
+
|
|
38
|
+
验证时:
|
|
39
|
+
|
|
40
|
+
- 先检查现有校验、类型约束、上游过滤、事务或补偿是否已处理该场景;不因局部缺少 `try/catch`、空值判断或缓存就推断故障。
|
|
41
|
+
- 选择能验证该行为的现有测试、类型检查或最小实验,先读命令及相关配置,避免自动修复、快照更新、迁移、部署或访问真实业务数据。需要写临时复现时使用隔离临时目录;不向目标代码库添加测试或修复。
|
|
42
|
+
- 实际执行才记为“通过”;写明命令、所测版本、结果和限制。无法运行时保留充分的静态证据或列待核实项,不强制运行无关全量测试,也不用测试通过替代需求检查。
|
|
43
|
+
- 历史 commit/范围的运行验证必须使用对应目标快照;当前 checkout 的测试不能证明另一 commit。对原有失败与新增失败做必要的基线比较。
|
|
44
|
+
- 技术结论依赖外部接口或版本且本地无法确证时,查对应版本的官方资料并引用;不可访问时说明证据缺口。性能问题说明实际数据规模/复杂度,安全问题说明输入可控性与可达路径,不把模式匹配当漏洞结论。
|
|
45
|
+
- 对每条候选做反证复核。按根因和修复动作合并重复,保留所有独立有效问题;不设数量指标,不只留最严重几条。证据不足移入待核实项,不能降为 P3 混入 findings。
|
|
46
|
+
|
|
47
|
+
## 4. 裁定、落盘与交付
|
|
48
|
+
|
|
49
|
+
1. 按报告合同写精确短定位、单段问题说明、P0–P3 和置信度。主定位须与所审 diff 重叠;支持证据可在 diff 之外。规则对结论有实质贡献时,附该规则的文件和最小行范围。
|
|
50
|
+
2. 核对覆盖清单以及版本是否发生变化。相关文件或计划变动时重审受影响结论;不能收敛时保留快照版本与缺口。报告新文件不纳入本轮审查对象。
|
|
51
|
+
3. 完整报告先列确认问题,再列待核实项、覆盖与验证、可选计划符合性、总体结论和修复顺序。默认采用 `patch is correct / patch is incorrect / inconclusive`;最后一项是本 skill 为证据不足增加的状态,不伪称原生 Codex JSON 值。
|
|
52
|
+
4. 写入并回读报告,检查问题、证据、基线、限制和结论完整,链接指向实际文件。空 findings 或无法充分验证也要保存;写入失败如实说明未落盘,聊天交付完整内容,不能宣称完成保存。
|
|
53
|
+
|
|
54
|
+
调用示例(自然语言参数,不要求专用解析器):
|
|
55
|
+
|
|
56
|
+
```text
|
|
57
|
+
使用 $review-code 审查当前未提交变更。
|
|
58
|
+
使用 $review-code 审查未提交的 src/auth.ts 和 tests/auth.test.ts。
|
|
59
|
+
使用 $review-code 审查 commit abc1234,参考 docs/plan/login.md 的 M2。
|
|
60
|
+
使用 $review-code 审查 a1b2c3d..d4e5f6a,报告写到 docs/reviews/login.code-review.md。
|
|
61
|
+
使用 $review-code 审查相对 origin/main 的差异。
|
|
62
|
+
使用 $review-code 审查相对 main 的已提交差异,仅聊天输出。
|
|
63
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# 输入范围与 Git 取证
|
|
2
|
+
|
|
3
|
+
开始时读取 `git rev-parse --show-toplevel`、`git status --short` 和 HEAD;如无 HEAD,单独处理首次提交前的工作树。命令从仓库根执行。下面尖括号是占位符,不可照抄;验证 ref 并解析成 SHA 后再使用。用户路径放在 `--` 后,正确引用空格和特殊字符;脚本收集文件名用 `-z`,不按空格拆分。
|
|
4
|
+
|
|
5
|
+
## 四类输入
|
|
6
|
+
|
|
7
|
+
| 输入 | 基线 → 目标 | 取证方式与边界 |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| uncommitted,或未提交的指定文件 | HEAD → 当前工作树,另核对 index | `git diff --no-ext-diff --no-textconv HEAD --` 看 tracked 净差异;`git diff --cached` 和 `git diff` 区分 staged/unstaged;`git ls-files --others --exclude-standard -z` 枚举并读取 untracked |
|
|
10
|
+
| 单 commit C | C 的第一父提交 → C | 先 `git rev-list --parents -n 1 <C>`;普通提交用 `git diff <C^1> <C> --`。根提交用 `git show --root --format= --no-ext-diff --no-textconv <C> --`;merge commit 默认第一父提交并注明,用户指定其他父提交时从其要求 |
|
|
11
|
+
| commit 范围 A..B | A 的树 → B 的树 | `git diff <A> <B> --` 审查累计净效果,不叠加逐 commit 的中间问题;不混入当前工作树。A 是基线,不包含 A 自身引入的改动 |
|
|
12
|
+
| 相对基准分支 BASE | merge-base(HEAD, BASE) → 当前工作树 | 固定 BASE 和 HEAD 的 SHA,用 `git merge-base --all <HEAD> <BASE>` 确认唯一共同祖先,再 `git diff <merge-base> --`。沿用原生 review 的 tracked 工作树语义,包含 staged/unstaged;不得误写成只审 committed |
|
|
13
|
+
|
|
14
|
+
所有实际 diff/show 命令均加 `--no-ext-diff --no-textconv`,避免仓库自定义 diff 驱动执行。先用 `--name-status -M` 盘点增删改与重命名,再读取 patch 和必要全文。
|
|
15
|
+
|
|
16
|
+
### 未提交与分支模式
|
|
17
|
+
|
|
18
|
+
- staged 和 unstaged 可能相互抵消,即 `git diff HEAD` 为空而 index 非空。仍检查两层;仅存在于 index 的缺陷标注为“只提交 staged 内容时触发”,不能说当前工作树也有该缺陷。若用户只要求 staged,则基线为 HEAD、目标为 index,用 `git show :<path>` 读取完整目标文件。
|
|
19
|
+
- 未初始化 HEAD 时,以空树为基线,读取 staged 新文件、工作树及 untracked;不要因 `git diff HEAD` 失败判定无变更。可用 `git diff --cached` 配合文件清单和全文。
|
|
20
|
+
- 分支模式默认审查 tracked 工作树差异。先声明这一范围;untracked 不在该 diff 中,但应枚举,新增调用依赖它们时作为上下文读取。用户要求把新文件也纳入审查时,明确增加 untracked 范围并记录清单;未纳入的必要新文件形成覆盖限制,不能宣称完整实现已审。
|
|
21
|
+
- 用户明确要求“只审已提交分支变更”时,用 `git diff <merge-base> <HEAD> --`。本地 dirty 内容仅记录,不作为目标代码。用户要求分支 tip 之间直接比较时用两端树差异,明确它不同于共同祖先比较。
|
|
22
|
+
- untracked 按新增文件完整审查;忽略文件不自动纳入,除非用户明确点名。二进制、生成文件或子模块无法深入检查时,记录实际检查的指针/来源与缺口,不静默视为无风险。
|
|
23
|
+
|
|
24
|
+
### 范围、父提交和 ref 异常
|
|
25
|
+
|
|
26
|
+
- `A...B` 明确解释为 `merge-base(A, B) → B`,不等同 `A..B`。用户说“从 A 到 B,包含 A”时,以 `A^1 → B` 为范围;A 为根提交则以空树为基线。自然语言未说明是否包含起点且无法推断时询问。
|
|
27
|
+
- 单 commit 为 merge 时,第一父提交差异是默认审查对象;不要依赖可能隐藏普通变更的 combined diff。冲突解决逻辑按需与其他父提交对照,记录实际审查父提交。
|
|
28
|
+
- ref 验证可用 `git rev-parse --verify --end-of-options '<ref>^{commit}'`。不存在、浅克隆历史不足、无共同祖先或存在多个 merge-base 时,不擅自退回 HEAD~1 或任选基线;说明缺口并澄清/按已有授权补齐历史。
|
|
29
|
+
- unmerged index 要明确记录;可以审查确定部分,但 unresolved conflict 不等于完整可运行快照,不给出无保留正确结论。
|
|
30
|
+
- 用户限定文件时只对限定文件的变更出 findings,读取相关文件证明影响;另发现范围外线索可列覆盖建议,不静默扩大任务。
|
|
31
|
+
|
|
32
|
+
## 固定版本与行号
|
|
33
|
+
|
|
34
|
+
- 记录原始输入和解析后的完整 SHA、实际比较方式、dirty 状态、纳入文件清单;工作树/index/untracked 使用内容 hash 或等价可复查快照,不能只靠 `git status` 判断内容未变。包括影响结论的上下游文件与附带计划。
|
|
35
|
+
- 历史版本的代码、调用方、测试与契约从目标树读取,如 `git show <target>:<path>`、`git grep <pattern> <target> --`;基线证据从 base 读取。执行环境的当前指令仍须遵守,涉及历史仓库约定时标明所用版本。
|
|
36
|
+
- 不为读历史代码而 checkout、reset 或 stash 用户工作树。需要运行目标版本时用隔离临时检出或快照;确保命令在该版本执行,并记录快照路径和 SHA。
|
|
37
|
+
- 默认使用目标侧的短行范围;删除行/删除文件可用基线侧,必须标记 old/base 及 SHA。重命名附旧路径;index 定位明确标 staged。引用历史版本时附 `SHA:path:line`,不要把当前文件链接冒充历史行内容。
|
|
38
|
+
- 结束前比较固定基线与相关内容指纹。外部修改需重审受影响部分;写报告、临时验证产物不得污染本轮输入,也不能因此把用户的新改动一起排除。
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# 问题与报告合同
|
|
2
|
+
|
|
3
|
+
## 落盘与交付
|
|
4
|
+
|
|
5
|
+
- 默认保存完整 Markdown 报告;只有用户明确要求仅聊天/不写文件时跳过,不询问是否保存。
|
|
6
|
+
- 路径优先级:用户指定路径 → 附带的本地计划同目录 `<计划名去扩展名>.code-review.md` → 仓库既有报告目录 → 当前工作区 `docs/reviews/<主题>.code-review.md`。无本地计划时,主题可用 `uncommitted`、`commit-<短SHA>`、`range-<短A>-<短B>` 或 `against-<基准分支短名>`;将分支中的 `/` 等路径字符转换为 `-`,不把 ref 直接作为目录。
|
|
7
|
+
- 写前检查文件已存在与否。仅在用户明确授权更新/覆盖该报告时覆盖;否则另存 `<主题>.code-review.<YYYY-MM-DD>.md`、`<主题>.code-review.<YYYY-MM-DD>-2.md` 等未占用名称。指定路径冲突也遵守此规则,最终说明实际路径。不得把报告写到代码或原计划文件,即使名字碰巧一致。
|
|
8
|
+
- 由当前主 agent 单独写入完整报告,回读实际文件核对内容与定位。空 findings、`inconclusive` 和部分覆盖不免除落盘。不要只写摘要或拼接未经裁定的 reviewer 回报。
|
|
9
|
+
- 最终聊天给实际文件链接、总体结论和重要问题/限制摘要。写入失败时明确“报告未落盘”、原因和目标路径,聊天提供完整报告以保留结果,落盘仍标未完成;不链接不存在的文件。
|
|
10
|
+
|
|
11
|
+
## 问题格式
|
|
12
|
+
|
|
13
|
+
每条一个独立根因,优先级置于简短行动标题前(标题不超过 80 字符);问题正文用一段说明触发条件、实际行为、影响和关键依据。不要在正文堆阅读日志。
|
|
14
|
+
|
|
15
|
+
```markdown
|
|
16
|
+
### F-01 · [P1] <简短、可执行的修复标题>
|
|
17
|
+
|
|
18
|
+
- 定位:<目标路径:短行范围,target/index/base 侧及版本;须与 diff 重叠>
|
|
19
|
+
- 问题:<在具体输入或状态下,改动如何导致故障,影响哪个调用方/契约,为什么是本次引入。单段。>
|
|
20
|
+
- 证据:<上下游代码、需求/计划/仓库规则的精确定位,或复现命令与实际结果>
|
|
21
|
+
- 修复与验证:<最小修复方向;验证该行为的断言/回归场景,不自动实施>
|
|
22
|
+
- 置信度:<高/中及依据;可用 0–1 数值,但不把主观分值伪装成统计测量>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
主定位取最小有意义的 diff 行范围,通常 1–5 行,避免超过 10 行。删除缺陷定位到基线侧删除行并标 SHA;缺失行为定位到应负责它的改动入口/调用点,不凭空造一个不存在文件的行号。完整需求遗漏确实没有 diff 锚点时,放计划符合性缺口,说明影响,可影响结论,但不伪装成行内 finding。
|
|
26
|
+
|
|
27
|
+
本地当前文件用可点击路径;历史版本另标 `SHA:path:line`,需要可点击证据时链接实际存在的版本快照文件。支持证据可在 diff 外。基于仓库规则的结论须引用实际读过且适用的规则最小行范围;不能只写“违反最佳实践”。
|
|
28
|
+
|
|
29
|
+
不强制给代码片段。确有助益时最多三行;`suggestion` 块仅含可直接替换的最小代码,保留原缩进,不在块内解释。自然语言足以说明修复时不生成 patch。
|
|
30
|
+
|
|
31
|
+
## 严重度与置信度
|
|
32
|
+
|
|
33
|
+
| 等级 | 含义 |
|
|
34
|
+
| --- | --- |
|
|
35
|
+
| P0 | 必须立即停止其他工作处理的普遍性严重故障,阻断发布/运行/主要使用,无须额外输入假设;极少使用 |
|
|
36
|
+
| P1 | 紧急,应在下一修复周期处理的高影响缺陷;写明受影响条件与范围 |
|
|
37
|
+
| P2 | 应修复的一般缺陷,有明确局部功能、兼容性、性能或维护后果 |
|
|
38
|
+
| P3 | 有证据、值得修复但优先级低的小问题;纯风格和个人偏好不报 |
|
|
39
|
+
|
|
40
|
+
严重度描述后果,置信度描述证据。只有猜测的风险属于待核实项,不以 P3 收纳。不要把所有安全字样都升为 P0,也不把未运行测试自动降格成已证实失败。
|
|
41
|
+
|
|
42
|
+
## 完整报告顺序
|
|
43
|
+
|
|
44
|
+
1. **确认问题**:按 P0 → P3 排序,F-01 等稳定编号。没有时写“未发现可确认的问题”,不凑数;复审沿用编号并区分已解决、仍存在、新增。
|
|
45
|
+
2. **待核实/待决策项**:缺少什么证据、影响哪个结论、如何补证;无法访问的文件/环境、需求歧义、尚未运行的关键验证放这里。
|
|
46
|
+
3. **覆盖与验证**:一句话意图;仓库根与日期;原输入、解析 SHA、比较方式、工作树/index 指纹或快照、文件限制、纳入/排除项;已审行为链与未覆盖部分;实际命令、目标版本、结果、失败原因。区分静态、测试、浏览器与外部资料证据;注明实际 reviewer 分工(若有)。
|
|
47
|
+
4. **计划符合性(有计划才写)**:计划路径和版本、本次任务/里程碑;仅列相关需求的映射和缺口,包含未核实及后续范围。不要复制整份计划或更新其进度。
|
|
48
|
+
5. **总体结论与修复顺序**:结论、1–3 句理由与覆盖限制;优先解除契约/数据/安全根因,再修局部行为,最后验证相关回归。明确解除阻塞的可观察条件,不把评审结论当作 merge/deploy 授权。
|
|
49
|
+
|
|
50
|
+
### 正确性结论
|
|
51
|
+
|
|
52
|
+
- `patch is incorrect`:有已证实影响正确性或形成实质阻塞的缺陷/本期需求缺口,引用对应编号或计划缺口。其余覆盖不足仍须说明。
|
|
53
|
+
- `patch is correct`:在明确审查范围内未发现上述缺陷,证据足以支撑判断;非阻塞的小问题不自动否定正确性。表述为评审判断,不保证不存在未知 bug。
|
|
54
|
+
- `inconclusive`:尚无足够证据裁定,或没有实际可审变更,例如基线不明确、关键调用方无法读取、冲突未解或关键验收无法核实。说明缺口,不把它写成代码已证实有错。
|
|
55
|
+
|
|
56
|
+
空 findings 不自动等于正确;未运行全量测试也不自动等于不可裁定,依据关键行为的实际证据判断。报告落盘成功与代码是否正确是两个不同结论。
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# 审查视角与取舍
|
|
2
|
+
|
|
3
|
+
这些是调查线索,不是自动判错规则。每项仍须通过主流程的引入性、影响和证据门槛。
|
|
4
|
+
|
|
5
|
+
| 视角 | 需要追踪的行为与证据 |
|
|
6
|
+
| --- | --- |
|
|
7
|
+
| 需求符合性 | 用户请求/计划中的本期验收 → 入口 → 实现 → 可观察结果;遗漏、误解和越界是否产生实际契约或范围后果。需求歧义列待决策,不用“常见做法”替作者决定 |
|
|
8
|
+
| 正确性与兼容性 | 调用链和状态转换、边界与错误路径、重试/幂等/并发、事务与资源释放;API/类型/序列化/配置默认值变动对现有消费者的具体影响 |
|
|
9
|
+
| 安全与数据 | 不可信输入是否可达危险操作、身份与对象级授权/租户隔离、敏感数据流、注入、路径与请求边界;数据迁移、约束、失败回滚和读写兼容性。报告敏感证据时隐藏实际密钥 |
|
|
10
|
+
| 性能与资源 | 真实规模下的查询次数、无界读取/队列/循环、阻塞、缓存一致性、订阅或连接泄漏;复杂度与实测分开,不强制缓存/批处理,不虚构毫秒或容量 |
|
|
11
|
+
| 测试与交付 | 测试断言是否能捕获改变的行为,mock 是否掩盖协议/权限/事务,回归用例能否在基线失败而目标通过;构建、入口接线、配置、依赖和部署产物是否一致 |
|
|
12
|
+
|
|
13
|
+
## 可选开发计划
|
|
14
|
+
|
|
15
|
+
只核对所审变更承担的任务与验收。最小映射为 `需求/章节 → 本次任务 → 实现证据 → 验证状态`,状态区分已核实、存在缺陷、未核实、后续范围。不要求计划必须采用某个模板或有正式 ID。
|
|
16
|
+
|
|
17
|
+
计划符合性发现问题后仍继续安全与正确性审查,不用“先修计划偏差”跳过其他风险。用户明确改变需求时以当前用户要求为准,列出与旧计划的差异;不自动改计划,也不把服从新要求视为缺陷。没有被本次变更触及/承诺的旧功能缺失不属于新增问题。
|
|
18
|
+
|
|
19
|
+
无测试本身不自动成为 finding。说明本次改变的哪个重要行为无法被现有测试保护,以及具体失败风险;若缺陷已在 findings 中,测试建议归入同条,避免重复计算。仅凭测试覆盖率数字不能宣布质量达标。
|
|
20
|
+
|
|
21
|
+
有 UI 时按变更检查主要路径、加载/空/错误状态、键盘操作和可访问性。静态推演、实际浏览器走查、自动化结果分开记录;没有运行页面不声称视觉或交互验证通过。
|
|
22
|
+
|
|
23
|
+
## 来源与有意取舍
|
|
24
|
+
|
|
25
|
+
以下是本 skill 的设计来源,运行评审时无需加载来源文件:
|
|
26
|
+
|
|
27
|
+
- **Codex CLI 0.159.3**(2026-10-02 本机 `codex --version`、`codex review --help` 及二进制内嵌 review prompt):沿用新增且可行动的缺陷门槛、具体受影响代码证据、允许空 findings、P0–P3、短 diff 定位、适用仓库规则引用、单段说明和不自动修复。官方 [CLI 文档的 review 说明](https://learn.chatgpt.com/docs/codex/cli) 也列出未提交、commit、基准分支三类入口。
|
|
28
|
+
- **`local/code-review`** 的 `SKILL.md`、`references/requesting-code-review.md`、`references/verification-before-completion.md`:吸收明确评审范围、证据先于结论、反馈先核实;不引入每个实现任务都必须再派 reviewer、固定包管理器或自动修复的流程。
|
|
29
|
+
- **`local/code-reviewer/SKILL.md`**:吸收快速筛查逻辑、导入导出、安全和性能线索;不采用每次保存触发、固定函数行数阈值、模式匹配即报错或未经实测的速度承诺。
|
|
30
|
+
- **`local/code-reviewer2/SKILL.md`** 与 `references/spec-compliance-review.md`、`references/review-checklist.md`、`references/report-template.md`:吸收先理解意图、需求映射、多维审查和可行动反馈;不强制赞美、建议代码或因需求未通过而停止其他审查。
|
|
31
|
+
- **`skills/review-dev-plan/references/report-contract.md`**:沿用完整报告默认落盘、路径优先级、防覆盖、单写者、回读和失败披露。代码报告用 `.code-review.md` 区分计划报告的 `.review.md`;不继承计划的就绪状态或固定四 reviewer 编排。
|
|
32
|
+
|
|
33
|
+
commit 范围、可选计划映射和 `inconclusive` 是本 skill 的扩展。默认 Markdown 是有意选择,并不宣称与 Codex 原生 review JSON schema 完全相同。以上内容是综合后的工作约定,不复制社区技能的整套协议。
|