protokit 0.7.0__tar.gz
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.
- protokit-0.7.0/.github/workflows/buf-release-watch.yml +210 -0
- protokit-0.7.0/.github/workflows/ci.yml +261 -0
- protokit-0.7.0/.gitignore +31 -0
- protokit-0.7.0/CHANGELOG.md +2041 -0
- protokit-0.7.0/CONTRIBUTING.md +86 -0
- protokit-0.7.0/LICENSE +21 -0
- protokit-0.7.0/PKG-INFO +1507 -0
- protokit-0.7.0/README.md +1466 -0
- protokit-0.7.0/docs/solutions/best-practices/apply-institutional-learnings-postdating-plan-during-ce-review-2026-05-09.md +493 -0
- protokit-0.7.0/docs/solutions/best-practices/audit-trail-correction-as-changelog-subsection-2026-05-19.md +198 -0
- protokit-0.7.0/docs/solutions/best-practices/audit-wire-format-before-claiming-sibling-parity-2026-05-03.md +467 -0
- protokit-0.7.0/docs/solutions/best-practices/bound-method-self-extraction-rule-to-engine-callback-2026-05-20.md +205 -0
- protokit-0.7.0/docs/solutions/best-practices/buf-parity-divergence-documentation-discipline-2026-05-13.md +269 -0
- protokit-0.7.0/docs/solutions/best-practices/builtin-packs-expansion-changelog-migration-recipe-structure-2026-05-18.md +272 -0
- protokit-0.7.0/docs/solutions/best-practices/capture-setup-without-dispatch-false-test-confidence-2026-05-17.md +221 -0
- protokit-0.7.0/docs/solutions/best-practices/ce-review-convergence-rescues-sub-threshold-findings-2026-05-17.md +505 -0
- protokit-0.7.0/docs/solutions/best-practices/ce-review-cross-reviewer-agreement-shared-misreading-false-positive-amplifier-2026-05-14.md +137 -0
- protokit-0.7.0/docs/solutions/best-practices/changelog-readme-snippet-fixture-byte-equivalence-2026-05-21.md +200 -0
- protokit-0.7.0/docs/solutions/best-practices/circular-import-type-checking-cycle-break-2026-05-11.md +223 -0
- protokit-0.7.0/docs/solutions/best-practices/cli-fixture-proto-hygiene-must-satisfy-builtin-packs-2026-05-13.md +214 -0
- protokit-0.7.0/docs/solutions/best-practices/cli-overrides-deferred-key-notimplemented-trip-wire-2026-05-12.md +230 -0
- protokit-0.7.0/docs/solutions/best-practices/click-parameter-source-detection-cli-config-precedence-2026-05-11.md +444 -0
- protokit-0.7.0/docs/solutions/best-practices/clirunner-catch-exceptions-false-explicit-discipline-2026-05-21.md +197 -0
- protokit-0.7.0/docs/solutions/best-practices/closed-literal-discriminator-bump-trigger-2026-05-17.md +256 -0
- protokit-0.7.0/docs/solutions/best-practices/conftest-plain-function-relative-import-2026-05-12.md +314 -0
- protokit-0.7.0/docs/solutions/best-practices/copytoproto-round-trip-for-proto-form-only-descriptor-fields-2026-05-13.md +323 -0
- protokit-0.7.0/docs/solutions/best-practices/cross-file-pin-regex-anchor-structure-not-annotation-token-2026-05-13.md +239 -0
- protokit-0.7.0/docs/solutions/best-practices/cross-format-enum-string-parity-2026-05-08.md +425 -0
- protokit-0.7.0/docs/solutions/best-practices/custom-rule-bare-prefix-expansion-at-config-resolution-not-engine-dispatch-2026-05-24.md +180 -0
- protokit-0.7.0/docs/solutions/best-practices/delivery-boundary-bundled-commit-feat-plus-review-followups-2026-05-21.md +184 -0
- protokit-0.7.0/docs/solutions/best-practices/delivery-boundary-unit-commit-composition-2026-05-14.md +297 -0
- protokit-0.7.0/docs/solutions/best-practices/deprecationwarning-poisons-except-exception-strict-warning-ci-2026-05-11.md +390 -0
- protokit-0.7.0/docs/solutions/best-practices/dict-shaped-message-template-multi-arm-rule-violation-kind-2026-05-19.md +353 -0
- protokit-0.7.0/docs/solutions/best-practices/documented-api-recipe-verify-runnable-2026-05-19.md +276 -0
- protokit-0.7.0/docs/solutions/best-practices/dormant-code-changelog-draft-staging-delivery-boundary-2026-05-17.md +270 -0
- protokit-0.7.0/docs/solutions/best-practices/dual-ssot-derivation-import-time-drift-guard-2026-05-19.md +147 -0
- protokit-0.7.0/docs/solutions/best-practices/dual-view-prewalk-accumulator-cross-file-rule-dispatch-2026-05-19.md +275 -0
- protokit-0.7.0/docs/solutions/best-practices/empirical-parity-gate-surfaces-latent-helper-bug-at-implementation-time-2026-05-18.md +266 -0
- protokit-0.7.0/docs/solutions/best-practices/expose-finding-params-lint-json-sarif-agent-native-2026-05-19.md +229 -0
- protokit-0.7.0/docs/solutions/best-practices/fail-closed-ci-matrix-coverage-meta-test-2026-05-12.md +195 -0
- protokit-0.7.0/docs/solutions/best-practices/family-aware-partition-pattern-multi-family-parity-harness-2026-05-19.md +306 -0
- protokit-0.7.0/docs/solutions/best-practices/fixture-precondition-assertion-surfaces-silent-test-2026-05-17.md +181 -0
- protokit-0.7.0/docs/solutions/best-practices/flat-config-only-single-pyproject-tier-no-inheritance-2026-05-24.md +139 -0
- protokit-0.7.0/docs/solutions/best-practices/frozen-dataclass-mutable-fields-need-post-init-snapshot-2026-05-02.md +218 -0
- protokit-0.7.0/docs/solutions/best-practices/frozen-dataclass-paired-field-invariant-post-init-2026-05-11.md +235 -0
- protokit-0.7.0/docs/solutions/best-practices/lint-rule-message-templates-must-not-recommend-actions-that-trigger-siblings-2026-05-13.md +298 -0
- protokit-0.7.0/docs/solutions/best-practices/migration-recipe-severity-aware-template-reuse-2026-05-21.md +198 -0
- protokit-0.7.0/docs/solutions/best-practices/module-import-time-fixture-mapping-fail-loud-blast-radius-2026-05-18.md +147 -0
- protokit-0.7.0/docs/solutions/best-practices/module-level-assert-canonicalization-invariant-frozenset-2026-05-20.md +215 -0
- protokit-0.7.0/docs/solutions/best-practices/multi-element-fixture-list-disable-coverage-all-kinds-2026-05-25.md +138 -0
- protokit-0.7.0/docs/solutions/best-practices/multi-mechanism-fix-docstring-enumerate-each-layer-failure-mode-2026-05-18.md +162 -0
- protokit-0.7.0/docs/solutions/best-practices/multi-unit-ce-review-stash-pop-coordination-2026-05-21.md +167 -0
- protokit-0.7.0/docs/solutions/best-practices/no-raise-contract-extends-to-post-init-failures-2026-05-14.md +194 -0
- protokit-0.7.0/docs/solutions/best-practices/normalize-at-input-boundary-2026-05-07.md +450 -0
- protokit-0.7.0/docs/solutions/best-practices/parametrized-matrix-tests-inherit-schema-validators-2026-05-12.md +213 -0
- protokit-0.7.0/docs/solutions/best-practices/parity-gate-must-assert-at-design-claim-granularity-2026-05-22.md +153 -0
- protokit-0.7.0/docs/solutions/best-practices/per-rule-fixture-symbol-isolation-buf-v2-compile-group-2026-05-13.md +248 -0
- protokit-0.7.0/docs/solutions/best-practices/perf-smoke-profile-compose-across-builtin-packs-2026-05-13.md +161 -0
- protokit-0.7.0/docs/solutions/best-practices/phase-0-empirical-verification-falsifies-brainstorm-assumption-2026-05-22.md +152 -0
- protokit-0.7.0/docs/solutions/best-practices/phase-0-narrowing-rule-reachable-but-narrower-than-brainstorm-assumed-2026-05-22.md +140 -0
- protokit-0.7.0/docs/solutions/best-practices/plan-review-verify-prior-art-citations-2026-05-15.md +562 -0
- protokit-0.7.0/docs/solutions/best-practices/post-ship-adoption-monitoring-pre-1.0-breaking-default-change-2026-05-19.md +225 -0
- protokit-0.7.0/docs/solutions/best-practices/pre-1.0-version-bump-as-communication-contract-2026-05-14.md +325 -0
- protokit-0.7.0/docs/solutions/best-practices/pre-promotion-empirical-hit-rate-validation-hard-gate-severity-change-2026-05-25.md +144 -0
- protokit-0.7.0/docs/solutions/best-practices/presence-ratchet-pin-canonical-not-local-form-2026-05-23.md +175 -0
- protokit-0.7.0/docs/solutions/best-practices/presence-ratchet-test-pattern-for-prose-substrings-2026-05-14.md +510 -0
- protokit-0.7.0/docs/solutions/best-practices/programmatic-proto-fixture-builder-multi-file-rule-family-2026-05-17.md +160 -0
- protokit-0.7.0/docs/solutions/best-practices/public-surface-draft-discipline-source-audit-2026-05-12.md +170 -0
- protokit-0.7.0/docs/solutions/best-practices/pureposixpath-for-proto-descriptor-file-stem-2026-05-12.md +150 -0
- protokit-0.7.0/docs/solutions/best-practices/pytest-static-analysis-gate-ratchet-2026-05-02.md +281 -0
- protokit-0.7.0/docs/solutions/best-practices/replace-all-substring-collision-rename-contains-old-name-2026-05-19.md +122 -0
- protokit-0.7.0/docs/solutions/best-practices/ruff-fix-scope-discipline-pass-diff-files-explicitly-2026-05-21.md +180 -0
- protokit-0.7.0/docs/solutions/best-practices/rule-pack-extension-ssot-rule-ids-and-test-class-naming-2026-05-12.md +131 -0
- protokit-0.7.0/docs/solutions/best-practices/sarif-rule-catalog-default-configuration-level-severity-contract-2026-05-25.md +175 -0
- protokit-0.7.0/docs/solutions/best-practices/semantic-category-conflation-accepted-tradeoff-literal-widening-2026-05-13.md +453 -0
- protokit-0.7.0/docs/solutions/best-practices/sentinel-at-coercion-layer-not-enum-widening-2026-05-24.md +219 -0
- protokit-0.7.0/docs/solutions/best-practices/shared-error-helper-source-label-caller-attribution-2026-05-11.md +401 -0
- protokit-0.7.0/docs/solutions/best-practices/smoke-not-benchmark-loose-threshold-calibration-2026-05-12.md +223 -0
- protokit-0.7.0/docs/solutions/best-practices/source-aware-error-messages-multi-source-resolved-value-2026-05-11.md +355 -0
- protokit-0.7.0/docs/solutions/best-practices/stale-forward-looking-text-cli-help-agent-discoverability-2026-05-12.md +247 -0
- protokit-0.7.0/docs/solutions/best-practices/structural-anchor-test-sha-collision-prone-empty-fixtures-2026-05-19.md +280 -0
- protokit-0.7.0/docs/solutions/best-practices/structural-pin-inspect-getsource-untestable-collision-branch-2026-05-13.md +389 -0
- protokit-0.7.0/docs/solutions/best-practices/symmetric-coercion-strictness-multi-source-field-resolver-2026-05-12.md +268 -0
- protokit-0.7.0/docs/solutions/best-practices/tarjan-scc-iterative-dfs-package-cycle-detection-2026-05-22.md +159 -0
- protokit-0.7.0/docs/solutions/best-practices/test-method-names-encode-invariants-not-delivery-deltas-2026-05-13.md +155 -0
- protokit-0.7.0/docs/solutions/best-practices/test-proxy-signal-suppressed-by-mechanism-under-test-2026-05-25.md +298 -0
- protokit-0.7.0/docs/solutions/best-practices/upstream-rule-deprecation-skip-ordering-parity-harness-2026-05-13.md +296 -0
- protokit-0.7.0/docs/solutions/best-practices/value-migrated-vs-value-added-consumer-migration-2026-05-17.md +234 -0
- protokit-0.7.0/docs/solutions/best-practices/verify-reviewer-sort-ordering-claims-against-canonical-regen-2026-05-19.md +133 -0
- protokit-0.7.0/docs/solutions/best-practices/weakkeydict-plus-id-resettable-attr-per-engine-per-run-state-2026-05-20.md +262 -0
- protokit-0.7.0/docs/solutions/best-practices/wire-format-schema-version-bump-contract-and-absence-semantic-2026-05-13.md +452 -0
- protokit-0.7.0/docs/solutions/best-practices/worked-example-multi-scenario-test-class-template-2026-05-21.md +363 -0
- protokit-0.7.0/docs/solutions/logic-errors/cli-loaded-packs-dedup-zip-strict-builtin-packs-flip-2026-05-18.md +146 -0
- protokit-0.7.0/docs/solutions/logic-errors/escape-pair-aware-truncation-dangling-backslash-wire-format-divergence-2026-05-17.md +140 -0
- protokit-0.7.0/docs/solutions/logic-errors/inverted-fail-loud-canary-parity-override-unreachable-branch-2026-05-19.md +160 -0
- protokit-0.7.0/docs/solutions/logic-errors/matcher-backend-path-resolution-skew-silently-empties-output-2026-05-02.md +144 -0
- protokit-0.7.0/docs/solutions/logic-errors/proto3-optional-synthetic-oneof-false-positive-lint-rule-2026-05-12.md +135 -0
- protokit-0.7.0/docs/solutions/logic-errors/rules-tuple-insertion-order-load-bearing-engine-dispatch-2026-05-19.md +134 -0
- protokit-0.7.0/docs/solutions/logic-errors/subprocess-exit-code-validation-test-harness-2026-05-13.md +296 -0
- protokit-0.7.0/docs/solutions/logic-errors/truncation-guard-odd-count-discipline-for-doubled-escape-pairs-2026-05-18.md +139 -0
- protokit-0.7.0/docs/solutions/security-issues/formatter-systemexit-exit-code-bypass-2026-04-19.md +372 -0
- protokit-0.7.0/docs/solutions/security-issues/github-actions-expression-injection-env-block-mitigation-2026-05-13.md +238 -0
- protokit-0.7.0/docs/solutions/security-issues/keyboardinterrupt-baseexception-bypass-rule-pack-load-2026-05-07.md +516 -0
- protokit-0.7.0/docs/solutions/security-issues/module-name-newline-injection-stderr-forge-2026-05-07.md +600 -0
- protokit-0.7.0/docs/solutions/security-issues/sha256sum-strict-flag-supply-chain-silent-bypass-2026-05-13.md +230 -0
- protokit-0.7.0/docs/solutions/test-failures/mock-patch-c-extension-method-descriptor-2026-05-06.md +382 -0
- protokit-0.7.0/docs/solutions/test-failures/pytestmark-does-not-guard-module-top-imports-2026-05-02.md +153 -0
- protokit-0.7.0/examples/README.md +18 -0
- protokit-0.7.0/examples/custom_formatter.py +122 -0
- protokit-0.7.0/examples/rule_pack.py +58 -0
- protokit-0.7.0/examples/schema_check.py +144 -0
- protokit-0.7.0/examples/schema_plugin.py +126 -0
- protokit-0.7.0/pyproject.toml +130 -0
- protokit-0.7.0/src/protokit/__init__.py +15 -0
- protokit-0.7.0/src/protokit/_cli_utils.py +747 -0
- protokit-0.7.0/src/protokit/_descriptors.py +147 -0
- protokit-0.7.0/src/protokit/cli.py +31 -0
- protokit-0.7.0/src/protokit/formatters/__init__.py +85 -0
- protokit-0.7.0/src/protokit/formatters/_builtin_bisect.py +195 -0
- protokit-0.7.0/src/protokit/formatters/_builtin_compat.py +268 -0
- protokit-0.7.0/src/protokit/formatters/_builtin_diff.py +340 -0
- protokit-0.7.0/src/protokit/formatters/_builtin_history.py +193 -0
- protokit-0.7.0/src/protokit/formatters/_builtin_lint.py +952 -0
- protokit-0.7.0/src/protokit/formatters/_junit_xml.py +239 -0
- protokit-0.7.0/src/protokit/formatters/_registry.py +337 -0
- protokit-0.7.0/src/protokit/formatters/_sarif_json.py +269 -0
- protokit-0.7.0/src/protokit/message/__init__.py +56 -0
- protokit-0.7.0/src/protokit/message/cli.py +341 -0
- protokit-0.7.0/src/protokit/message/comparators.py +175 -0
- protokit-0.7.0/src/protokit/message/differ.py +1880 -0
- protokit-0.7.0/src/protokit/message/formatting.py +44 -0
- protokit-0.7.0/src/protokit/message/model.py +945 -0
- protokit-0.7.0/src/protokit/message/pytest_plugin.py +109 -0
- protokit-0.7.0/src/protokit/options.py +124 -0
- protokit-0.7.0/src/protokit/py.typed +0 -0
- protokit-0.7.0/src/protokit/schema/__init__.py +80 -0
- protokit-0.7.0/src/protokit/schema/checker.py +829 -0
- protokit-0.7.0/src/protokit/schema/cli.py +1651 -0
- protokit-0.7.0/src/protokit/schema/compile.py +744 -0
- protokit-0.7.0/src/protokit/schema/git.py +830 -0
- protokit-0.7.0/src/protokit/schema/lint/__init__.py +9 -0
- protokit-0.7.0/src/protokit/schema/lint/_cli_utils.py +635 -0
- protokit-0.7.0/src/protokit/schema/lint/_config.py +2405 -0
- protokit-0.7.0/src/protokit/schema/lint/_custom_rules.py +513 -0
- protokit-0.7.0/src/protokit/schema/lint/_extension_access.py +141 -0
- protokit-0.7.0/src/protokit/schema/lint/cli.py +1440 -0
- protokit-0.7.0/src/protokit/schema/lint/decorator.py +174 -0
- protokit-0.7.0/src/protokit/schema/lint/engine.py +1693 -0
- protokit-0.7.0/src/protokit/schema/lint/model.py +1645 -0
- protokit-0.7.0/src/protokit/schema/lint/rules/__init__.py +262 -0
- protokit-0.7.0/src/protokit/schema/lint/rules/enum.py +116 -0
- protokit-0.7.0/src/protokit/schema/lint/rules/field.py +143 -0
- protokit-0.7.0/src/protokit/schema/lint/rules/file.py +128 -0
- protokit-0.7.0/src/protokit/schema/lint/rules/imports.py +245 -0
- protokit-0.7.0/src/protokit/schema/lint/rules/naming.py +318 -0
- protokit-0.7.0/src/protokit/schema/lint/rules/options/__init__.py +0 -0
- protokit-0.7.0/src/protokit/schema/lint/rules/options/_comments.py +267 -0
- protokit-0.7.0/src/protokit/schema/lint/rules/options/deprecated_replacement.py +426 -0
- protokit-0.7.0/src/protokit/schema/lint/rules/options/field_behavior.py +414 -0
- protokit-0.7.0/src/protokit/schema/lint/rules/package.py +585 -0
- protokit-0.7.0/src/protokit/schema/lint/rules/package_same.py +555 -0
- protokit-0.7.0/src/protokit/schema/model.py +556 -0
- protokit-0.7.0/src/protokit/schema/plugins.py +352 -0
- protokit-0.7.0/src/protokit/schema/profiles.py +194 -0
- protokit-0.7.0/src/protokit/schema/pytest_plugin.py +153 -0
- protokit-0.7.0/src/protokit/schema/rules.py +1041 -0
- protokit-0.7.0/tests/__init__.py +0 -0
- protokit-0.7.0/tests/_buf_helpers.py +317 -0
- protokit-0.7.0/tests/fixtures/junit-xml/JUnit.xsd +227 -0
- protokit-0.7.0/tests/fixtures/junit-xml/SOURCE.md +20 -0
- protokit-0.7.0/tests/fixtures/sarif/SOURCE.md +43 -0
- protokit-0.7.0/tests/fixtures/sarif/sarif-2.1.0.json +2882 -0
- protokit-0.7.0/tests/parity/__init__.py +0 -0
- protokit-0.7.0/tests/parity/conftest.py +1152 -0
- protokit-0.7.0/tests/parity/fixtures/enum/first-value-zero/bad.proto +8 -0
- protokit-0.7.0/tests/parity/fixtures/enum/first-value-zero/buf.yaml +6 -0
- protokit-0.7.0/tests/parity/fixtures/enum/first-value-zero/good.proto +8 -0
- protokit-0.7.0/tests/parity/fixtures/enum/no-allow-alias/bad.proto +9 -0
- protokit-0.7.0/tests/parity/fixtures/enum/no-allow-alias/buf.yaml +6 -0
- protokit-0.7.0/tests/parity/fixtures/enum/no-allow-alias/good.proto +8 -0
- protokit-0.7.0/tests/parity/fixtures/field/not-required/buf.yaml +6 -0
- protokit-0.7.0/tests/parity/fixtures/field/not-required/good.proto +5 -0
- protokit-0.7.0/tests/parity/fixtures/field/not-required/proto2_optional.proto +8 -0
- protokit-0.7.0/tests/parity/fixtures/field/not-required/proto2_required.proto +9 -0
- protokit-0.7.0/tests/parity/fixtures/field/not-required/proto3_field.proto +9 -0
- protokit-0.7.0/tests/parity/fixtures/file/syntax-specified/buf.yaml +6 -0
- protokit-0.7.0/tests/parity/fixtures/file/syntax-specified/explicit_proto2.proto +7 -0
- protokit-0.7.0/tests/parity/fixtures/file/syntax-specified/good.proto +5 -0
- protokit-0.7.0/tests/parity/fixtures/file/syntax-specified/no_syntax.proto +5 -0
- protokit-0.7.0/tests/parity/fixtures/imports/no-public/bad.proto +9 -0
- protokit-0.7.0/tests/parity/fixtures/imports/no-public/buf.yaml +6 -0
- protokit-0.7.0/tests/parity/fixtures/imports/no-public/good.proto +9 -0
- protokit-0.7.0/tests/parity/fixtures/imports/no-public/other.proto +7 -0
- protokit-0.7.0/tests/parity/fixtures/imports/no-weak/bad.proto +9 -0
- protokit-0.7.0/tests/parity/fixtures/imports/no-weak/buf.yaml +6 -0
- protokit-0.7.0/tests/parity/fixtures/imports/no-weak/good.proto +9 -0
- protokit-0.7.0/tests/parity/fixtures/imports/no-weak/other.proto +7 -0
- protokit-0.7.0/tests/parity/fixtures/imports/unused/bad.proto +9 -0
- protokit-0.7.0/tests/parity/fixtures/imports/unused/buf.yaml +6 -0
- protokit-0.7.0/tests/parity/fixtures/imports/unused/good.proto +9 -0
- protokit-0.7.0/tests/parity/fixtures/imports/unused/other.proto +7 -0
- protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-enums/bad.proto +7 -0
- protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-enums/buf.yaml +6 -0
- protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-enums/good.proto +7 -0
- protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-messages/bad.proto +7 -0
- protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-messages/buf.yaml +6 -0
- protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-messages/good.proto +7 -0
- protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-rpcs/bad.proto +10 -0
- protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-rpcs/buf.yaml +6 -0
- protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-rpcs/good.proto +10 -0
- protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-services/bad.proto +10 -0
- protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-services/buf.yaml +6 -0
- protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-services/good.proto +10 -0
- protokit-0.7.0/tests/parity/fixtures/naming/snake-case-fields/bad.proto +7 -0
- protokit-0.7.0/tests/parity/fixtures/naming/snake-case-fields/buf.yaml +6 -0
- protokit-0.7.0/tests/parity/fixtures/naming/snake-case-fields/good.proto +8 -0
- protokit-0.7.0/tests/parity/fixtures/naming/snake-case-files/BadFile.proto +5 -0
- protokit-0.7.0/tests/parity/fixtures/naming/snake-case-files/buf.yaml +6 -0
- protokit-0.7.0/tests/parity/fixtures/naming/snake-case-files/good_file.proto +5 -0
- protokit-0.7.0/tests/parity/fixtures/naming/snake-case-oneofs/bad.proto +10 -0
- protokit-0.7.0/tests/parity/fixtures/naming/snake-case-oneofs/buf.yaml +6 -0
- protokit-0.7.0/tests/parity/fixtures/naming/snake-case-oneofs/good.proto +10 -0
- protokit-0.7.0/tests/parity/fixtures/naming/snake-case-packages/bad.proto +5 -0
- protokit-0.7.0/tests/parity/fixtures/naming/snake-case-packages/buf.yaml +6 -0
- protokit-0.7.0/tests/parity/fixtures/naming/snake-case-packages/good.proto +5 -0
- protokit-0.7.0/tests/parity/fixtures/naming/upper-snake-case-enum-values/bad.proto +8 -0
- protokit-0.7.0/tests/parity/fixtures/naming/upper-snake-case-enum-values/buf.yaml +6 -0
- protokit-0.7.0/tests/parity/fixtures/naming/upper-snake-case-enum-values/good.proto +8 -0
- protokit-0.7.0/tests/parity/fixtures/package/defined/bad.proto +3 -0
- protokit-0.7.0/tests/parity/fixtures/package/defined/buf.yaml +6 -0
- protokit-0.7.0/tests/parity/fixtures/package/defined/good.proto +5 -0
- protokit-0.7.0/tests/parity/fixtures/package/directory-match/buf.yaml +6 -0
- protokit-0.7.0/tests/parity/fixtures/package/directory-match/parity/dirmatch/good.proto +5 -0
- protokit-0.7.0/tests/parity/fixtures/package/directory-match/wrongdir/bad.proto +5 -0
- protokit-0.7.0/tests/parity/test_assert_parity_branches.py +238 -0
- protokit-0.7.0/tests/parity/test_buf_output_shape.py +120 -0
- protokit-0.7.0/tests/parity/test_fixture_inventory.py +85 -0
- protokit-0.7.0/tests/parity/test_parity_enum.py +77 -0
- protokit-0.7.0/tests/parity/test_parity_field.py +111 -0
- protokit-0.7.0/tests/parity/test_parity_file.py +103 -0
- protokit-0.7.0/tests/parity/test_parity_imports.py +82 -0
- protokit-0.7.0/tests/parity/test_parity_naming.py +130 -0
- protokit-0.7.0/tests/parity/test_parity_package.py +125 -0
- protokit-0.7.0/tests/parity/test_parity_package_directory.py +386 -0
- protokit-0.7.0/tests/parity/test_parity_package_no_import_cycle.py +252 -0
- protokit-0.7.0/tests/parity/test_parity_package_same.py +452 -0
- protokit-0.7.0/tests/proto_builder.py +208 -0
- protokit-0.7.0/tests/schema/__init__.py +0 -0
- protokit-0.7.0/tests/schema/helpers.py +125 -0
- protokit-0.7.0/tests/schema/lint/__init__.py +7 -0
- protokit-0.7.0/tests/schema/lint/_cli_dedup_helpers.py +82 -0
- protokit-0.7.0/tests/schema/lint/_config/__init__.py +1 -0
- protokit-0.7.0/tests/schema/lint/_config/conftest.py +56 -0
- protokit-0.7.0/tests/schema/lint/_config/test_coerce_disable_enable_rules.py +279 -0
- protokit-0.7.0/tests/schema/lint/_config/test_exclude_patterns.py +248 -0
- protokit-0.7.0/tests/schema/lint/_config/test_from_dict_r9b.py +332 -0
- protokit-0.7.0/tests/schema/lint/_config/test_loader.py +531 -0
- protokit-0.7.0/tests/schema/lint/_config/test_no_builtin_rules.py +166 -0
- protokit-0.7.0/tests/schema/lint/_config/test_precedence.py +264 -0
- protokit-0.7.0/tests/schema/lint/_config/test_profile_aliases.py +161 -0
- protokit-0.7.0/tests/schema/lint/_config/test_resolved_config.py +530 -0
- protokit-0.7.0/tests/schema/lint/_config/test_schema_validation.py +337 -0
- protokit-0.7.0/tests/schema/lint/_config/test_severities.py +379 -0
- protokit-0.7.0/tests/schema/lint/_config/test_walkup.py +245 -0
- protokit-0.7.0/tests/schema/lint/cli/__init__.py +7 -0
- protokit-0.7.0/tests/schema/lint/cli/_helpers.py +175 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/bad_naming.proto +20 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/clean.proto +20 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6d_custom_annotation/proto/example/audit.proto +35 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6d_custom_annotation/proto/example/service.proto +53 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6d_custom_annotation/pyproject.toml +52 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_migration_recipe/README.md +22 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_migration_recipe/disabled_rules_single_rule.toml +12 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_migration_recipe/enabled_rules_single_rule.toml +13 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_migration_recipe/path2_demote_one_rule_to_warning.toml +10 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_migration_recipe/path3_off_severity_single_rule.toml +12 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_migration_recipe/path4_disabled_rules_r6_family.toml +20 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_r6_migration/path1_fix_schema.proto +21 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_r6_migration/path2_demote_to_warning.toml +17 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_r6_migration/path3_off_severity.toml +17 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_r6_migration/path4_disabled_rules_family.toml +19 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_r6_migration/sad.proto +14 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_r6_migration/sad_multi_element.proto +41 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/missing_imports.proto +21 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/pool_conflict_a.proto +16 -0
- protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/pool_conflict_b.proto +14 -0
- protokit-0.7.0/tests/schema/lint/cli/conftest.py +176 -0
- protokit-0.7.0/tests/schema/lint/cli/test_breaking_migration.py +185 -0
- protokit-0.7.0/tests/schema/lint/cli/test_cli_ci_gating.py +1139 -0
- protokit-0.7.0/tests/schema/lint/cli/test_cli_d6f_migration_recipe_snippet_fixtures.py +236 -0
- protokit-0.7.0/tests/schema/lint/cli/test_cli_descriptor_set_source_info.py +339 -0
- protokit-0.7.0/tests/schema/lint/cli/test_cli_disable_enable_rule_flags.py +212 -0
- protokit-0.7.0/tests/schema/lint/cli/test_cli_error_codes.py +128 -0
- protokit-0.7.0/tests/schema/lint/cli/test_cli_input_modes.py +490 -0
- protokit-0.7.0/tests/schema/lint/cli/test_cli_integration.py +258 -0
- protokit-0.7.0/tests/schema/lint/cli/test_cli_no_rules.py +38 -0
- protokit-0.7.0/tests/schema/lint/cli/test_cli_profile_resolution.py +482 -0
- protokit-0.7.0/tests/schema/lint/cli/test_cli_r6_migration_recipe.py +264 -0
- protokit-0.7.0/tests/schema/lint/cli/test_cli_r9b_profile_augmentation.py +493 -0
- protokit-0.7.0/tests/schema/lint/cli/test_cli_r9b_unknown_rule_id.py +208 -0
- protokit-0.7.0/tests/schema/lint/cli/test_cli_rule_loading.py +259 -0
- protokit-0.7.0/tests/schema/lint/cli/test_cli_utils.py +25 -0
- protokit-0.7.0/tests/schema/lint/cli/test_config_flags.py +310 -0
- protokit-0.7.0/tests/schema/lint/cli/test_d6d_custom_annotation_example.py +627 -0
- protokit-0.7.0/tests/schema/lint/cli/test_exclude.py +410 -0
- protokit-0.7.0/tests/schema/lint/cli/test_human_stderr_render.py +623 -0
- protokit-0.7.0/tests/schema/lint/cli/test_min_severity_relaxed.py +245 -0
- protokit-0.7.0/tests/schema/lint/cli/test_no_exclude.py +233 -0
- protokit-0.7.0/tests/schema/lint/cli/test_r6_cli_integration.py +315 -0
- protokit-0.7.0/tests/schema/lint/cli/test_r9a_severities_overlay.py +251 -0
- protokit-0.7.0/tests/schema/lint/cli/test_r9c_no_builtin_rules.py +176 -0
- protokit-0.7.0/tests/schema/lint/cli/test_r9d_schema_version.py +137 -0
- protokit-0.7.0/tests/schema/lint/cli/test_severities_unloaded_rule_category.py +288 -0
- protokit-0.7.0/tests/schema/lint/cli/test_version_output.py +91 -0
- protokit-0.7.0/tests/schema/lint/cli/user_packs/__init__.py +12 -0
- protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_collision.py +31 -0
- protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_compat_format.py +20 -0
- protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_emits_error.py +32 -0
- protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_module_raises.py +13 -0
- protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_no_rules.py +6 -0
- protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_rule_raises.py +34 -0
- protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_strict_only.py +35 -0
- protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_sys_exits.py +16 -0
- protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_user_a.py +33 -0
- protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_user_b.py +32 -0
- protokit-0.7.0/tests/schema/lint/fixtures/all_kinds.proto +61 -0
- protokit-0.7.0/tests/schema/lint/rules/__init__.py +0 -0
- protokit-0.7.0/tests/schema/lint/rules/conftest.py +92 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/__init__.py +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/__init__.py +20 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/cofire-r8-r8b/buf.yaml +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/cofire-r8-r8b/other_dir/c.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/cofire-r8-r8b/pkg/a.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/cofire-r8-r8b/pkg/b.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/matched-dir/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/matched-dir/pkg/a.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/matched-dir/pkg/b.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/mismatched-dir/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/mismatched-dir/pkg/a.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/mismatched-dir/pkg/b.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/n3-directories-split/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/n3-directories-split/d1/a.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/n3-directories-split/d2/b.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/n3-directories-split/d3/c.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/n3-packages-same-dir/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/n3-packages-same-dir/pkg/a.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/n3-packages-same-dir/pkg/b.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/n3-packages-same-dir/pkg/c.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/no-package-mixed/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/no-package-mixed/pkg/a.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/no-package-mixed/pkg/b.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/no-package-mixed/pkg/c.proto +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/proto-root-mixed/a.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/proto-root-mixed/b.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/proto-root-mixed/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/CHECKSUMS.sha256 +10 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/cofire-r8-r8b.json +4 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/matched-dir.json +0 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/mismatched-dir.json +2 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/n3-directories-split.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/n3-packages-same-dir.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/no-package-mixed.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/proto-root-mixed.json +2 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/single-declared-no-package.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/single-file-dir.json +0 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/split-package-multi-dir.json +2 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/single-declared-no-package/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/single-declared-no-package/pkg/a.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/single-declared-no-package/pkg/b.proto +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/single-declared-no-package/pkg/c.proto +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/single-file-dir/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/single-file-dir/pkg/a.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/split-package-multi-dir/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/split-package-multi-dir/dir1/a.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/split-package-multi-dir/dir2/b.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/leaf_files_in_cyclic_pkg/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/leaf_files_in_cyclic_pkg/pkg_a/a1.proto +4 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/leaf_files_in_cyclic_pkg/pkg_a/a_sibling.proto +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/leaf_files_in_cyclic_pkg/pkg_b/b1.proto +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/leaf_files_in_cyclic_pkg/pkg_b/b2.proto +4 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/leaf_files_in_cyclic_pkg/pkg_b/b_sibling.proto +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/no_cycle_baseline/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/no_cycle_baseline/pkg_a/a.proto +4 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/no_cycle_baseline/pkg_b/b.proto +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/recorded/leaf_files_in_cyclic_pkg.json +2 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/recorded/no_cycle_baseline.json +0 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/recorded/root_vendor_pkg_cycle.json +2 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/recorded/three_pkg_cycle.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/recorded/two_pkg_cycle.json +2 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/root_vendor_pkg_cycle/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/root_vendor_pkg_cycle/pkg_a/a.proto +4 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/root_vendor_pkg_cycle/pkg_a/a_leaf.proto +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/root_vendor_pkg_cycle/vendor/v1.proto +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/root_vendor_pkg_cycle/vendor/v2.proto +4 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/three_pkg_cycle/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/three_pkg_cycle/pkg_a/a.proto +4 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/three_pkg_cycle/pkg_a/a_leaf.proto +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/three_pkg_cycle/pkg_b/b1.proto +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/three_pkg_cycle/pkg_b/b2.proto +4 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/three_pkg_cycle/pkg_c/c1.proto +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/three_pkg_cycle/pkg_c/c2.proto +4 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/two_pkg_cycle/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/two_pkg_cycle/pkg_a/a1.proto +4 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/two_pkg_cycle/pkg_a/a2.proto +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/two_pkg_cycle/pkg_b/b1.proto +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/two_pkg_cycle/pkg_b/b2.proto +4 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/__init__.py +9 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/all-agree/a.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/all-agree/b.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/all-agree/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/all-agree/c.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/compound-backslash-quote/a.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/compound-backslash-quote/b.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/compound-backslash-quote/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/empty-package-mixed/a.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/empty-package-mixed/b.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/empty-package-mixed/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/empty-package-mixed/c.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/googleapis-import/a.proto +11 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/googleapis-import/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/googleapis-import/google/api/annotations.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/googleapis-import/google/api/http.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence/a.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence/b.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence/c.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-csharp-namespace/a.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-csharp-namespace/b.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-csharp-namespace/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-csharp-namespace/c.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-java-multiple-files/a.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-java-multiple-files/b.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-java-multiple-files/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-java-multiple-files/c.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-java-package/a.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-java-package/b.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-java-package/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-java-package/c.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-php-namespace/a.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-php-namespace/b.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-php-namespace/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-php-namespace/c.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-ruby-package/a.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-ruby-package/b.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-ruby-package/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-ruby-package/c.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-swift-prefix/a.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-swift-prefix/b.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-swift-prefix/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-swift-prefix/c.proto +5 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value/a.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value/b.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value/c.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-csharp-namespace/a.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-csharp-namespace/b.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-csharp-namespace/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-csharp-namespace/c.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-java-multiple-files/a.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-java-multiple-files/b.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-java-multiple-files/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-java-multiple-files/c.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-java-package/a.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-java-package/b.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-java-package/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-java-package/c.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-php-namespace/a.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-php-namespace/b.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-php-namespace/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-php-namespace/c.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-ruby-package/a.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-ruby-package/b.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-ruby-package/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-ruby-package/c.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-swift-prefix/a.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-swift-prefix/b.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-swift-prefix/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-swift-prefix/c.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-with-inner-quote/a.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-with-inner-quote/b.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-with-inner-quote/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-with-inner-quote/c.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/CHECKSUMS.sha256 +22 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/all-agree.json +0 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/compound-backslash-quote.json +2 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/empty-package-mixed.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/googleapis-import.json +2 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-presence-csharp-namespace.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-presence-java-multiple-files.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-presence-java-package.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-presence-php-namespace.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-presence-ruby-package.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-presence-swift-prefix.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-presence.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-value-csharp-namespace.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-value-java-multiple-files.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-value-java-package.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-value-php-namespace.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-value-ruby-package.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-value-swift-prefix.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-value-with-inner-quote.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-value.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/reverse-order-go.json +3 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/wkt-conflict.json +2 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/wkt-only.json +0 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/reverse-order-go/a.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/reverse-order-go/b.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/reverse-order-go/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/reverse-order-go/c.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/wkt-conflict/a.proto +11 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/wkt-conflict/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/wkt-conflict/google/protobuf/extension_a.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/wkt-conflict/google/protobuf/extension_b.proto +7 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/wkt-only/a.proto +11 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/wkt-only/buf.yaml +6 -0
- protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/proto_templates.py +357 -0
- protokit-0.7.0/tests/schema/lint/rules/options/__init__.py +0 -0
- protokit-0.7.0/tests/schema/lint/rules/options/test_comments.py +396 -0
- protokit-0.7.0/tests/schema/lint/rules/options/test_deprecated_replacement.py +974 -0
- protokit-0.7.0/tests/schema/lint/rules/options/test_deprecated_replacement_severity.py +139 -0
- protokit-0.7.0/tests/schema/lint/rules/options/test_field_behavior_consistent.py +914 -0
- protokit-0.7.0/tests/schema/lint/rules/test_enum.py +345 -0
- protokit-0.7.0/tests/schema/lint/rules/test_field.py +435 -0
- protokit-0.7.0/tests/schema/lint/rules/test_file.py +296 -0
- protokit-0.7.0/tests/schema/lint/rules/test_imports.py +612 -0
- protokit-0.7.0/tests/schema/lint/rules/test_kd9_docstring.py +49 -0
- protokit-0.7.0/tests/schema/lint/rules/test_naming_extended.py +857 -0
- protokit-0.7.0/tests/schema/lint/rules/test_package.py +432 -0
- protokit-0.7.0/tests/schema/lint/rules/test_package_same.py +1329 -0
- protokit-0.7.0/tests/schema/lint/rules/test_package_same_directory.py +907 -0
- protokit-0.7.0/tests/schema/lint/test_buf_smoke_assumptions.py +108 -0
- protokit-0.7.0/tests/schema/lint/test_buf_smoke_assumptions_package_directory.py +131 -0
- protokit-0.7.0/tests/schema/lint/test_buf_smoke_recorded_checksums.py +108 -0
- protokit-0.7.0/tests/schema/lint/test_buf_smoke_recorded_checksums_package_directory.py +166 -0
- protokit-0.7.0/tests/schema/lint/test_builtin_packs.py +214 -0
- protokit-0.7.0/tests/schema/lint/test_canary_naming.py +216 -0
- protokit-0.7.0/tests/schema/lint/test_cli_package_same_e2e.py +293 -0
- protokit-0.7.0/tests/schema/lint/test_cli_rule_pack_dedup.py +754 -0
- protokit-0.7.0/tests/schema/lint/test_cold_import_extended.py +105 -0
- protokit-0.7.0/tests/schema/lint/test_compile_failure.py +322 -0
- protokit-0.7.0/tests/schema/lint/test_compile_include_source_info.py +552 -0
- protokit-0.7.0/tests/schema/lint/test_compile_multi.py +321 -0
- protokit-0.7.0/tests/schema/lint/test_compile_pool_file_names.py +334 -0
- protokit-0.7.0/tests/schema/lint/test_compile_protoxy_fallback.py +249 -0
- protokit-0.7.0/tests/schema/lint/test_custom_rules_loader.py +573 -0
- protokit-0.7.0/tests/schema/lint/test_decorator.py +216 -0
- protokit-0.7.0/tests/schema/lint/test_engine.py +1040 -0
- protokit-0.7.0/tests/schema/lint/test_engine_directory_package_accumulator.py +699 -0
- protokit-0.7.0/tests/schema/lint/test_engine_pre_walk.py +964 -0
- protokit-0.7.0/tests/schema/lint/test_engine_source_info_descriptors_injection.py +383 -0
- protokit-0.7.0/tests/schema/lint/test_engine_warning_content_safety.py +472 -0
- protokit-0.7.0/tests/schema/lint/test_model.py +1098 -0
- protokit-0.7.0/tests/schema/lint/test_model_dataclass_changes.py +251 -0
- protokit-0.7.0/tests/schema/lint/test_no_builtin_rule_uses_custom_prefix.py +48 -0
- protokit-0.7.0/tests/schema/lint/test_perf_smoke.py +196 -0
- protokit-0.7.0/tests/schema/lint/test_perf_smoke_coverage.py +320 -0
- protokit-0.7.0/tests/schema/lint/test_protoxy_option_value_encoding_contract.py +205 -0
- protokit-0.7.0/tests/schema/lint/test_pyproject_custom_annotation.py +555 -0
- protokit-0.7.0/tests/schema/lint/test_r9b_precedence.py +282 -0
- protokit-0.7.0/tests/schema/lint/test_r9b_warnings.py +150 -0
- protokit-0.7.0/tests/schema/lint/test_walk_coverage.py +299 -0
- protokit-0.7.0/tests/schema/test_checker.py +1103 -0
- protokit-0.7.0/tests/schema/test_cli.py +1583 -0
- protokit-0.7.0/tests/schema/test_git.py +562 -0
- protokit-0.7.0/tests/schema/test_model.py +320 -0
- protokit-0.7.0/tests/schema/test_plugins.py +537 -0
- protokit-0.7.0/tests/schema/test_profiles.py +234 -0
- protokit-0.7.0/tests/schema/test_pytest_plugin.py +186 -0
- protokit-0.7.0/tests/schema/test_rules.py +986 -0
- protokit-0.7.0/tests/test_buf_parity_pin_drift.py +176 -0
- protokit-0.7.0/tests/test_builtin_lint_formatter.py +1158 -0
- protokit-0.7.0/tests/test_builtin_lint_runtime_warnings.py +505 -0
- protokit-0.7.0/tests/test_bytes.py +71 -0
- protokit-0.7.0/tests/test_changelog_delivery_presence_ratchet.py +124 -0
- protokit-0.7.0/tests/test_cli.py +398 -0
- protokit-0.7.0/tests/test_cli_utils.py +390 -0
- protokit-0.7.0/tests/test_cross_pool.py +169 -0
- protokit-0.7.0/tests/test_defaults.py +111 -0
- protokit-0.7.0/tests/test_descriptors.py +235 -0
- protokit-0.7.0/tests/test_diff_result.py +198 -0
- protokit-0.7.0/tests/test_enums.py +91 -0
- protokit-0.7.0/tests/test_field_path.py +181 -0
- protokit-0.7.0/tests/test_float_comparison.py +123 -0
- protokit-0.7.0/tests/test_formatters_builtin.py +339 -0
- protokit-0.7.0/tests/test_formatters_cli.py +718 -0
- protokit-0.7.0/tests/test_formatters_integration.py +273 -0
- protokit-0.7.0/tests/test_formatters_junit.py +533 -0
- protokit-0.7.0/tests/test_formatters_registry.py +287 -0
- protokit-0.7.0/tests/test_formatters_sarif.py +349 -0
- protokit-0.7.0/tests/test_hooks.py +790 -0
- protokit-0.7.0/tests/test_ignore_fields.py +146 -0
- protokit-0.7.0/tests/test_maps.py +237 -0
- protokit-0.7.0/tests/test_nested.py +138 -0
- protokit-0.7.0/tests/test_oneof.py +112 -0
- protokit-0.7.0/tests/test_options.py +197 -0
- protokit-0.7.0/tests/test_proto_builder.py +107 -0
- protokit-0.7.0/tests/test_pytest_plugin.py +131 -0
- protokit-0.7.0/tests/test_repeated.py +142 -0
- protokit-0.7.0/tests/test_scalars.py +113 -0
- protokit-0.7.0/tests/test_schema_evolution.py +276 -0
- protokit-0.7.0/tests/test_static_analysis.py +128 -0
- protokit-0.7.0/tests/test_treat_as_map.py +288 -0
- protokit-0.7.0/tests/test_uxd_philosophy_principle_presence_ratchet.py +92 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# D6a U8 Phase B+C — buf release watcher.
|
|
2
|
+
#
|
|
3
|
+
# Scheduled workflow that monitors `bufbuild/buf` for newer stable
|
|
4
|
+
# releases than the version pinned in
|
|
5
|
+
# `src/protokit/schema/lint/cli.py` via `_BUF_PARITY_PIN`. When the
|
|
6
|
+
# upstream stable tag is ahead of the pin, opens (or updates) a
|
|
7
|
+
# tracking issue titled exactly `"buf parity pin behind upstream"`.
|
|
8
|
+
#
|
|
9
|
+
# ----- Rationale (KTD-11 of the U8 plan) -----
|
|
10
|
+
#
|
|
11
|
+
# The parity job (in ci.yml) is advisory and runs against a pinned
|
|
12
|
+
# buf version. Buf may ship a new release at any time with deprecated
|
|
13
|
+
# / renamed / added BASIC rules; without surveillance, the pin would
|
|
14
|
+
# silently rot. This watcher decouples buf's release cadence from PR
|
|
15
|
+
# throughput: pin bumps become discrete tasks (a "buf parity pin
|
|
16
|
+
# upgrade" PR a maintainer lands), not pressure on the current PR's
|
|
17
|
+
# reviewers.
|
|
18
|
+
#
|
|
19
|
+
# ----- Schedule + dispatch -----
|
|
20
|
+
#
|
|
21
|
+
# Weekly cron on Mondays at 13:00 UTC (early Pacific morning,
|
|
22
|
+
# mid-day European working hours). `workflow_dispatch` lets a
|
|
23
|
+
# maintainer trigger the watcher manually after a known upstream
|
|
24
|
+
# release.
|
|
25
|
+
#
|
|
26
|
+
# ----- Permissions -----
|
|
27
|
+
#
|
|
28
|
+
# `issues: write` to create / edit the tracking issue.
|
|
29
|
+
# `contents: read` to read the constant from cli.py.
|
|
30
|
+
# Uses the default `GITHUB_TOKEN`; no secrets needed.
|
|
31
|
+
|
|
32
|
+
name: buf-release-watch
|
|
33
|
+
|
|
34
|
+
on:
|
|
35
|
+
schedule:
|
|
36
|
+
# Mondays 13:00 UTC.
|
|
37
|
+
- cron: '0 13 * * 1'
|
|
38
|
+
workflow_dispatch:
|
|
39
|
+
|
|
40
|
+
permissions:
|
|
41
|
+
issues: write
|
|
42
|
+
contents: read
|
|
43
|
+
|
|
44
|
+
# Two simultaneous workflow_dispatch invocations would otherwise both
|
|
45
|
+
# pass the "no open issue" check and both create a tracking issue —
|
|
46
|
+
# yielding duplicates. Serializing via concurrency-group makes the
|
|
47
|
+
# check + create + edit pipeline atomic relative to other watcher runs.
|
|
48
|
+
concurrency:
|
|
49
|
+
group: buf-release-watch
|
|
50
|
+
cancel-in-progress: false
|
|
51
|
+
|
|
52
|
+
jobs:
|
|
53
|
+
check-buf-release:
|
|
54
|
+
runs-on: ubuntu-latest
|
|
55
|
+
|
|
56
|
+
# Cap the job: gh API calls can stall at the TCP layer (connection
|
|
57
|
+
# accepted, no response) which set -euo pipefail cannot detect.
|
|
58
|
+
# 10 minutes is generous for a few gh REST calls + grep + jq.
|
|
59
|
+
timeout-minutes: 10
|
|
60
|
+
|
|
61
|
+
steps:
|
|
62
|
+
- name: Checkout
|
|
63
|
+
uses: actions/checkout@v4
|
|
64
|
+
|
|
65
|
+
- name: Query upstream latest stable release
|
|
66
|
+
id: upstream
|
|
67
|
+
env:
|
|
68
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
69
|
+
# `gh release list` returns the 5 most recent releases with
|
|
70
|
+
# the isLatest / isPrerelease metadata. `jq` filters to the
|
|
71
|
+
# one tagged latest AND not a pre-release. If buf has shipped
|
|
72
|
+
# only pre-releases recently, this returns empty and the
|
|
73
|
+
# subsequent step exits cleanly without opening an issue.
|
|
74
|
+
run: |
|
|
75
|
+
set -euo pipefail
|
|
76
|
+
gh release list \
|
|
77
|
+
-R bufbuild/buf \
|
|
78
|
+
--limit 5 \
|
|
79
|
+
--json tagName,isLatest,isPrerelease,publishedAt \
|
|
80
|
+
> releases.json
|
|
81
|
+
latest_tag=$(
|
|
82
|
+
jq -r '.[] | select(.isLatest == true and .isPrerelease == false) | .tagName' \
|
|
83
|
+
releases.json | head -n 1
|
|
84
|
+
)
|
|
85
|
+
published=$(
|
|
86
|
+
jq -r '.[] | select(.isLatest == true and .isPrerelease == false) | .publishedAt' \
|
|
87
|
+
releases.json | head -n 1
|
|
88
|
+
)
|
|
89
|
+
if [ -z "$latest_tag" ]; then
|
|
90
|
+
echo "no stable release found in last 5 entries; nothing to do"
|
|
91
|
+
echo "skip=true" >> "$GITHUB_OUTPUT"
|
|
92
|
+
exit 0
|
|
93
|
+
fi
|
|
94
|
+
echo "latest_tag=$latest_tag" >> "$GITHUB_OUTPUT"
|
|
95
|
+
echo "published=$published" >> "$GITHUB_OUTPUT"
|
|
96
|
+
echo "skip=false" >> "$GITHUB_OUTPUT"
|
|
97
|
+
|
|
98
|
+
- name: Read pinned buf version from cli.py
|
|
99
|
+
id: pinned
|
|
100
|
+
if: steps.upstream.outputs.skip != 'true'
|
|
101
|
+
# Greps `_BUF_PARITY_PIN: <ANNOTATION> = "v1.69.0"` and
|
|
102
|
+
# extracts the quoted version. The annotation segment uses
|
|
103
|
+
# ``[^=]+`` so the grep tolerates any shape between ``:`` and
|
|
104
|
+
# ``=`` (str, Final[str], etc.) — matches the regex in
|
|
105
|
+
# tests/test_buf_parity_pin_drift.py so both consumers agree
|
|
106
|
+
# on the same line shape.
|
|
107
|
+
run: |
|
|
108
|
+
set -euo pipefail
|
|
109
|
+
pin=$(
|
|
110
|
+
grep -E '^_BUF_PARITY_PIN\s*:[^=]+=\s*"v[^"]+"' \
|
|
111
|
+
src/protokit/schema/lint/cli.py \
|
|
112
|
+
| head -n 1 \
|
|
113
|
+
| sed -E 's/^[^"]*"(v[^"]+)".*/\1/'
|
|
114
|
+
)
|
|
115
|
+
if [ -z "$pin" ]; then
|
|
116
|
+
echo "could not extract _BUF_PARITY_PIN from cli.py; aborting"
|
|
117
|
+
exit 1
|
|
118
|
+
fi
|
|
119
|
+
echo "pin=$pin" >> "$GITHUB_OUTPUT"
|
|
120
|
+
|
|
121
|
+
- name: Compare pin against upstream
|
|
122
|
+
id: compare
|
|
123
|
+
if: steps.upstream.outputs.skip != 'true'
|
|
124
|
+
# Route step outputs through ``env:`` rather than inlining
|
|
125
|
+
# ``${{ }}`` expressions into the shell script. GH Actions
|
|
126
|
+
# evaluates ``${{ }}`` at YAML template expansion time
|
|
127
|
+
# BEFORE bash sees the script — surrounding single quotes
|
|
128
|
+
# are bash quoting, not GH-template quoting, so a value
|
|
129
|
+
# containing a single quote would break out of the shell
|
|
130
|
+
# context and inject commands. Today's `pin` (regex-
|
|
131
|
+
# constrained source) and `latest` (git tag name) cannot
|
|
132
|
+
# contain single quotes in practice, but the ``env:``
|
|
133
|
+
# pattern is the canonical GH Actions mitigation and matches
|
|
134
|
+
# what the "Find or create" step below already does.
|
|
135
|
+
env:
|
|
136
|
+
PIN: ${{ steps.pinned.outputs.pin }}
|
|
137
|
+
LATEST: ${{ steps.upstream.outputs.latest_tag }}
|
|
138
|
+
run: |
|
|
139
|
+
set -euo pipefail
|
|
140
|
+
if [ "$PIN" = "$LATEST" ]; then
|
|
141
|
+
echo "pin ($PIN) matches upstream ($LATEST); no action needed"
|
|
142
|
+
echo "behind=false" >> "$GITHUB_OUTPUT"
|
|
143
|
+
else
|
|
144
|
+
echo "pin ($PIN) is behind upstream latest ($LATEST)"
|
|
145
|
+
echo "behind=true" >> "$GITHUB_OUTPUT"
|
|
146
|
+
fi
|
|
147
|
+
|
|
148
|
+
- name: Find or create tracking issue
|
|
149
|
+
if: steps.upstream.outputs.skip != 'true' && steps.compare.outputs.behind == 'true'
|
|
150
|
+
env:
|
|
151
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
152
|
+
PIN: ${{ steps.pinned.outputs.pin }}
|
|
153
|
+
LATEST: ${{ steps.upstream.outputs.latest_tag }}
|
|
154
|
+
PUBLISHED: ${{ steps.upstream.outputs.published }}
|
|
155
|
+
# GitHub search (`in:title`) is full-text and case-insensitive,
|
|
156
|
+
# not strict-equality. So we query, then POST-FILTER in jq for
|
|
157
|
+
# an exact title match before deciding create-vs-update. This
|
|
158
|
+
# avoids accidentally matching an issue titled
|
|
159
|
+
# `"buf parity pin behind upstream (manual override)"` or
|
|
160
|
+
# similar variant.
|
|
161
|
+
run: |
|
|
162
|
+
set -euo pipefail
|
|
163
|
+
title='buf parity pin behind upstream'
|
|
164
|
+
body=$(cat <<EOF
|
|
165
|
+
The pinned buf version is behind the latest upstream stable release.
|
|
166
|
+
|
|
167
|
+
- **Current pin**: \`$PIN\` (in \`src/protokit/schema/lint/cli.py\` and \`.github/workflows/ci.yml\`)
|
|
168
|
+
- **Latest stable**: \`$LATEST\` (released \`$PUBLISHED\`)
|
|
169
|
+
- **Release notes**: <https://github.com/bufbuild/buf/releases/tag/$LATEST>
|
|
170
|
+
|
|
171
|
+
## Bump procedure
|
|
172
|
+
|
|
173
|
+
1. Update \`_BUF_PARITY_PIN\` in \`src/protokit/schema/lint/cli.py\` to \`$LATEST\`.
|
|
174
|
+
2. Update the curl URLs in \`.github/workflows/ci.yml\`'s parity job
|
|
175
|
+
(\`releases/download/$LATEST/buf-Linux-x86_64.tar.gz\` + \`sha256.txt\`).
|
|
176
|
+
3. Run \`tests/test_buf_parity_pin_drift.py\` locally — it asserts
|
|
177
|
+
both sites reference the same version.
|
|
178
|
+
4. Inspect buf's release notes for BASIC rule deprecations / renames / additions:
|
|
179
|
+
- Run \`buf config ls-lint-rules --version v2 --include-deprecated --format json\`
|
|
180
|
+
against the new buf binary and compare against the harness's
|
|
181
|
+
\`_BUF_DEPRECATED_RULES\` set in \`tests/parity/conftest.py\`.
|
|
182
|
+
- Update \`_BUF_DEPRECATED_RULES\` if any rule we ship parity for has been
|
|
183
|
+
deprecated, and add a docstring annotation on the corresponding protokit
|
|
184
|
+
rule per the upstream-rule-deprecation discipline.
|
|
185
|
+
- Refresh \`tests/parity/fixtures/\` if any rule was renamed.
|
|
186
|
+
5. Land the bump as a single PR with the CHANGELOG entry.
|
|
187
|
+
|
|
188
|
+
This issue is auto-generated by \`.github/workflows/buf-release-watch.yml\` and will
|
|
189
|
+
be updated in place on subsequent runs while the pin remains behind upstream.
|
|
190
|
+
Close it after the bump PR merges.
|
|
191
|
+
EOF
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
# gh issue list returns JSON; jq post-filters for exact title.
|
|
195
|
+
existing=$(
|
|
196
|
+
gh issue list \
|
|
197
|
+
--state open \
|
|
198
|
+
--search "in:title \"$title\"" \
|
|
199
|
+
--json number,title \
|
|
200
|
+
| jq -r --arg title "$title" '.[] | select(.title == $title) | .number' \
|
|
201
|
+
| head -n 1
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
if [ -n "$existing" ]; then
|
|
205
|
+
echo "updating existing tracking issue #$existing"
|
|
206
|
+
gh issue edit "$existing" --body "$body"
|
|
207
|
+
else
|
|
208
|
+
echo "opening new tracking issue"
|
|
209
|
+
gh issue create --title "$title" --body "$body"
|
|
210
|
+
fi
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# protokit CI — initial workflow landed 2026-05-01.
|
|
2
|
+
#
|
|
3
|
+
# Matrix axes:
|
|
4
|
+
#
|
|
5
|
+
# - python: 3.10 (project floor) and 3.12 (project ceiling). 3.11 is
|
|
6
|
+
# intentionally NOT in the matrix — the only currently-load-bearing
|
|
7
|
+
# distinction (tomllib stdlib branch) is shared with 3.12. Adding
|
|
8
|
+
# 3.11 later when a 3.11-specific issue surfaces is a one-line change
|
|
9
|
+
# to this file.
|
|
10
|
+
#
|
|
11
|
+
# - has_protoxy: true installs the optional `[compiler]` extra
|
|
12
|
+
# (protoxy 0.7+); false skips it. Tests that integration-test the
|
|
13
|
+
# protoxy backend gate via `pytest.mark.skipif(not _has_protoxy())`
|
|
14
|
+
# (see tests/test_cli_utils.py header for the convention).
|
|
15
|
+
# System protoc is installed on EVERY cell so the protoc-only path
|
|
16
|
+
# always runs; the `has_protoxy` axis only controls protoxy.
|
|
17
|
+
#
|
|
18
|
+
# Apt-shipped protoc on ubuntu-latest is currently 3.21.x — sufficient
|
|
19
|
+
# for proto3 fixtures. If a future release introduces Edition 2023
|
|
20
|
+
# fixtures, switch this step to a binary download from the protocolbuffers
|
|
21
|
+
# release bucket pinned to v25+.
|
|
22
|
+
|
|
23
|
+
name: ci
|
|
24
|
+
|
|
25
|
+
on:
|
|
26
|
+
push:
|
|
27
|
+
branches: [main]
|
|
28
|
+
pull_request:
|
|
29
|
+
branches: [main]
|
|
30
|
+
|
|
31
|
+
jobs:
|
|
32
|
+
test:
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
# Explicit job-level cap as a secondary safety net beyond the
|
|
35
|
+
# 30s per-subprocess guard in
|
|
36
|
+
# tests/_buf_helpers.py:run_buf_subprocess. Empirical timing:
|
|
37
|
+
# full suite ~15s. 30 minutes leaves ~120x the empirical wall-
|
|
38
|
+
# time, with headroom for cold CI runners while guarding against
|
|
39
|
+
# future deadlock scenarios.
|
|
40
|
+
timeout-minutes: 30
|
|
41
|
+
|
|
42
|
+
strategy:
|
|
43
|
+
fail-fast: false
|
|
44
|
+
matrix:
|
|
45
|
+
python: ["3.10", "3.12"]
|
|
46
|
+
has_protoxy: [true, false]
|
|
47
|
+
|
|
48
|
+
steps:
|
|
49
|
+
- name: Checkout
|
|
50
|
+
uses: actions/checkout@v4
|
|
51
|
+
|
|
52
|
+
- name: Set up Python ${{ matrix.python }}
|
|
53
|
+
uses: actions/setup-python@v5
|
|
54
|
+
with:
|
|
55
|
+
python-version: ${{ matrix.python }}
|
|
56
|
+
|
|
57
|
+
- name: Install system protoc
|
|
58
|
+
run: |
|
|
59
|
+
sudo apt-get update
|
|
60
|
+
sudo apt-get install -y protobuf-compiler
|
|
61
|
+
|
|
62
|
+
- name: Install package + dev deps (with protoxy)
|
|
63
|
+
if: matrix.has_protoxy
|
|
64
|
+
run: pip install -e ".[compiler,dev]"
|
|
65
|
+
|
|
66
|
+
- name: Install package + dev deps (without protoxy)
|
|
67
|
+
if: ${{ !matrix.has_protoxy }}
|
|
68
|
+
run: pip install -e ".[dev]"
|
|
69
|
+
|
|
70
|
+
- name: Sanity — protoxy must be ABSENT on has_protoxy=false cells
|
|
71
|
+
# Cheap insurance against the matrix collapsing to an effective
|
|
72
|
+
# single cell. If a dev dep transitively pulled protoxy in, the
|
|
73
|
+
# has_protoxy=false cell would silently exercise both backends,
|
|
74
|
+
# defeating the matrix.
|
|
75
|
+
if: ${{ !matrix.has_protoxy }}
|
|
76
|
+
run: |
|
|
77
|
+
if pip list --format=freeze | grep -i '^protoxy='; then
|
|
78
|
+
echo "FAIL: protoxy is installed on a has_protoxy=false cell;"
|
|
79
|
+
echo " a dev dep is transitively pulling it in."
|
|
80
|
+
exit 1
|
|
81
|
+
fi
|
|
82
|
+
echo "OK: protoxy absent on has_protoxy=false cell"
|
|
83
|
+
|
|
84
|
+
- name: Cold-import smoke test
|
|
85
|
+
# Validates the cold-import contract for `protokit compat`:
|
|
86
|
+
# importing `protokit.schema` MUST NOT transitively load
|
|
87
|
+
# `protokit.schema.lint`, `protokit.schema.compile`, OR
|
|
88
|
+
# `protokit.formatters._builtin_lint`. The compile module's
|
|
89
|
+
# placement (LintCompileDiagnostic lives there rather than
|
|
90
|
+
# in lint/model.py per S2-2) only preserves the contract if
|
|
91
|
+
# `protokit.schema` itself doesn't pull compile in eagerly.
|
|
92
|
+
# The `_builtin_lint` module lives under `protokit.formatters`
|
|
93
|
+
# (not `protokit.schema.lint`) so the substring match below
|
|
94
|
+
# would miss it without the explicit exact-match — it
|
|
95
|
+
# registers all four lint formatters at module load time and
|
|
96
|
+
# MUST stay quarantined behind the lint subcommand entry
|
|
97
|
+
# point per the lint-quarantine invariant. A regression in any future
|
|
98
|
+
# delivery that adds an eager import of any of these surfaces
|
|
99
|
+
# here.
|
|
100
|
+
#
|
|
101
|
+
# NOTE: this is a SNAPSHOT of today's transitive imports; future
|
|
102
|
+
# deliveries that add eager imports may need to update this
|
|
103
|
+
# assertion target. Mirrored in
|
|
104
|
+
# tests/schema/lint/test_cold_import_extended.py for
|
|
105
|
+
# local feedback before push.
|
|
106
|
+
run: |
|
|
107
|
+
python -c "
|
|
108
|
+
import protokit.schema
|
|
109
|
+
import sys
|
|
110
|
+
eager = sorted(
|
|
111
|
+
k for k in sys.modules
|
|
112
|
+
if 'protokit.schema.lint' in k
|
|
113
|
+
or k == 'protokit.schema.compile'
|
|
114
|
+
or k == 'protokit.formatters._builtin_lint'
|
|
115
|
+
)
|
|
116
|
+
assert not eager, f'lazy-load contract broken: {eager}'
|
|
117
|
+
print('cold-import OK')
|
|
118
|
+
"
|
|
119
|
+
|
|
120
|
+
- name: Run mypy (scoped to ratcheted surface)
|
|
121
|
+
# Strict-mode mypy is configured in pyproject.toml but the
|
|
122
|
+
# broader codebase has ~30 pre-existing strict-mode errors.
|
|
123
|
+
# This step gates ONLY the modules currently in
|
|
124
|
+
# tests/test_static_analysis.py:_TYPE_CHECK_PATHS — the lockstep
|
|
125
|
+
# is enforced by that test (any divergence between this list
|
|
126
|
+
# and the ratchet trips the ratchet test). Future deliveries
|
|
127
|
+
# widen the scope by extending BOTH the path list here AND
|
|
128
|
+
# _TYPE_CHECK_PATHS in tests/test_static_analysis.py.
|
|
129
|
+
run: |
|
|
130
|
+
python -m mypy \
|
|
131
|
+
src/protokit/_cli_utils.py \
|
|
132
|
+
src/protokit/formatters/_builtin_lint.py \
|
|
133
|
+
src/protokit/schema/compile.py \
|
|
134
|
+
src/protokit/schema/lint/
|
|
135
|
+
|
|
136
|
+
- name: Run test suite
|
|
137
|
+
run: pytest tests/ -v
|
|
138
|
+
|
|
139
|
+
# =====================================================================
|
|
140
|
+
# Parity job — buf v1.69.0 cross-tool parity checks.
|
|
141
|
+
# =====================================================================
|
|
142
|
+
#
|
|
143
|
+
# Runs every buf-equivalent protokit lint rule's fixture through both
|
|
144
|
+
# `protokit lint` and `buf lint` and asserts equivalent findings.
|
|
145
|
+
# See tests/parity/conftest.py for the harness; the parity-test
|
|
146
|
+
# infrastructure design is documented in the project's design notes.
|
|
147
|
+
#
|
|
148
|
+
# ----- Advisory posture (DO NOT add to required-checks) -----
|
|
149
|
+
#
|
|
150
|
+
# This job is INTENTIONALLY ADVISORY per D6a U8 plan KTD-9 / J2. When
|
|
151
|
+
# branch protection is configured for `main`, the parity job MUST NOT
|
|
152
|
+
# be included in any required-checks rule. Buf releases independently
|
|
153
|
+
# of protokit and can deprecate / rename rules on its own cadence;
|
|
154
|
+
# a parity divergence is a signal to file as a follow-up (handled by
|
|
155
|
+
# buf-release-watch.yml), not a blocker on the current PR.
|
|
156
|
+
#
|
|
157
|
+
# GitHub's branch-protection UI defaults to listing every check that
|
|
158
|
+
# has run, so a contributor enabling protection may include `parity`
|
|
159
|
+
# by accident. If you're configuring branch protection, explicitly
|
|
160
|
+
# uncheck this job.
|
|
161
|
+
#
|
|
162
|
+
# ----- Pin discipline -----
|
|
163
|
+
#
|
|
164
|
+
# The buf version pinned below MUST match `_BUF_PARITY_PIN` in
|
|
165
|
+
# src/protokit/schema/lint/cli.py. The default test suite contains
|
|
166
|
+
# tests/test_buf_parity_pin_drift.py which fails locally and in CI
|
|
167
|
+
# before the parity job runs if either pin is bumped without the
|
|
168
|
+
# other.
|
|
169
|
+
parity:
|
|
170
|
+
runs-on: ubuntu-latest
|
|
171
|
+
|
|
172
|
+
# Cap the whole job: per-subprocess timeouts in
|
|
173
|
+
# tests/parity/conftest.py guard only the pytest phase; the setup
|
|
174
|
+
# steps (apt, pip, curl) are unprotected. 15 minutes covers a
|
|
175
|
+
# cold runner + slow CDN + full test pass with headroom; a hung
|
|
176
|
+
# step gets killed cleanly without burning a 6-hour default slot.
|
|
177
|
+
timeout-minutes: 15
|
|
178
|
+
|
|
179
|
+
steps:
|
|
180
|
+
- name: Checkout
|
|
181
|
+
uses: actions/checkout@v4
|
|
182
|
+
|
|
183
|
+
- name: Set up Python 3.12
|
|
184
|
+
uses: actions/setup-python@v5
|
|
185
|
+
with:
|
|
186
|
+
python-version: "3.12"
|
|
187
|
+
|
|
188
|
+
- name: Install system protoc
|
|
189
|
+
# Mirrors the protoc install in the `test` job above. The
|
|
190
|
+
# parity tests invoke `protokit lint --proto` which compiles
|
|
191
|
+
# .proto source via protoxy (primary) or protoc (fallback);
|
|
192
|
+
# apt-shipped protoc on ubuntu-latest is sufficient for the
|
|
193
|
+
# proto3 fixtures in tests/parity/fixtures/.
|
|
194
|
+
run: |
|
|
195
|
+
sudo apt-get update
|
|
196
|
+
sudo apt-get install -y protobuf-compiler
|
|
197
|
+
|
|
198
|
+
- name: Install package + dev deps (with compiler extra)
|
|
199
|
+
run: pip install -e ".[compiler,dev]"
|
|
200
|
+
|
|
201
|
+
- name: Download buf v1.69.0 tarball + checksum
|
|
202
|
+
# Asset name is `buf-Linux-x86_64.tar.gz` (capital L) and the
|
|
203
|
+
# combined checksum file is `sha256.txt` (one file listing all
|
|
204
|
+
# release assets). The downloaded tarball MUST be saved under
|
|
205
|
+
# the canonical filename — `sha256sum -c -` reads filenames
|
|
206
|
+
# from the .sha256 line and re-hashes from CWD, so a mismatched
|
|
207
|
+
# local name would fail the verification step with
|
|
208
|
+
# "buf-Linux-x86_64.tar.gz: No such file or directory".
|
|
209
|
+
#
|
|
210
|
+
# `-f` fails on HTTP errors (404 from a stale tag fails the
|
|
211
|
+
# step rather than writing an HTML 404 body into the tarball);
|
|
212
|
+
# `-sS` quiet but surface errors; `-L` follow redirects (the
|
|
213
|
+
# GitHub release CDN redirects); `--connect-timeout 30` caps
|
|
214
|
+
# the TCP handshake; `--max-time 120` bounds the full transfer
|
|
215
|
+
# so a stalled CDN connection fails cleanly rather than holding
|
|
216
|
+
# the step open until the job-level timeout-minutes fires.
|
|
217
|
+
#
|
|
218
|
+
# When bumping the version: update BOTH this curl URL AND
|
|
219
|
+
# _BUF_PARITY_PIN in src/protokit/schema/lint/cli.py. The
|
|
220
|
+
# tests/test_buf_parity_pin_drift.py drift-check enforces this.
|
|
221
|
+
run: |
|
|
222
|
+
curl -fsSL --connect-timeout 30 --max-time 120 \
|
|
223
|
+
-o buf-Linux-x86_64.tar.gz \
|
|
224
|
+
https://github.com/bufbuild/buf/releases/download/v1.69.0/buf-Linux-x86_64.tar.gz
|
|
225
|
+
curl -fsSL --connect-timeout 30 --max-time 60 \
|
|
226
|
+
-o sha256.txt \
|
|
227
|
+
https://github.com/bufbuild/buf/releases/download/v1.69.0/sha256.txt
|
|
228
|
+
|
|
229
|
+
- name: Verify buf SHA-256 checksum
|
|
230
|
+
# NON-OPTIONAL supply-chain hardening. A skipped or commented-out
|
|
231
|
+
# checksum step is a P1 review block: a compromised GitHub
|
|
232
|
+
# release artifact would otherwise ship arbitrary code into
|
|
233
|
+
# this CI runner. The grep filter selects the line matching the
|
|
234
|
+
# canonical filename; sha256sum reads that line from stdin and
|
|
235
|
+
# re-hashes the local file with the matching name.
|
|
236
|
+
#
|
|
237
|
+
# ``--strict`` exits non-zero on improperly-formatted lines.
|
|
238
|
+
# Without it, a future buf release that changes sha256.txt
|
|
239
|
+
# format (different separator, missing hash column) could
|
|
240
|
+
# produce a line that matches the grep anchor but fails
|
|
241
|
+
# parsing — sha256sum emits a WARNING and exits 0, silently
|
|
242
|
+
# bypassing the verification. ``--strict`` makes the malformed-
|
|
243
|
+
# line case a hard failure.
|
|
244
|
+
run: |
|
|
245
|
+
grep " buf-Linux-x86_64.tar.gz$" sha256.txt | sha256sum --strict -c -
|
|
246
|
+
|
|
247
|
+
- name: Extract and install buf
|
|
248
|
+
run: |
|
|
249
|
+
tar -xzf buf-Linux-x86_64.tar.gz
|
|
250
|
+
sudo mv buf/bin/buf /usr/local/bin/buf
|
|
251
|
+
sudo chmod +x /usr/local/bin/buf
|
|
252
|
+
|
|
253
|
+
- name: Sanity — buf invocation succeeds
|
|
254
|
+
# Fail fast if the install is broken (e.g., wrong arch tarball,
|
|
255
|
+
# missing libc, etc.) before pytest starts.
|
|
256
|
+
run: buf --version
|
|
257
|
+
|
|
258
|
+
- name: Run parity tests
|
|
259
|
+
env:
|
|
260
|
+
BUF_BINARY: /usr/local/bin/buf
|
|
261
|
+
run: pytest tests/parity/ -m parity -v
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.py[cod]
|
|
3
|
+
*$py.class
|
|
4
|
+
*.egg-info/
|
|
5
|
+
dist/
|
|
6
|
+
build/
|
|
7
|
+
.eggs/
|
|
8
|
+
*.egg
|
|
9
|
+
.mypy_cache/
|
|
10
|
+
.pytest_cache/
|
|
11
|
+
.ruff_cache/
|
|
12
|
+
.venv/
|
|
13
|
+
venv/
|
|
14
|
+
*.so
|
|
15
|
+
*.bak
|
|
16
|
+
.env
|
|
17
|
+
**/.DS_Store
|
|
18
|
+
|
|
19
|
+
# compound-engineering workflow artifacts and per-run state —
|
|
20
|
+
# not part of the codebase
|
|
21
|
+
.context/
|
|
22
|
+
.claude/
|
|
23
|
+
|
|
24
|
+
# Internal planning artifacts live in marc-chiesa/protokit-internal
|
|
25
|
+
# (private). These paths are listed here so `git add .` cannot
|
|
26
|
+
# accidentally re-add them to the public repo.
|
|
27
|
+
TODOS.md
|
|
28
|
+
CLAUDE.md
|
|
29
|
+
CHANGELOG-DRAFT.md
|
|
30
|
+
docs/brainstorms/
|
|
31
|
+
docs/plans/
|