skilldrop-cli 0.16.29 → 0.16.31
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/bin/skilldrop.js +160 -33
- package/catalogue.json +10 -4
- package/model-routing.json +24 -0
- package/package.json +1 -1
- package/packs/ai-engineering/skills/mcp-pairing/SKILL.md +93 -0
- package/packs/ai-engineering/skills/mcp-pairing/evals/eval_queries.json +13 -0
- package/packs/ai-engineering/skills/mcp-pairing/evals/evals.json +76 -0
- package/packs/ai-engineering/skills/mcp-pairing/evals/files/2/mcp.json +32 -0
- package/packs/ai-engineering/skills/mcp-pairing/evals/files/4/.mcp.json +47 -0
- package/packs/ai-engineering/skills/mcp-pairing/evals/files/4/docs/pr-loop.md +12 -0
- package/packs/ai-engineering/skills/mcp-pairing/evals/files/5/docs/oncall-triage.md +18 -0
- package/packs/ai-engineering/skills/mcp-pairing/examples/build-loop-github-jira-datadog.md +69 -0
- package/packs/ai-engineering/skills/mcp-pairing/manifest.json +17 -0
- package/packs/ai-engineering/skills/mcp-pairing/reference.md +136 -0
- package/packs/ai-engineering/skills/mcp-pairing/templates/mcp-pairing.md +43 -0
- package/packs/dev-team/loops/build/LOOP.md +4 -2
- package/packs/dev-team/loops/build/loop.json +2 -2
- package/packs/dev-team/loops/release/LOOP.md +7 -5
- package/packs/dev-team/loops/release/loop.json +2 -2
- package/packs/dev-team/skills/codebase-tour/SKILL.md +115 -0
- package/packs/dev-team/skills/codebase-tour/evals/eval_queries.json +13 -0
- package/packs/dev-team/skills/codebase-tour/evals/evals.json +77 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/.github/workflows/ci.yml +23 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/README.md +23 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/openapi.yaml +21 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/package-lock.json +7 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/package.json +29 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/src/config.ts +20 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/src/domain/shipments/filter.ts +24 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/src/domain/shipments/repository.ts +15 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/src/errors.ts +9 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/src/generated/api-types.ts +9 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/src/http/handlers/shipments.ts +38 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/src/http/routes.ts +7 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/src/jobs/export-shipments.ts +22 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/src/server.ts +18 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/tests/domain/filter.test.ts +16 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/tests/http/shipments.test.ts +18 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/tsconfig.json +10 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/1/vitest.config.ts +5 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/.github/workflows/ci.yml +16 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/README.md +16 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/noxfile.py +14 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/pyproject.toml +22 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/__init__.py +3 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/_version.py +4 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/cli.py +32 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/detect.py +15 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/errors.py +2 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/money.py +14 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/parsers/__init__.py +8 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/parsers/acme.py +18 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/parsers/base.py +24 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/src/ledgerline/parsers/harbor.py +13 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/tests/fixtures/acme_sample.csv +3 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/tests/test_acme.py +23 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/2/tests/test_detect.py +13 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/.github/workflows/ci.yml +28 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/Makefile +16 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/README.md +16 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/cmd/tidepool/main.go +24 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/go.mod +5 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/config/config.go +38 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/dispatch/dispatcher.go +52 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/dispatch/dispatcher_test.go +42 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/dispatch/sender.go +32 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/replay/replay.go +31 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/store/db.go +35 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/store/query.sql +11 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/store/query.sql.go +30 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/store/schema.sql +6 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/internal/store/store_integration_test.go +21 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/3/sqlc.yaml +9 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/.env.example +4 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/.github/workflows/ci.yml +16 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/Makefile +16 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/README.md +23 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/data/rates.csv +4 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/pyproject.toml +19 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/scripts/gen_rates.py +29 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/__init__.py +0 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/api/__init__.py +0 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/api/preview.py +14 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/api/routes.py +36 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/config.py +15 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/discounts.py +8 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/generated/__init__.py +0 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/generated/rates_table.py +8 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/main.py +8 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/shipping.py +18 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/src/shipcalc/tax.py +7 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/tests/conftest.py +3 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/tests/unit/test_discounts.py +11 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/4/tests/unit/test_tax.py +13 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/.env.example +3 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/.github/workflows/ci.yml +13 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/README.md +18 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/package.json +13 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/openapi.json +30 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/package.json +15 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/src/db.js +19 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/src/flags.js +8 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/src/generated/schema.js +32 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/src/middleware/validate.js +20 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/src/routes/bookings.js +15 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/src/server.js +15 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/src/services/bookings.js +23 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/src/services/pricing.js +9 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/api/test/pricing.test.js +15 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/web/package.json +9 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/web/src/bookingForm.js +11 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/web/src/format.js +7 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/packages/web/test/format.test.js +12 -0
- package/packs/dev-team/skills/codebase-tour/evals/files/5/scripts/gen-schema.mjs +27 -0
- package/packs/dev-team/skills/codebase-tour/examples/refund-window.md +158 -0
- package/packs/dev-team/skills/codebase-tour/manifest.json +47 -0
- package/packs/dev-team/skills/codebase-tour/scripts/repo_facts.py +403 -0
- package/packs/dev-team/skills/codebase-tour/templates/codebase-tour.md +85 -0
- package/packs/dev-team/skills/dependency-upgrade-review/SKILL.md +101 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/eval_queries.json +11 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/evals.json +77 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/1/.github/workflows/ci.yml +20 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/1/pr.diff +87 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/1/quillmark-CHANGELOG.md +24 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/1/src/render/comment.js +6 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/1/src/render/note.js +8 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/1/test/note.test.js +12 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/2/.github/workflows/ci.yml +23 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/2/.github/workflows/release.yml +23 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/2/pr.diff +32 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/2/release-notes.md +20 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/4/.github/workflows/ci.yml +18 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/4/Dockerfile +8 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/4/PR.md +36 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/4/pr.diff +47 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/4/src/ingest/client.py +24 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/4/src/ingest/reader.py +32 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/4/tests/test_reader.py +15 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/4/upstream/quillstream-CHANGELOG.md +37 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/.github/workflows/ci.yml +22 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/.github/workflows/release.yml +25 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/.nvmrc +1 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/PR-412.md +16 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/PR-413.md +15 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/package.json +21 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/pr-412.diff +26 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/pr-413.diff +84 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/scripts/release.mjs +18 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/upstream/release-notary-CHANGELOG.md +16 -0
- package/packs/dev-team/skills/dependency-upgrade-review/evals/files/5/upstream/setup-toolchain-RELEASES.md +22 -0
- package/packs/dev-team/skills/dependency-upgrade-review/examples/inputs/ledgerline.diff +38 -0
- package/packs/dev-team/skills/dependency-upgrade-review/examples/ledgerline-tidyparse.md +91 -0
- package/packs/dev-team/skills/dependency-upgrade-review/manifest.json +50 -0
- package/packs/dev-team/skills/dependency-upgrade-review/reference.md +99 -0
- package/packs/dev-team/skills/dependency-upgrade-review/scripts/upgrade_diff.py +718 -0
- package/packs/dev-team/skills/refactor-plan/SKILL.md +168 -0
- package/packs/dev-team/skills/refactor-plan/evals/eval_queries.json +46 -0
- package/packs/dev-team/skills/refactor-plan/evals/evals.json +106 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/1/debt-register-row.md +5 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/1/in-flight-prs.md +7 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/1/order_service.py +74 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/1/test-coverage.txt +14 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/3/imports.txt +22 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/3/register.md +3 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/4/docs/open-prs.md +6 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/4/docs/tech-debt-register.md +7 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/4/reports/monthly_revenue.py +44 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/4/src/billing/invoice.py +233 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/4/src/partners/statement.py +29 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/4/tests/billing/test_payments.py +13 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/5/ci-notes.md +5 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/5/open-prs.txt +4 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/5/scripts/nightly-digest.js +36 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/5/src/auth/passwordReset.ts +16 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/5/src/notify/index.ts +2 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/5/src/notify/legacyMailer.ts +149 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/5/src/orders/onOrderShipped.ts +15 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/5/tests/notify/legacyMailer.test.ts +7 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/6/billing-service/src/main/kotlin/billing/DunningJob.kt +29 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/6/billing-service/src/main/kotlin/billing/InvoiceService.kt +157 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/6/billing-service/src/main/kotlin/billing/pdf/InvoicePdfRenderer.kt +36 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/6/billing-service/src/test/kotlin/billing/InvoiceServiceTest.kt +40 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/6/docs/adr-007-persistence.md +26 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/6/docs/open-prs.md +9 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/7/notes/open-work.md +19 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/7/web/src/components/CheckoutPanel.tsx +207 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/7/web/src/components/MiniCart.tsx +33 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/7/web/src/components/__tests__/CheckoutPanel.test.tsx +13 -0
- package/packs/dev-team/skills/refactor-plan/evals/files/7/web/src/pages/OrderReview.tsx +24 -0
- package/packs/dev-team/skills/refactor-plan/examples/search-ranker.md +104 -0
- package/packs/dev-team/skills/refactor-plan/manifest.json +36 -0
- package/packs/dev-team/skills/refactor-plan/reference.md +149 -0
- package/packs/dev-team/skills/refactor-plan/templates/refactor-plan.md +82 -0
- package/packs/dev-team/skills/rollout-plan/SKILL.md +157 -0
- package/packs/dev-team/skills/rollout-plan/evals/eval_queries.json +12 -0
- package/packs/dev-team/skills/rollout-plan/evals/evals.json +109 -0
- package/packs/dev-team/skills/rollout-plan/evals/files/2/metrics-snapshot.txt +11 -0
- package/packs/dev-team/skills/rollout-plan/evals/files/2/pr-description.md +28 -0
- package/packs/dev-team/skills/rollout-plan/evals/files/4/PR_DESCRIPTION.md +24 -0
- package/packs/dev-team/skills/rollout-plan/evals/files/4/metrics_snapshot.txt +7 -0
- package/packs/dev-team/skills/rollout-plan/evals/files/5/docs/tax-engine-v2.md +24 -0
- package/packs/dev-team/skills/rollout-plan/evals/files/6/flags/smart_reminders_v2.yaml +14 -0
- package/packs/dev-team/skills/rollout-plan/evals/files/6/notes/push-pipeline.md +10 -0
- package/packs/dev-team/skills/rollout-plan/evals/files/7/docs/ratelimiter-v2.md +21 -0
- package/packs/dev-team/skills/rollout-plan/evals/files/7/ops/traffic-summary.txt +9 -0
- package/packs/dev-team/skills/rollout-plan/examples/sync-engine-workspaces.md +102 -0
- package/packs/dev-team/skills/rollout-plan/manifest.json +35 -0
- package/packs/dev-team/skills/rollout-plan/reference.md +100 -0
- package/packs/dev-team/skills/rollout-plan/scripts/canary_math.py +261 -0
- package/packs/dev-team/skills/rollout-plan/templates/rollout-plan.md +50 -0
- package/packs/product-manager/loops/discover/LOOP.md +5 -4
- package/packs/product-manager/loops/discover/loop.json +2 -2
- package/packs/product-manager/skills/feedback-synthesis/SKILL.md +182 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/eval_queries.json +46 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/evals.json +76 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/files/1/interview-notes.md +47 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/files/1/nps-verbatims.csv +13 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/files/1/support-tickets.csv +36 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/files/3/churn-exit-survey.csv +11 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/files/3/sales-call-notes.md +55 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/files/4/csat_comments_q3.csv +17 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/files/4/support_tickets_q3.csv +49 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/files/5/app_reviews_last_60_days.csv +32 -0
- package/packs/product-manager/skills/feedback-synthesis/evals/files/5/interview_notes_round1.md +48 -0
- package/packs/product-manager/skills/feedback-synthesis/examples/booking-app-feedback.md +139 -0
- package/packs/product-manager/skills/feedback-synthesis/examples/inputs/booking-app-coded.csv +17 -0
- package/packs/product-manager/skills/feedback-synthesis/manifest.json +53 -0
- package/packs/product-manager/skills/feedback-synthesis/reference.md +89 -0
- package/packs/product-manager/skills/feedback-synthesis/scripts/theme_counts.py +355 -0
- package/packs/product-manager/skills/feedback-synthesis/templates/coding-sheet.csv +6 -0
- package/packs/product-manager/skills/feedback-synthesis/templates/synthesis.md +42 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# PR #413: Bump release-notary from 1.8.2 to 1.9.0
|
|
2
|
+
|
|
3
|
+
**Author:** dependabot[bot]
|
|
4
|
+
**Base:** main **Head:** dependabot/npm_and_yarn/release-notary-1.9.0
|
|
5
|
+
**Labels:** dependencies, javascript
|
|
6
|
+
**Checks:** ✅ ci / test (pull_request) — passed
|
|
7
|
+
|
|
8
|
+
Bumps [release-notary](https://github.com/notary-tools/release-notary) from 1.8.2 to 1.9.0.
|
|
9
|
+
|
|
10
|
+
Changelog: see `upstream/release-notary-CHANGELOG.md`.
|
|
11
|
+
|
|
12
|
+
[](#) — compatibility score unknown (too few updates).
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@harrowfield/ledger-ui",
|
|
3
|
+
"version": "5.12.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"lint": "eslint-mini src",
|
|
8
|
+
"test": "vitest-lite run",
|
|
9
|
+
"build": "rollup-lite -c",
|
|
10
|
+
"release": "node scripts/release.mjs"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"tally-format": "^2.3.0"
|
|
14
|
+
},
|
|
15
|
+
"devDependencies": {
|
|
16
|
+
"eslint-mini": "^9.1.0",
|
|
17
|
+
"release-notary": "^1.8.2",
|
|
18
|
+
"rollup-lite": "^4.0.3",
|
|
19
|
+
"vitest-lite": "^2.0.0"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
|
|
2
|
+
index 3c1d0a2..5e7b9f4 100644
|
|
3
|
+
--- a/.github/workflows/ci.yml
|
|
4
|
+
+++ b/.github/workflows/ci.yml
|
|
5
|
+
@@ -13,7 +13,7 @@ jobs:
|
|
6
|
+
runs-on: ubuntu-latest
|
|
7
|
+
steps:
|
|
8
|
+
- uses: actions/checkout@9ce6fd9fa4b164bf8911b62115bf9104ba1a2803 # v4.2.0
|
|
9
|
+
- - uses: bramblewick/setup-toolchain@c8aee2ae521bdb1ef1b97761673ebbe92c953b0f # v3.2.0
|
|
10
|
+
+ - uses: bramblewick/setup-toolchain@8141d107d0837efc25f86e096a7eefd58e979515 # v3.3.0
|
|
11
|
+
with:
|
|
12
|
+
node-version-file: .nvmrc
|
|
13
|
+
- run: npm ci --ignore-scripts
|
|
14
|
+
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
|
|
15
|
+
index 0a4e8c1..b19d2e7 100644
|
|
16
|
+
--- a/.github/workflows/release.yml
|
|
17
|
+
+++ b/.github/workflows/release.yml
|
|
18
|
+
@@ -15,7 +15,7 @@ jobs:
|
|
19
|
+
environment: production
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@9ce6fd9fa4b164bf8911b62115bf9104ba1a2803 # v4.2.0
|
|
22
|
+
- - uses: bramblewick/setup-toolchain@c8aee2ae521bdb1ef1b97761673ebbe92c953b0f # v3.2.0
|
|
23
|
+
+ - uses: bramblewick/setup-toolchain@7dd0aa52537f8f4f4002b505507186cdaec669c4 # v3.3.0
|
|
24
|
+
with:
|
|
25
|
+
node-version-file: .nvmrc
|
|
26
|
+
- run: npm ci
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
diff --git a/package.json b/package.json
|
|
2
|
+
index 61b0e2a..e3f7c19 100644
|
|
3
|
+
--- a/package.json
|
|
4
|
+
+++ b/package.json
|
|
5
|
+
@@ -14,7 +14,7 @@
|
|
6
|
+
},
|
|
7
|
+
"devDependencies": {
|
|
8
|
+
"eslint-mini": "^9.1.0",
|
|
9
|
+
- "release-notary": "^1.8.2",
|
|
10
|
+
+ "release-notary": "^1.9.0",
|
|
11
|
+
"rollup-lite": "^4.0.3",
|
|
12
|
+
"vitest-lite": "^2.0.0"
|
|
13
|
+
}
|
|
14
|
+
diff --git a/package-lock.json b/package-lock.json
|
|
15
|
+
index 9f2d4b7..1ac80e5 100644
|
|
16
|
+
--- a/package-lock.json
|
|
17
|
+
+++ b/package-lock.json
|
|
18
|
+
@@ -12,7 +12,7 @@
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"eslint-mini": "^9.1.0",
|
|
21
|
+
- "release-notary": "^1.8.2",
|
|
22
|
+
+ "release-notary": "^1.9.0",
|
|
23
|
+
"rollup-lite": "^4.0.3",
|
|
24
|
+
"vitest-lite": "^2.0.0"
|
|
25
|
+
}
|
|
26
|
+
@@ -88,16 +88,6 @@
|
|
27
|
+
- "node_modules/ansi-tint": {
|
|
28
|
+
- "version": "1.0.4",
|
|
29
|
+
- "resolved": "https://registry.npmjs.org/ansi-tint/-/ansi-tint-1.0.4.tgz",
|
|
30
|
+
- "integrity": "sha512-G/ihecLGe8wYlmaKXMJUFfgBUV/HgkesmrXhTTxBqhQrYzGlVOniQfCu4MlJAUfeyjvVf+TYrCCSemjHEdDQjA==",
|
|
31
|
+
- "dev": true,
|
|
32
|
+
- "license": "MIT",
|
|
33
|
+
- "engines": {
|
|
34
|
+
- "node": ">=14"
|
|
35
|
+
- }
|
|
36
|
+
- },
|
|
37
|
+
@@ -402,30 +392,45 @@
|
|
38
|
+
+ "node_modules/notary-telemetry": {
|
|
39
|
+
+ "version": "0.2.1",
|
|
40
|
+
+ "resolved": "https://npm.notary-cdn.io/notary-telemetry/-/notary-telemetry-0.2.1.tgz",
|
|
41
|
+
+ "integrity": "sha512-kJAfi+YYicLisVOtWlYrspxPF4uz6y3b6QfD9GN44+ykAjLtZFIBMPzpRjsixIrGncIVsO5cZPGTL3edJLEDag==",
|
|
42
|
+
+ "dev": true,
|
|
43
|
+
+ "hasInstallScript": true,
|
|
44
|
+
+ "license": "SEE LICENSE IN LICENSE.txt",
|
|
45
|
+
+ "dependencies": {
|
|
46
|
+
+ "semver-lite": "^2.3.0"
|
|
47
|
+
+ }
|
|
48
|
+
+ },
|
|
49
|
+
"node_modules/release-notary": {
|
|
50
|
+
- "version": "1.8.2",
|
|
51
|
+
- "resolved": "https://registry.npmjs.org/release-notary/-/release-notary-1.8.2.tgz",
|
|
52
|
+
- "integrity": "sha512-fS99/rtXzwQTzMu2D7jDqVze+VZpAS8ftGR6+1J6GeJ4JMhkxkVVRhHLpzVp6hV0ijP3EophissfTP0Hmkwt1w==",
|
|
53
|
+
+ "version": "1.9.0",
|
|
54
|
+
+ "resolved": "https://registry.npmjs.org/release-notary/-/release-notary-1.9.0.tgz",
|
|
55
|
+
+ "integrity": "sha512-tQijziAJ067sx63E+cIXmDsbRdzLEMQHqy0fgw7fIyhUwgdc5a8fuiPWzqjJYAobtCht6aI/joOp+Up2ehJRJw==",
|
|
56
|
+
"dev": true,
|
|
57
|
+
"license": "MIT",
|
|
58
|
+
"dependencies": {
|
|
59
|
+
- "ansi-tint": "^1.0.4",
|
|
60
|
+
- "semver-lite": "^2.1.0"
|
|
61
|
+
+ "notary-telemetry": "^0.2.0",
|
|
62
|
+
+ "semver-lite": "^2.3.0"
|
|
63
|
+
},
|
|
64
|
+
"bin": {
|
|
65
|
+
"release-notary": "bin/cli.js"
|
|
66
|
+
},
|
|
67
|
+
"engines": {
|
|
68
|
+
- "node": ">=18"
|
|
69
|
+
+ "node": ">=20"
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"node_modules/semver-lite": {
|
|
73
|
+
- "version": "2.1.0",
|
|
74
|
+
- "resolved": "https://registry.npmjs.org/semver-lite/-/semver-lite-2.1.0.tgz",
|
|
75
|
+
- "integrity": "sha512-OvGVOs6Tl8EYX9VxOQgB0MNBqP8uY+ct5KATLIi3BGLPF+9vAb31PrWFxtbLBcjZh4H9oT1HyzGrx+ItXrSJNw==",
|
|
76
|
+
+ "version": "2.3.0",
|
|
77
|
+
+ "resolved": "https://registry.npmjs.org/semver-lite/-/semver-lite-2.3.0.tgz",
|
|
78
|
+
+ "integrity": "sha512-nqjU6Z/9qqziJrOHoLWWbE+gjkE23/xqf9pqZOkyicwfti0SgB9uhlk/QMZGMbmYzsnc3cKwq6VD/3JmK2JnHA==",
|
|
79
|
+
"dev": true,
|
|
80
|
+
"license": "ISC",
|
|
81
|
+
"engines": {
|
|
82
|
+
"node": ">=16"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Publishes the built bundle and a signed provenance manifest.
|
|
2
|
+
// Run only from .github/workflows/release.yml on a version tag.
|
|
3
|
+
import { createNotary } from "release-notary";
|
|
4
|
+
import pkg from "../package.json" with { type: "json" };
|
|
5
|
+
|
|
6
|
+
const notary = createNotary({
|
|
7
|
+
// legacyMode keeps the v1 manifest layout that the downstream
|
|
8
|
+
// ledger-portal deploy script still parses.
|
|
9
|
+
legacyMode: true,
|
|
10
|
+
signingKey: process.env.RELEASE_SIGNING_KEY,
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
await notary.publish({
|
|
14
|
+
name: pkg.name,
|
|
15
|
+
version: pkg.version,
|
|
16
|
+
dir: "dist",
|
|
17
|
+
sign: true,
|
|
18
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# release-notary changelog
|
|
2
|
+
|
|
3
|
+
## 1.9.0 — 2026-10-02
|
|
4
|
+
|
|
5
|
+
- **Removed** the `legacyMode` option of `createNotary()`, deprecated since 1.6.0. Passing it now throws `TypeError: Unknown option "legacyMode"`. Manifests are always written in the v2 layout (`manifest.files[]` replaces the top-level `artifacts` map).
|
|
6
|
+
- Added opt-out usage reporting through the new `notary-telemetry` dependency. It runs at install time to detect the CI provider and sends an anonymous ping when `publish()` runs. Disable with `NOTARY_TELEMETRY=0`.
|
|
7
|
+
- Requires Node.js 20 or newer.
|
|
8
|
+
- Dropped `ansi-tint`; output colouring uses `util.styleText`.
|
|
9
|
+
|
|
10
|
+
## 1.8.3 — 2026-08-20
|
|
11
|
+
|
|
12
|
+
- Fixed: `publish({ sign: true })` silently skipped signing when `signingKey` was an empty string. It now throws `Error: signingKey is empty`.
|
|
13
|
+
|
|
14
|
+
## 1.8.2 — 2026-07-01
|
|
15
|
+
|
|
16
|
+
- Fixed Windows path separators in manifest entries.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# bramblewick/setup-toolchain releases
|
|
2
|
+
|
|
3
|
+
## v3.3.0 (2026-10-06)
|
|
4
|
+
|
|
5
|
+
### Breaking-ish
|
|
6
|
+
- The action now runs on the `node24` runtime (was `node20`). GitHub-hosted runners already support it. **Self-hosted runners must be on actions/runner v2.328.0 or newer**, otherwise the job fails with `Parameter 'using: node24' is not supported`.
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
- `cache` now defaults to `true` (was `false`). The npm cache is keyed on the lockfile hash and restored automatically. Set `cache: false` to keep the old behaviour.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- `node-version-file` accepts `package.json#engines.node`.
|
|
13
|
+
|
|
14
|
+
## v3.2.1 (2026-09-12)
|
|
15
|
+
|
|
16
|
+
### Security
|
|
17
|
+
- Fixed a cache-key collision (GHSA-xxxx-fict-0001) in which a workflow run triggered by a pull request from a fork could write a cache entry that a later run on the default branch restored. Only affected users who set `cache: true`.
|
|
18
|
+
|
|
19
|
+
## v3.2.0 (2026-07-30)
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
- Support for `.tool-versions`.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
diff --git a/poetry.lock b/poetry.lock
|
|
2
|
+
index f6ddbc1..3b139f9 100644
|
|
3
|
+
--- a/poetry.lock
|
|
4
|
+
+++ b/poetry.lock
|
|
5
|
+
@@ -2,7 +2,7 @@
|
|
6
|
+
|
|
7
|
+
[[package]]
|
|
8
|
+
name = "charset-sniff"
|
|
9
|
+
-version = "1.4.0"
|
|
10
|
+
+version = "1.4.1"
|
|
11
|
+
description = "Guess the text encoding of a byte string"
|
|
12
|
+
optional = false
|
|
13
|
+
python-versions = ">=3.9"
|
|
14
|
+
@@ -10,7 +10,7 @@ files = []
|
|
15
|
+
|
|
16
|
+
[[package]]
|
|
17
|
+
name = "tidyparse"
|
|
18
|
+
-version = "2.2.0"
|
|
19
|
+
+version = "2.2.2"
|
|
20
|
+
description = "Forgiving CSV and TSV parser"
|
|
21
|
+
optional = false
|
|
22
|
+
python-versions = ">=3.9"
|
|
23
|
+
@@ -22,4 +22,4 @@ charset-sniff = ">=1.4,<2"
|
|
24
|
+
[metadata]
|
|
25
|
+
lock-version = "2.0"
|
|
26
|
+
python-versions = "^3.11"
|
|
27
|
+
-content-hash = "0000000000000000000000000000000000000000000000000000000000000001"
|
|
28
|
+
+content-hash = "0000000000000000000000000000000000000000000000000000000000000002"
|
|
29
|
+
diff --git a/pyproject.toml b/pyproject.toml
|
|
30
|
+
index 12e2f0a..9848a83 100644
|
|
31
|
+
--- a/pyproject.toml
|
|
32
|
+
+++ b/pyproject.toml
|
|
33
|
+
@@ -6,4 +6,4 @@ authors = ["Ledgerline maintainers"]
|
|
34
|
+
|
|
35
|
+
[tool.poetry.dependencies]
|
|
36
|
+
python = "^3.11"
|
|
37
|
+
-tidyparse = "^2.2.0"
|
|
38
|
+
+tidyparse = "^2.2.2"
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Worked example: Ledgerline, a Poetry patch bump that earns MERGE
|
|
2
|
+
|
|
3
|
+
Most worked examples end in a block. This one shows what it takes to close every check, so MERGE is earned rather than assumed.
|
|
4
|
+
|
|
5
|
+
## Input
|
|
6
|
+
|
|
7
|
+
The user says: *"Can I merge PR #57 on ledgerline, 'chore(deps): bump tidyparse to 2.2.2'? CI is green."* and supplies:
|
|
8
|
+
|
|
9
|
+
- the diff, [`inputs/ledgerline.diff`](inputs/ledgerline.diff) (`pyproject.toml` and `poetry.lock`)
|
|
10
|
+
- tidyparse's changelog for 2.2.1 and 2.2.2
|
|
11
|
+
- the repo: `app/ingest.py`, `tests/test_ingest.py`, `.github/workflows/ci.yml`
|
|
12
|
+
|
|
13
|
+
Changelog excerpt as supplied:
|
|
14
|
+
|
|
15
|
+
```markdown
|
|
16
|
+
## 2.2.2
|
|
17
|
+
- Security: a single line longer than 10 MB is now rejected with RowTooLongError
|
|
18
|
+
(a subclass of ParseError) instead of being read into memory.
|
|
19
|
+
|
|
20
|
+
## 2.2.1
|
|
21
|
+
- Fixed: a quoted field containing a newline was split into two rows.
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Repo excerpts as supplied:
|
|
25
|
+
|
|
26
|
+
```python
|
|
27
|
+
# app/ingest.py
|
|
28
|
+
12 def import_statement(path):
|
|
29
|
+
13 try:
|
|
30
|
+
14 rows = tidyparse.parse_rows(path, dialect="excel")
|
|
31
|
+
15 except tidyparse.ParseError as exc:
|
|
32
|
+
16 raise StatementRejected(str(exc)) from exc
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```python
|
|
36
|
+
# tests/test_ingest.py
|
|
37
|
+
3 from app.ingest import import_statement
|
|
38
|
+
9 def test_quoted_newline_stays_one_row(tmp_path): ...
|
|
39
|
+
17 def test_malformed_file_is_rejected(tmp_path): ...
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
`.github/workflows/ci.yml` runs `pytest -q` on `pull_request`.
|
|
43
|
+
|
|
44
|
+
## Script output (real; the header, the fixed footer and the empty sections trimmed)
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
python3 scripts/upgrade_diff.py examples/inputs/ledgerline.diff --title "chore(deps): bump tidyparse to 2.2.2"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
```markdown
|
|
51
|
+
**Floor verdict: none from the diff** (mechanical; the changelog, usage and CI checks are still to do, and only they can make it MERGE)
|
|
52
|
+
|
|
53
|
+
## Changed (3)
|
|
54
|
+
|
|
55
|
+
| Package | Ecosystem | Old → New | Class | File | Notes |
|
|
56
|
+
|---|---|---|---|---|---|
|
|
57
|
+
| `charset-sniff` | pip | 1.4.0 → 1.4.1 | patch | `poetry.lock` | lockfile only (transitive); not named in the title |
|
|
58
|
+
| `tidyparse` | pip | 2.2.0 → 2.2.2 | patch | `poetry.lock` | direct |
|
|
59
|
+
| `tidyparse` | pip | ^2.2.0 → ^2.2.2 | patch | `pyproject.toml` | |
|
|
60
|
+
|
|
61
|
+
## Beyond the title (1)
|
|
62
|
+
|
|
63
|
+
- `charset-sniff` changed: 1.4.0 → 1.4.1 (poetry.lock)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
No install scripts, sources, licences or pins appear. The floor says only that the diff itself raises nothing; the notes, the search and CI decide the rest.
|
|
67
|
+
|
|
68
|
+
## Review (what the agent hands back)
|
|
69
|
+
|
|
70
|
+
**MERGE.** A two-release patch bump whose only behaviour change, the new 10 MB line limit in 2.2.2, raises an error the import code already handles, and CI runs that code.
|
|
71
|
+
|
|
72
|
+
🟨 Notes
|
|
73
|
+
|
|
74
|
+
- Both releases read. 2.2.1 fixes quoted newlines splitting rows, which `test_quoted_newline_stays_one_row` (`tests/test_ingest.py:9`) covers. 2.2.2 is a security fix: lines over 10 MB now raise `RowTooLongError`, a subclass of `ParseError`.
|
|
75
|
+
- Search: `git grep -n "tidyparse" -- '*.py'` finds one call, `app/ingest.py:14`, inside `except tidyparse.ParseError` (`app/ingest.py:15`). The new error is caught there and becomes `StatementRejected`, the same path as any malformed file.
|
|
76
|
+
- CI: `ci.yml` runs `pytest -q` on the PR, and `tests/test_ingest.py:3` imports `import_statement`, so the changed code ran. No test feeds a 10 MB line; that is the library's limit, not a change in this repo's behaviour.
|
|
77
|
+
- Beyond the title: `charset-sniff` 1.4.0 → 1.4.1, a transitive patch, listed and not read.
|
|
78
|
+
- No new packages, install scripts, registry changes or pins.
|
|
79
|
+
|
|
80
|
+
| Package | Old → New | Class | Direct? |
|
|
81
|
+
|---|---|---|---|
|
|
82
|
+
| tidyparse | 2.2.0 → 2.2.2 | patch | direct |
|
|
83
|
+
| charset-sniff | 1.4.0 → 1.4.1 | patch | transitive |
|
|
84
|
+
|
|
85
|
+
Rollback: `git revert` the merge commit, or `poetry add tidyparse@2.2.0` and commit `pyproject.toml` and `poetry.lock`. Nothing persists to undo, but rolling back reopens the 2.2.2 memory issue, so pin back to 2.2.0 only as a stopgap.
|
|
86
|
+
|
|
87
|
+
To confirm: nothing.
|
|
88
|
+
|
|
89
|
+
## Why this is MERGE and not MERGE AFTER CHECKS
|
|
90
|
+
|
|
91
|
+
Every check in the verdict rule is closed with evidence in the reply: both releases read, the one changed behaviour searched and found handled, the calling code run by a PR test, no pins, no install-time code, no new source. Remove any one of those (no repo to search, a release with no notes, a test that does not import `app/ingest.py`) and the verdict drops to MERGE AFTER CHECKS with that item as the check.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "dependency-upgrade-review",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Give a merge verdict on a dependency-upgrade pull request (Dependabot, Renovate or a hand-made bump) across npm, pip, Go, Cargo and Maven lockfiles and GitHub Actions pins. Reads the release notes for every skipped version, lists what the lockfile changes beyond the PR title (transitive bumps, new and removed packages, install scripts, registry changes), checks that each SHA pin is the commit its release tag points to, says whether CI ran the changed code, finds the repo's uses of changed APIs and writes the rollback, ending in MERGE, MERGE AFTER CHECKS or DO NOT MERGE. Use when the user says \"review this Dependabot PR\", \"is this Renovate bump safe to merge\", \"can I merge this dependency upgrade\", \"check this lockfile diff\", or \"is this action SHA pin right\".",
|
|
5
|
+
"entrypoint": "SKILL.md",
|
|
6
|
+
"deps": {
|
|
7
|
+
"npm": [],
|
|
8
|
+
"pip": []
|
|
9
|
+
},
|
|
10
|
+
"env": {
|
|
11
|
+
"required": [],
|
|
12
|
+
"optional": []
|
|
13
|
+
},
|
|
14
|
+
"related": [
|
|
15
|
+
"migration-plan",
|
|
16
|
+
"pre-merge-review",
|
|
17
|
+
"release-notes"
|
|
18
|
+
],
|
|
19
|
+
"handoff": [
|
|
20
|
+
{
|
|
21
|
+
"to": "migration-plan",
|
|
22
|
+
"when": "the upgrade is a major framework or runtime jump that cannot land as one PR",
|
|
23
|
+
"purpose": "Plan the staged migration, the compatibility shims and the cutover instead of forcing the bump through.",
|
|
24
|
+
"fallback": "If migration-plan is absent, list the breaking changes the repo hits, the order to fix them in, and the rollback point for each step inline, and keep the verdict at DO NOT MERGE."
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"to": "pre-merge-review",
|
|
28
|
+
"when": "the PR also carries hand-written code changes beyond manifests, lockfiles and pins",
|
|
29
|
+
"purpose": "Review the code change itself with the full correctness, security and quality pass.",
|
|
30
|
+
"fallback": "If pre-merge-review is absent, review the non-dependency files inline for correctness and tests, and say that part of the review was done without the full panel."
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"tags": [
|
|
34
|
+
"dependencies",
|
|
35
|
+
"supply-chain",
|
|
36
|
+
"code-review",
|
|
37
|
+
"dependabot",
|
|
38
|
+
"github-actions"
|
|
39
|
+
],
|
|
40
|
+
"permissions": {
|
|
41
|
+
"network": [],
|
|
42
|
+
"commands": [],
|
|
43
|
+
"files": "named-paths",
|
|
44
|
+
"notes": "Reads only the diff path it is given, or stdin; writes only the -o path when given. No network: SHA verification and changelog reading are printed as commands for the reviewer to run."
|
|
45
|
+
},
|
|
46
|
+
"model": {
|
|
47
|
+
"tier": "standard",
|
|
48
|
+
"rationale": "Reads a version diff, changelogs and CI evidence against a fixed checklist; the merge verdict follows from what is verified, not open-ended judgment."
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# dependency-upgrade-review reference
|
|
2
|
+
|
|
3
|
+
Long-form material for the steps in `SKILL.md`: what each ecosystem's diff shows, where the risky signals live, how to list the releases between two versions, how to verify a pin, and how to roll back.
|
|
4
|
+
|
|
5
|
+
## Reading a lockfile diff, by ecosystem
|
|
6
|
+
|
|
7
|
+
| Ecosystem | Manifest | Lockfile | Transitive changes visible? | Install-time code signal | Source signal | Licence in lockfile? |
|
|
8
|
+
|---|---|---|---|---|---|---|
|
|
9
|
+
| npm | `package.json` | `package-lock.json` (v2/v3: `packages["node_modules/<name>"]`) | Yes | `"hasInstallScript": true`; lifecycle hooks in `package.json` `scripts` | `"resolved"` URL host | Yes, `"license"` |
|
|
10
|
+
| Yarn | `package.json` | `yarn.lock` | Yes | Not recorded; check the package's own `package.json` | `resolved` URL host (v1), `resolution` (Berry) | No |
|
|
11
|
+
| pnpm | `package.json` | `pnpm-lock.yaml` (`packages:` keys `name@version`) | Yes | `requiresBuild: true` | `resolution.tarball` when not the registry | No |
|
|
12
|
+
| pip | `requirements*.txt`, `pyproject.toml` | pinned `requirements.txt`, `poetry.lock`, `uv.lock`, `Pipfile.lock` | Only in a lockfile or a fully pinned requirements file | An sdist with no wheel for the platform runs its build backend at install | `--index-url` / `--extra-index-url`, `[[package.source]]`, `"index"` | No |
|
|
13
|
+
| Go | `go.mod` | `go.sum` | Yes; `// indirect` marks modules the code does not import directly | None at install; `go generate` never runs on its own | `replace` directives; `GOPROXY` / `GOPRIVATE` settings | No |
|
|
14
|
+
| Cargo | `Cargo.toml` | `Cargo.lock` | Yes | `build.rs` in the crate; `-sys` crates link native libraries | `source = "registry+…"` or `git+…` | No |
|
|
15
|
+
| Maven | `pom.xml` | None by default | No; diff `mvn dependency:tree` output before and after | Plugins run at build time | `<repositories>` / `<pluginRepositories>` URLs | No |
|
|
16
|
+
| Gradle | `build.gradle(.kts)`, `gradle/libs.versions.toml` | `gradle.lockfile` only when locking is on | Only with locking; else diff `gradle dependencies` | Plugins run at build time | `repositories { }` blocks | No |
|
|
17
|
+
| GitHub Actions | `.github/workflows/*.yml`, `action.yml` | None | No; a composite action's own `uses:` lines are not in the diff | Every action runs code in the job | The `owner/repo` itself | No |
|
|
18
|
+
|
|
19
|
+
Notes that change the reading:
|
|
20
|
+
|
|
21
|
+
- **npm nested copies.** `node_modules/a/node_modules/b` is a second copy of `b` that only `a` sees. Two versions of one package in the lockfile is normal; a new nested copy of a security-sensitive package (a parser, a crypto library) gets its own row.
|
|
22
|
+
- **Removed packages are evidence.** A dependency dropped by the upgrade often means the package now does that job itself (escaping, parsing). Read what replaced it.
|
|
23
|
+
- **`optional: true` still installs.** Optional dependencies install wherever the platform matches; an optional package with an install script runs it on every developer machine and CI runner that matches.
|
|
24
|
+
- **Go major versions are new modules.** `example.com/lib` to `example.com/lib/v2` is an import path change in every file, not a version bump. Renovate and Dependabot do not rewrite imports.
|
|
25
|
+
- **Maven and unlocked Gradle hide transitive changes.** The diff shows one `<version>` line; the resolved tree can move a dozen artifacts. Ask for the tree diff before reasoning about transitive risk.
|
|
26
|
+
|
|
27
|
+
## Listing the releases between two versions
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npm view <pkg> versions --json # npm: every published version
|
|
31
|
+
npm view <pkg> time --json # npm: publish date of each version
|
|
32
|
+
pip index versions <pkg> # pip 21.2+: versions on the index
|
|
33
|
+
go list -m -versions <module> # Go: tagged versions
|
|
34
|
+
gh release list -R <owner>/<repo> # any GitHub-hosted project, including actions
|
|
35
|
+
gh release view <tag> -R <owner>/<repo> # one release's notes
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The changelog file inside the published package (`CHANGELOG.md`, `HISTORY.rst`, `NEWS`) is often more complete than the release page. For an action, the release notes are the only changelog; a major tag such as `v3` is moved by the maintainer to each new v3.x release.
|
|
39
|
+
|
|
40
|
+
What to pull from each release, in this order:
|
|
41
|
+
|
|
42
|
+
1. **Breaking:** removed or renamed APIs, changed signatures, changed defaults, dropped runtime versions (Node, Python, Go, MSRV), changed output formats.
|
|
43
|
+
2. **Security:** a fixed advisory, the affected range, and the first fixed version. That version is the floor for any pin-back.
|
|
44
|
+
3. **Deprecations:** still works, removed later. A deprecated call the repo makes is a 🟧, not a 🟥.
|
|
45
|
+
4. **Licence:** a changed `license` field or a LICENSE file change. Moves between permissive licences (MIT, BSD, Apache-2.0, ISC) are a note. A move to a copyleft licence (GPL, AGPL, MPL at file level, LGPL) or a source-available licence (BUSL, SSPL, Elastic, "Commons Clause") needs a sign-off from whoever owns licence policy before merge.
|
|
46
|
+
|
|
47
|
+
## Verifying a pin
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
git ls-remote https://github.com/<owner>/<repo> refs/tags/<tag> 'refs/tags/<tag>^{}'
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
- Annotated tag: two lines. The plain `refs/tags/<tag>` line is the tag object; the `refs/tags/<tag>^{}` line is the commit. The pinned SHA must equal the `^{}` line.
|
|
54
|
+
- Lightweight tag: one line, and it is the commit.
|
|
55
|
+
- No output: the tag does not exist in that repository. The pin is wrong or the comment is.
|
|
56
|
+
- `gh api repos/<owner>/<repo>/commits/<sha>` confirms the commit exists, but GitHub serves commits from any fork in the network under the upstream path, so existence proves nothing. Only the tag match does.
|
|
57
|
+
- A SHA with no `# vX.Y.Z` comment: list the tags (`git ls-remote --tags https://github.com/<owner>/<repo>`) and find the SHA. No tag points to it means it is not a release.
|
|
58
|
+
- Tag-only pin (`uses: owner/repo@v3`): the maintainer, or anyone who takes over the account, can point `v3` at new code after review. Pin to the commit the `^{}` line returns and keep the tag as a comment.
|
|
59
|
+
- Branch pin (`@main`): every run gets whatever was pushed last. A PR that introduces one is DO NOT MERGE.
|
|
60
|
+
|
|
61
|
+
Stakes come from the job, not the action: look at `permissions:` (`contents: write`, `id-token: write`, `packages: write`), the `secrets.*` it receives, and the `environment:` it runs in.
|
|
62
|
+
|
|
63
|
+
## Did CI run it?
|
|
64
|
+
|
|
65
|
+
| Where the dependency is used | Runs on the PR? |
|
|
66
|
+
|---|---|
|
|
67
|
+
| A workflow with `on: pull_request` that imports or calls it | Yes, if a test reaches the code path |
|
|
68
|
+
| A workflow with only `on: push: tags`, `release`, `schedule`, `workflow_dispatch`, `workflow_run` | No |
|
|
69
|
+
| A job guarded by `if: github.event_name == 'push'` or a branch condition | No |
|
|
70
|
+
| A build or publish step (bundler, packager, uploader) not in the PR workflow | No |
|
|
71
|
+
| A source file no test imports | No |
|
|
72
|
+
| A test that imports the file but never hits the changed behaviour (a default, an edge case the notes name) | Not the part that changed |
|
|
73
|
+
|
|
74
|
+
Ways to exercise an unrun path before merge: a `workflow_dispatch` dry run on the PR branch, a release to a test index (TestPyPI, a scratch npm scope), or a test that covers the changed behaviour, added in the same PR.
|
|
75
|
+
|
|
76
|
+
## Rollback, by ecosystem
|
|
77
|
+
|
|
78
|
+
| Ecosystem | Pin back | Then |
|
|
79
|
+
|---|---|---|
|
|
80
|
+
| npm | `npm install <pkg>@<old> --save-exact` (or restore the old range) | Commit `package.json` and `package-lock.json`; `npm ci` in CI |
|
|
81
|
+
| Yarn | `yarn add <pkg>@<old>` | Commit `yarn.lock` |
|
|
82
|
+
| pnpm | `pnpm add <pkg>@<old>` | Commit `pnpm-lock.yaml` |
|
|
83
|
+
| pip (requirements) | Restore `<pkg>==<old>` | Regenerate the pinned file with the tool that made it (`pip-compile`, `uv pip compile`) |
|
|
84
|
+
| Poetry | `poetry add <pkg>@<old>` | Commit `pyproject.toml` and `poetry.lock` |
|
|
85
|
+
| uv | `uv add "<pkg>==<old>"` | Commit `pyproject.toml` and `uv.lock` |
|
|
86
|
+
| Go | `go get <module>@<old> && go mod tidy` | Commit `go.mod` and `go.sum` |
|
|
87
|
+
| Cargo | `cargo update -p <crate> --precise <old>` | Commit `Cargo.lock` (and `Cargo.toml` if the requirement moved) |
|
|
88
|
+
| Maven / Gradle | Restore the old `<version>` or version catalog entry | Re-resolve and commit any lockfile |
|
|
89
|
+
| GitHub Actions | Restore the old `uses:` line, SHA and comment | Nothing else |
|
|
90
|
+
|
|
91
|
+
`git revert <merge-commit>` does all of the above in one step when nothing else touched those files since.
|
|
92
|
+
|
|
93
|
+
What a revert does not undo:
|
|
94
|
+
|
|
95
|
+
- **Lockfile format migrations.** `lockfileVersion` 2 → 3, Poetry `lock-version`, a new `uv.lock` schema. An older tool may refuse the reverted lockfile if someone regenerated it with the newer tool in between.
|
|
96
|
+
- **Data the new version wrote.** Database migrations an ORM or library ran, cache files, serialised sessions, search indexes, file formats. The old version may not read them.
|
|
97
|
+
- **Artifacts built or published with it.** A package version on npm, PyPI or crates.io cannot be republished with different contents; a container image already deployed stays deployed.
|
|
98
|
+
- **Security fixes.** Rolling back past a fixed advisory reopens it; pin back to the first fixed version, not to the old one, when the old one is in the affected range.
|
|
99
|
+
- **Downstream consumers.** A library that widened its own dependency range in the same PR has already told its users the new version works.
|