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.
Files changed (603) hide show
  1. protokit-0.7.0/.github/workflows/buf-release-watch.yml +210 -0
  2. protokit-0.7.0/.github/workflows/ci.yml +261 -0
  3. protokit-0.7.0/.gitignore +31 -0
  4. protokit-0.7.0/CHANGELOG.md +2041 -0
  5. protokit-0.7.0/CONTRIBUTING.md +86 -0
  6. protokit-0.7.0/LICENSE +21 -0
  7. protokit-0.7.0/PKG-INFO +1507 -0
  8. protokit-0.7.0/README.md +1466 -0
  9. protokit-0.7.0/docs/solutions/best-practices/apply-institutional-learnings-postdating-plan-during-ce-review-2026-05-09.md +493 -0
  10. protokit-0.7.0/docs/solutions/best-practices/audit-trail-correction-as-changelog-subsection-2026-05-19.md +198 -0
  11. protokit-0.7.0/docs/solutions/best-practices/audit-wire-format-before-claiming-sibling-parity-2026-05-03.md +467 -0
  12. protokit-0.7.0/docs/solutions/best-practices/bound-method-self-extraction-rule-to-engine-callback-2026-05-20.md +205 -0
  13. protokit-0.7.0/docs/solutions/best-practices/buf-parity-divergence-documentation-discipline-2026-05-13.md +269 -0
  14. protokit-0.7.0/docs/solutions/best-practices/builtin-packs-expansion-changelog-migration-recipe-structure-2026-05-18.md +272 -0
  15. protokit-0.7.0/docs/solutions/best-practices/capture-setup-without-dispatch-false-test-confidence-2026-05-17.md +221 -0
  16. protokit-0.7.0/docs/solutions/best-practices/ce-review-convergence-rescues-sub-threshold-findings-2026-05-17.md +505 -0
  17. protokit-0.7.0/docs/solutions/best-practices/ce-review-cross-reviewer-agreement-shared-misreading-false-positive-amplifier-2026-05-14.md +137 -0
  18. protokit-0.7.0/docs/solutions/best-practices/changelog-readme-snippet-fixture-byte-equivalence-2026-05-21.md +200 -0
  19. protokit-0.7.0/docs/solutions/best-practices/circular-import-type-checking-cycle-break-2026-05-11.md +223 -0
  20. protokit-0.7.0/docs/solutions/best-practices/cli-fixture-proto-hygiene-must-satisfy-builtin-packs-2026-05-13.md +214 -0
  21. protokit-0.7.0/docs/solutions/best-practices/cli-overrides-deferred-key-notimplemented-trip-wire-2026-05-12.md +230 -0
  22. protokit-0.7.0/docs/solutions/best-practices/click-parameter-source-detection-cli-config-precedence-2026-05-11.md +444 -0
  23. protokit-0.7.0/docs/solutions/best-practices/clirunner-catch-exceptions-false-explicit-discipline-2026-05-21.md +197 -0
  24. protokit-0.7.0/docs/solutions/best-practices/closed-literal-discriminator-bump-trigger-2026-05-17.md +256 -0
  25. protokit-0.7.0/docs/solutions/best-practices/conftest-plain-function-relative-import-2026-05-12.md +314 -0
  26. protokit-0.7.0/docs/solutions/best-practices/copytoproto-round-trip-for-proto-form-only-descriptor-fields-2026-05-13.md +323 -0
  27. protokit-0.7.0/docs/solutions/best-practices/cross-file-pin-regex-anchor-structure-not-annotation-token-2026-05-13.md +239 -0
  28. protokit-0.7.0/docs/solutions/best-practices/cross-format-enum-string-parity-2026-05-08.md +425 -0
  29. 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
  30. protokit-0.7.0/docs/solutions/best-practices/delivery-boundary-bundled-commit-feat-plus-review-followups-2026-05-21.md +184 -0
  31. protokit-0.7.0/docs/solutions/best-practices/delivery-boundary-unit-commit-composition-2026-05-14.md +297 -0
  32. protokit-0.7.0/docs/solutions/best-practices/deprecationwarning-poisons-except-exception-strict-warning-ci-2026-05-11.md +390 -0
  33. protokit-0.7.0/docs/solutions/best-practices/dict-shaped-message-template-multi-arm-rule-violation-kind-2026-05-19.md +353 -0
  34. protokit-0.7.0/docs/solutions/best-practices/documented-api-recipe-verify-runnable-2026-05-19.md +276 -0
  35. protokit-0.7.0/docs/solutions/best-practices/dormant-code-changelog-draft-staging-delivery-boundary-2026-05-17.md +270 -0
  36. protokit-0.7.0/docs/solutions/best-practices/dual-ssot-derivation-import-time-drift-guard-2026-05-19.md +147 -0
  37. protokit-0.7.0/docs/solutions/best-practices/dual-view-prewalk-accumulator-cross-file-rule-dispatch-2026-05-19.md +275 -0
  38. protokit-0.7.0/docs/solutions/best-practices/empirical-parity-gate-surfaces-latent-helper-bug-at-implementation-time-2026-05-18.md +266 -0
  39. protokit-0.7.0/docs/solutions/best-practices/expose-finding-params-lint-json-sarif-agent-native-2026-05-19.md +229 -0
  40. protokit-0.7.0/docs/solutions/best-practices/fail-closed-ci-matrix-coverage-meta-test-2026-05-12.md +195 -0
  41. protokit-0.7.0/docs/solutions/best-practices/family-aware-partition-pattern-multi-family-parity-harness-2026-05-19.md +306 -0
  42. protokit-0.7.0/docs/solutions/best-practices/fixture-precondition-assertion-surfaces-silent-test-2026-05-17.md +181 -0
  43. protokit-0.7.0/docs/solutions/best-practices/flat-config-only-single-pyproject-tier-no-inheritance-2026-05-24.md +139 -0
  44. protokit-0.7.0/docs/solutions/best-practices/frozen-dataclass-mutable-fields-need-post-init-snapshot-2026-05-02.md +218 -0
  45. protokit-0.7.0/docs/solutions/best-practices/frozen-dataclass-paired-field-invariant-post-init-2026-05-11.md +235 -0
  46. 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
  47. protokit-0.7.0/docs/solutions/best-practices/migration-recipe-severity-aware-template-reuse-2026-05-21.md +198 -0
  48. protokit-0.7.0/docs/solutions/best-practices/module-import-time-fixture-mapping-fail-loud-blast-radius-2026-05-18.md +147 -0
  49. protokit-0.7.0/docs/solutions/best-practices/module-level-assert-canonicalization-invariant-frozenset-2026-05-20.md +215 -0
  50. protokit-0.7.0/docs/solutions/best-practices/multi-element-fixture-list-disable-coverage-all-kinds-2026-05-25.md +138 -0
  51. protokit-0.7.0/docs/solutions/best-practices/multi-mechanism-fix-docstring-enumerate-each-layer-failure-mode-2026-05-18.md +162 -0
  52. protokit-0.7.0/docs/solutions/best-practices/multi-unit-ce-review-stash-pop-coordination-2026-05-21.md +167 -0
  53. protokit-0.7.0/docs/solutions/best-practices/no-raise-contract-extends-to-post-init-failures-2026-05-14.md +194 -0
  54. protokit-0.7.0/docs/solutions/best-practices/normalize-at-input-boundary-2026-05-07.md +450 -0
  55. protokit-0.7.0/docs/solutions/best-practices/parametrized-matrix-tests-inherit-schema-validators-2026-05-12.md +213 -0
  56. protokit-0.7.0/docs/solutions/best-practices/parity-gate-must-assert-at-design-claim-granularity-2026-05-22.md +153 -0
  57. protokit-0.7.0/docs/solutions/best-practices/per-rule-fixture-symbol-isolation-buf-v2-compile-group-2026-05-13.md +248 -0
  58. protokit-0.7.0/docs/solutions/best-practices/perf-smoke-profile-compose-across-builtin-packs-2026-05-13.md +161 -0
  59. protokit-0.7.0/docs/solutions/best-practices/phase-0-empirical-verification-falsifies-brainstorm-assumption-2026-05-22.md +152 -0
  60. protokit-0.7.0/docs/solutions/best-practices/phase-0-narrowing-rule-reachable-but-narrower-than-brainstorm-assumed-2026-05-22.md +140 -0
  61. protokit-0.7.0/docs/solutions/best-practices/plan-review-verify-prior-art-citations-2026-05-15.md +562 -0
  62. protokit-0.7.0/docs/solutions/best-practices/post-ship-adoption-monitoring-pre-1.0-breaking-default-change-2026-05-19.md +225 -0
  63. protokit-0.7.0/docs/solutions/best-practices/pre-1.0-version-bump-as-communication-contract-2026-05-14.md +325 -0
  64. protokit-0.7.0/docs/solutions/best-practices/pre-promotion-empirical-hit-rate-validation-hard-gate-severity-change-2026-05-25.md +144 -0
  65. protokit-0.7.0/docs/solutions/best-practices/presence-ratchet-pin-canonical-not-local-form-2026-05-23.md +175 -0
  66. protokit-0.7.0/docs/solutions/best-practices/presence-ratchet-test-pattern-for-prose-substrings-2026-05-14.md +510 -0
  67. protokit-0.7.0/docs/solutions/best-practices/programmatic-proto-fixture-builder-multi-file-rule-family-2026-05-17.md +160 -0
  68. protokit-0.7.0/docs/solutions/best-practices/public-surface-draft-discipline-source-audit-2026-05-12.md +170 -0
  69. protokit-0.7.0/docs/solutions/best-practices/pureposixpath-for-proto-descriptor-file-stem-2026-05-12.md +150 -0
  70. protokit-0.7.0/docs/solutions/best-practices/pytest-static-analysis-gate-ratchet-2026-05-02.md +281 -0
  71. protokit-0.7.0/docs/solutions/best-practices/replace-all-substring-collision-rename-contains-old-name-2026-05-19.md +122 -0
  72. protokit-0.7.0/docs/solutions/best-practices/ruff-fix-scope-discipline-pass-diff-files-explicitly-2026-05-21.md +180 -0
  73. protokit-0.7.0/docs/solutions/best-practices/rule-pack-extension-ssot-rule-ids-and-test-class-naming-2026-05-12.md +131 -0
  74. protokit-0.7.0/docs/solutions/best-practices/sarif-rule-catalog-default-configuration-level-severity-contract-2026-05-25.md +175 -0
  75. protokit-0.7.0/docs/solutions/best-practices/semantic-category-conflation-accepted-tradeoff-literal-widening-2026-05-13.md +453 -0
  76. protokit-0.7.0/docs/solutions/best-practices/sentinel-at-coercion-layer-not-enum-widening-2026-05-24.md +219 -0
  77. protokit-0.7.0/docs/solutions/best-practices/shared-error-helper-source-label-caller-attribution-2026-05-11.md +401 -0
  78. protokit-0.7.0/docs/solutions/best-practices/smoke-not-benchmark-loose-threshold-calibration-2026-05-12.md +223 -0
  79. protokit-0.7.0/docs/solutions/best-practices/source-aware-error-messages-multi-source-resolved-value-2026-05-11.md +355 -0
  80. protokit-0.7.0/docs/solutions/best-practices/stale-forward-looking-text-cli-help-agent-discoverability-2026-05-12.md +247 -0
  81. protokit-0.7.0/docs/solutions/best-practices/structural-anchor-test-sha-collision-prone-empty-fixtures-2026-05-19.md +280 -0
  82. protokit-0.7.0/docs/solutions/best-practices/structural-pin-inspect-getsource-untestable-collision-branch-2026-05-13.md +389 -0
  83. protokit-0.7.0/docs/solutions/best-practices/symmetric-coercion-strictness-multi-source-field-resolver-2026-05-12.md +268 -0
  84. protokit-0.7.0/docs/solutions/best-practices/tarjan-scc-iterative-dfs-package-cycle-detection-2026-05-22.md +159 -0
  85. protokit-0.7.0/docs/solutions/best-practices/test-method-names-encode-invariants-not-delivery-deltas-2026-05-13.md +155 -0
  86. protokit-0.7.0/docs/solutions/best-practices/test-proxy-signal-suppressed-by-mechanism-under-test-2026-05-25.md +298 -0
  87. protokit-0.7.0/docs/solutions/best-practices/upstream-rule-deprecation-skip-ordering-parity-harness-2026-05-13.md +296 -0
  88. protokit-0.7.0/docs/solutions/best-practices/value-migrated-vs-value-added-consumer-migration-2026-05-17.md +234 -0
  89. protokit-0.7.0/docs/solutions/best-practices/verify-reviewer-sort-ordering-claims-against-canonical-regen-2026-05-19.md +133 -0
  90. protokit-0.7.0/docs/solutions/best-practices/weakkeydict-plus-id-resettable-attr-per-engine-per-run-state-2026-05-20.md +262 -0
  91. protokit-0.7.0/docs/solutions/best-practices/wire-format-schema-version-bump-contract-and-absence-semantic-2026-05-13.md +452 -0
  92. protokit-0.7.0/docs/solutions/best-practices/worked-example-multi-scenario-test-class-template-2026-05-21.md +363 -0
  93. protokit-0.7.0/docs/solutions/logic-errors/cli-loaded-packs-dedup-zip-strict-builtin-packs-flip-2026-05-18.md +146 -0
  94. protokit-0.7.0/docs/solutions/logic-errors/escape-pair-aware-truncation-dangling-backslash-wire-format-divergence-2026-05-17.md +140 -0
  95. protokit-0.7.0/docs/solutions/logic-errors/inverted-fail-loud-canary-parity-override-unreachable-branch-2026-05-19.md +160 -0
  96. protokit-0.7.0/docs/solutions/logic-errors/matcher-backend-path-resolution-skew-silently-empties-output-2026-05-02.md +144 -0
  97. protokit-0.7.0/docs/solutions/logic-errors/proto3-optional-synthetic-oneof-false-positive-lint-rule-2026-05-12.md +135 -0
  98. protokit-0.7.0/docs/solutions/logic-errors/rules-tuple-insertion-order-load-bearing-engine-dispatch-2026-05-19.md +134 -0
  99. protokit-0.7.0/docs/solutions/logic-errors/subprocess-exit-code-validation-test-harness-2026-05-13.md +296 -0
  100. protokit-0.7.0/docs/solutions/logic-errors/truncation-guard-odd-count-discipline-for-doubled-escape-pairs-2026-05-18.md +139 -0
  101. protokit-0.7.0/docs/solutions/security-issues/formatter-systemexit-exit-code-bypass-2026-04-19.md +372 -0
  102. protokit-0.7.0/docs/solutions/security-issues/github-actions-expression-injection-env-block-mitigation-2026-05-13.md +238 -0
  103. protokit-0.7.0/docs/solutions/security-issues/keyboardinterrupt-baseexception-bypass-rule-pack-load-2026-05-07.md +516 -0
  104. protokit-0.7.0/docs/solutions/security-issues/module-name-newline-injection-stderr-forge-2026-05-07.md +600 -0
  105. protokit-0.7.0/docs/solutions/security-issues/sha256sum-strict-flag-supply-chain-silent-bypass-2026-05-13.md +230 -0
  106. protokit-0.7.0/docs/solutions/test-failures/mock-patch-c-extension-method-descriptor-2026-05-06.md +382 -0
  107. protokit-0.7.0/docs/solutions/test-failures/pytestmark-does-not-guard-module-top-imports-2026-05-02.md +153 -0
  108. protokit-0.7.0/examples/README.md +18 -0
  109. protokit-0.7.0/examples/custom_formatter.py +122 -0
  110. protokit-0.7.0/examples/rule_pack.py +58 -0
  111. protokit-0.7.0/examples/schema_check.py +144 -0
  112. protokit-0.7.0/examples/schema_plugin.py +126 -0
  113. protokit-0.7.0/pyproject.toml +130 -0
  114. protokit-0.7.0/src/protokit/__init__.py +15 -0
  115. protokit-0.7.0/src/protokit/_cli_utils.py +747 -0
  116. protokit-0.7.0/src/protokit/_descriptors.py +147 -0
  117. protokit-0.7.0/src/protokit/cli.py +31 -0
  118. protokit-0.7.0/src/protokit/formatters/__init__.py +85 -0
  119. protokit-0.7.0/src/protokit/formatters/_builtin_bisect.py +195 -0
  120. protokit-0.7.0/src/protokit/formatters/_builtin_compat.py +268 -0
  121. protokit-0.7.0/src/protokit/formatters/_builtin_diff.py +340 -0
  122. protokit-0.7.0/src/protokit/formatters/_builtin_history.py +193 -0
  123. protokit-0.7.0/src/protokit/formatters/_builtin_lint.py +952 -0
  124. protokit-0.7.0/src/protokit/formatters/_junit_xml.py +239 -0
  125. protokit-0.7.0/src/protokit/formatters/_registry.py +337 -0
  126. protokit-0.7.0/src/protokit/formatters/_sarif_json.py +269 -0
  127. protokit-0.7.0/src/protokit/message/__init__.py +56 -0
  128. protokit-0.7.0/src/protokit/message/cli.py +341 -0
  129. protokit-0.7.0/src/protokit/message/comparators.py +175 -0
  130. protokit-0.7.0/src/protokit/message/differ.py +1880 -0
  131. protokit-0.7.0/src/protokit/message/formatting.py +44 -0
  132. protokit-0.7.0/src/protokit/message/model.py +945 -0
  133. protokit-0.7.0/src/protokit/message/pytest_plugin.py +109 -0
  134. protokit-0.7.0/src/protokit/options.py +124 -0
  135. protokit-0.7.0/src/protokit/py.typed +0 -0
  136. protokit-0.7.0/src/protokit/schema/__init__.py +80 -0
  137. protokit-0.7.0/src/protokit/schema/checker.py +829 -0
  138. protokit-0.7.0/src/protokit/schema/cli.py +1651 -0
  139. protokit-0.7.0/src/protokit/schema/compile.py +744 -0
  140. protokit-0.7.0/src/protokit/schema/git.py +830 -0
  141. protokit-0.7.0/src/protokit/schema/lint/__init__.py +9 -0
  142. protokit-0.7.0/src/protokit/schema/lint/_cli_utils.py +635 -0
  143. protokit-0.7.0/src/protokit/schema/lint/_config.py +2405 -0
  144. protokit-0.7.0/src/protokit/schema/lint/_custom_rules.py +513 -0
  145. protokit-0.7.0/src/protokit/schema/lint/_extension_access.py +141 -0
  146. protokit-0.7.0/src/protokit/schema/lint/cli.py +1440 -0
  147. protokit-0.7.0/src/protokit/schema/lint/decorator.py +174 -0
  148. protokit-0.7.0/src/protokit/schema/lint/engine.py +1693 -0
  149. protokit-0.7.0/src/protokit/schema/lint/model.py +1645 -0
  150. protokit-0.7.0/src/protokit/schema/lint/rules/__init__.py +262 -0
  151. protokit-0.7.0/src/protokit/schema/lint/rules/enum.py +116 -0
  152. protokit-0.7.0/src/protokit/schema/lint/rules/field.py +143 -0
  153. protokit-0.7.0/src/protokit/schema/lint/rules/file.py +128 -0
  154. protokit-0.7.0/src/protokit/schema/lint/rules/imports.py +245 -0
  155. protokit-0.7.0/src/protokit/schema/lint/rules/naming.py +318 -0
  156. protokit-0.7.0/src/protokit/schema/lint/rules/options/__init__.py +0 -0
  157. protokit-0.7.0/src/protokit/schema/lint/rules/options/_comments.py +267 -0
  158. protokit-0.7.0/src/protokit/schema/lint/rules/options/deprecated_replacement.py +426 -0
  159. protokit-0.7.0/src/protokit/schema/lint/rules/options/field_behavior.py +414 -0
  160. protokit-0.7.0/src/protokit/schema/lint/rules/package.py +585 -0
  161. protokit-0.7.0/src/protokit/schema/lint/rules/package_same.py +555 -0
  162. protokit-0.7.0/src/protokit/schema/model.py +556 -0
  163. protokit-0.7.0/src/protokit/schema/plugins.py +352 -0
  164. protokit-0.7.0/src/protokit/schema/profiles.py +194 -0
  165. protokit-0.7.0/src/protokit/schema/pytest_plugin.py +153 -0
  166. protokit-0.7.0/src/protokit/schema/rules.py +1041 -0
  167. protokit-0.7.0/tests/__init__.py +0 -0
  168. protokit-0.7.0/tests/_buf_helpers.py +317 -0
  169. protokit-0.7.0/tests/fixtures/junit-xml/JUnit.xsd +227 -0
  170. protokit-0.7.0/tests/fixtures/junit-xml/SOURCE.md +20 -0
  171. protokit-0.7.0/tests/fixtures/sarif/SOURCE.md +43 -0
  172. protokit-0.7.0/tests/fixtures/sarif/sarif-2.1.0.json +2882 -0
  173. protokit-0.7.0/tests/parity/__init__.py +0 -0
  174. protokit-0.7.0/tests/parity/conftest.py +1152 -0
  175. protokit-0.7.0/tests/parity/fixtures/enum/first-value-zero/bad.proto +8 -0
  176. protokit-0.7.0/tests/parity/fixtures/enum/first-value-zero/buf.yaml +6 -0
  177. protokit-0.7.0/tests/parity/fixtures/enum/first-value-zero/good.proto +8 -0
  178. protokit-0.7.0/tests/parity/fixtures/enum/no-allow-alias/bad.proto +9 -0
  179. protokit-0.7.0/tests/parity/fixtures/enum/no-allow-alias/buf.yaml +6 -0
  180. protokit-0.7.0/tests/parity/fixtures/enum/no-allow-alias/good.proto +8 -0
  181. protokit-0.7.0/tests/parity/fixtures/field/not-required/buf.yaml +6 -0
  182. protokit-0.7.0/tests/parity/fixtures/field/not-required/good.proto +5 -0
  183. protokit-0.7.0/tests/parity/fixtures/field/not-required/proto2_optional.proto +8 -0
  184. protokit-0.7.0/tests/parity/fixtures/field/not-required/proto2_required.proto +9 -0
  185. protokit-0.7.0/tests/parity/fixtures/field/not-required/proto3_field.proto +9 -0
  186. protokit-0.7.0/tests/parity/fixtures/file/syntax-specified/buf.yaml +6 -0
  187. protokit-0.7.0/tests/parity/fixtures/file/syntax-specified/explicit_proto2.proto +7 -0
  188. protokit-0.7.0/tests/parity/fixtures/file/syntax-specified/good.proto +5 -0
  189. protokit-0.7.0/tests/parity/fixtures/file/syntax-specified/no_syntax.proto +5 -0
  190. protokit-0.7.0/tests/parity/fixtures/imports/no-public/bad.proto +9 -0
  191. protokit-0.7.0/tests/parity/fixtures/imports/no-public/buf.yaml +6 -0
  192. protokit-0.7.0/tests/parity/fixtures/imports/no-public/good.proto +9 -0
  193. protokit-0.7.0/tests/parity/fixtures/imports/no-public/other.proto +7 -0
  194. protokit-0.7.0/tests/parity/fixtures/imports/no-weak/bad.proto +9 -0
  195. protokit-0.7.0/tests/parity/fixtures/imports/no-weak/buf.yaml +6 -0
  196. protokit-0.7.0/tests/parity/fixtures/imports/no-weak/good.proto +9 -0
  197. protokit-0.7.0/tests/parity/fixtures/imports/no-weak/other.proto +7 -0
  198. protokit-0.7.0/tests/parity/fixtures/imports/unused/bad.proto +9 -0
  199. protokit-0.7.0/tests/parity/fixtures/imports/unused/buf.yaml +6 -0
  200. protokit-0.7.0/tests/parity/fixtures/imports/unused/good.proto +9 -0
  201. protokit-0.7.0/tests/parity/fixtures/imports/unused/other.proto +7 -0
  202. protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-enums/bad.proto +7 -0
  203. protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-enums/buf.yaml +6 -0
  204. protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-enums/good.proto +7 -0
  205. protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-messages/bad.proto +7 -0
  206. protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-messages/buf.yaml +6 -0
  207. protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-messages/good.proto +7 -0
  208. protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-rpcs/bad.proto +10 -0
  209. protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-rpcs/buf.yaml +6 -0
  210. protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-rpcs/good.proto +10 -0
  211. protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-services/bad.proto +10 -0
  212. protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-services/buf.yaml +6 -0
  213. protokit-0.7.0/tests/parity/fixtures/naming/pascal-case-services/good.proto +10 -0
  214. protokit-0.7.0/tests/parity/fixtures/naming/snake-case-fields/bad.proto +7 -0
  215. protokit-0.7.0/tests/parity/fixtures/naming/snake-case-fields/buf.yaml +6 -0
  216. protokit-0.7.0/tests/parity/fixtures/naming/snake-case-fields/good.proto +8 -0
  217. protokit-0.7.0/tests/parity/fixtures/naming/snake-case-files/BadFile.proto +5 -0
  218. protokit-0.7.0/tests/parity/fixtures/naming/snake-case-files/buf.yaml +6 -0
  219. protokit-0.7.0/tests/parity/fixtures/naming/snake-case-files/good_file.proto +5 -0
  220. protokit-0.7.0/tests/parity/fixtures/naming/snake-case-oneofs/bad.proto +10 -0
  221. protokit-0.7.0/tests/parity/fixtures/naming/snake-case-oneofs/buf.yaml +6 -0
  222. protokit-0.7.0/tests/parity/fixtures/naming/snake-case-oneofs/good.proto +10 -0
  223. protokit-0.7.0/tests/parity/fixtures/naming/snake-case-packages/bad.proto +5 -0
  224. protokit-0.7.0/tests/parity/fixtures/naming/snake-case-packages/buf.yaml +6 -0
  225. protokit-0.7.0/tests/parity/fixtures/naming/snake-case-packages/good.proto +5 -0
  226. protokit-0.7.0/tests/parity/fixtures/naming/upper-snake-case-enum-values/bad.proto +8 -0
  227. protokit-0.7.0/tests/parity/fixtures/naming/upper-snake-case-enum-values/buf.yaml +6 -0
  228. protokit-0.7.0/tests/parity/fixtures/naming/upper-snake-case-enum-values/good.proto +8 -0
  229. protokit-0.7.0/tests/parity/fixtures/package/defined/bad.proto +3 -0
  230. protokit-0.7.0/tests/parity/fixtures/package/defined/buf.yaml +6 -0
  231. protokit-0.7.0/tests/parity/fixtures/package/defined/good.proto +5 -0
  232. protokit-0.7.0/tests/parity/fixtures/package/directory-match/buf.yaml +6 -0
  233. protokit-0.7.0/tests/parity/fixtures/package/directory-match/parity/dirmatch/good.proto +5 -0
  234. protokit-0.7.0/tests/parity/fixtures/package/directory-match/wrongdir/bad.proto +5 -0
  235. protokit-0.7.0/tests/parity/test_assert_parity_branches.py +238 -0
  236. protokit-0.7.0/tests/parity/test_buf_output_shape.py +120 -0
  237. protokit-0.7.0/tests/parity/test_fixture_inventory.py +85 -0
  238. protokit-0.7.0/tests/parity/test_parity_enum.py +77 -0
  239. protokit-0.7.0/tests/parity/test_parity_field.py +111 -0
  240. protokit-0.7.0/tests/parity/test_parity_file.py +103 -0
  241. protokit-0.7.0/tests/parity/test_parity_imports.py +82 -0
  242. protokit-0.7.0/tests/parity/test_parity_naming.py +130 -0
  243. protokit-0.7.0/tests/parity/test_parity_package.py +125 -0
  244. protokit-0.7.0/tests/parity/test_parity_package_directory.py +386 -0
  245. protokit-0.7.0/tests/parity/test_parity_package_no_import_cycle.py +252 -0
  246. protokit-0.7.0/tests/parity/test_parity_package_same.py +452 -0
  247. protokit-0.7.0/tests/proto_builder.py +208 -0
  248. protokit-0.7.0/tests/schema/__init__.py +0 -0
  249. protokit-0.7.0/tests/schema/helpers.py +125 -0
  250. protokit-0.7.0/tests/schema/lint/__init__.py +7 -0
  251. protokit-0.7.0/tests/schema/lint/_cli_dedup_helpers.py +82 -0
  252. protokit-0.7.0/tests/schema/lint/_config/__init__.py +1 -0
  253. protokit-0.7.0/tests/schema/lint/_config/conftest.py +56 -0
  254. protokit-0.7.0/tests/schema/lint/_config/test_coerce_disable_enable_rules.py +279 -0
  255. protokit-0.7.0/tests/schema/lint/_config/test_exclude_patterns.py +248 -0
  256. protokit-0.7.0/tests/schema/lint/_config/test_from_dict_r9b.py +332 -0
  257. protokit-0.7.0/tests/schema/lint/_config/test_loader.py +531 -0
  258. protokit-0.7.0/tests/schema/lint/_config/test_no_builtin_rules.py +166 -0
  259. protokit-0.7.0/tests/schema/lint/_config/test_precedence.py +264 -0
  260. protokit-0.7.0/tests/schema/lint/_config/test_profile_aliases.py +161 -0
  261. protokit-0.7.0/tests/schema/lint/_config/test_resolved_config.py +530 -0
  262. protokit-0.7.0/tests/schema/lint/_config/test_schema_validation.py +337 -0
  263. protokit-0.7.0/tests/schema/lint/_config/test_severities.py +379 -0
  264. protokit-0.7.0/tests/schema/lint/_config/test_walkup.py +245 -0
  265. protokit-0.7.0/tests/schema/lint/cli/__init__.py +7 -0
  266. protokit-0.7.0/tests/schema/lint/cli/_helpers.py +175 -0
  267. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/bad_naming.proto +20 -0
  268. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/clean.proto +20 -0
  269. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6d_custom_annotation/proto/example/audit.proto +35 -0
  270. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6d_custom_annotation/proto/example/service.proto +53 -0
  271. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6d_custom_annotation/pyproject.toml +52 -0
  272. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_migration_recipe/README.md +22 -0
  273. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_migration_recipe/disabled_rules_single_rule.toml +12 -0
  274. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_migration_recipe/enabled_rules_single_rule.toml +13 -0
  275. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_migration_recipe/path2_demote_one_rule_to_warning.toml +10 -0
  276. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_migration_recipe/path3_off_severity_single_rule.toml +12 -0
  277. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_migration_recipe/path4_disabled_rules_r6_family.toml +20 -0
  278. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_r6_migration/path1_fix_schema.proto +21 -0
  279. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_r6_migration/path2_demote_to_warning.toml +17 -0
  280. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_r6_migration/path3_off_severity.toml +17 -0
  281. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_r6_migration/path4_disabled_rules_family.toml +19 -0
  282. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_r6_migration/sad.proto +14 -0
  283. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/d6f_r6_migration/sad_multi_element.proto +41 -0
  284. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/missing_imports.proto +21 -0
  285. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/pool_conflict_a.proto +16 -0
  286. protokit-0.7.0/tests/schema/lint/cli/cli_fixtures/pool_conflict_b.proto +14 -0
  287. protokit-0.7.0/tests/schema/lint/cli/conftest.py +176 -0
  288. protokit-0.7.0/tests/schema/lint/cli/test_breaking_migration.py +185 -0
  289. protokit-0.7.0/tests/schema/lint/cli/test_cli_ci_gating.py +1139 -0
  290. protokit-0.7.0/tests/schema/lint/cli/test_cli_d6f_migration_recipe_snippet_fixtures.py +236 -0
  291. protokit-0.7.0/tests/schema/lint/cli/test_cli_descriptor_set_source_info.py +339 -0
  292. protokit-0.7.0/tests/schema/lint/cli/test_cli_disable_enable_rule_flags.py +212 -0
  293. protokit-0.7.0/tests/schema/lint/cli/test_cli_error_codes.py +128 -0
  294. protokit-0.7.0/tests/schema/lint/cli/test_cli_input_modes.py +490 -0
  295. protokit-0.7.0/tests/schema/lint/cli/test_cli_integration.py +258 -0
  296. protokit-0.7.0/tests/schema/lint/cli/test_cli_no_rules.py +38 -0
  297. protokit-0.7.0/tests/schema/lint/cli/test_cli_profile_resolution.py +482 -0
  298. protokit-0.7.0/tests/schema/lint/cli/test_cli_r6_migration_recipe.py +264 -0
  299. protokit-0.7.0/tests/schema/lint/cli/test_cli_r9b_profile_augmentation.py +493 -0
  300. protokit-0.7.0/tests/schema/lint/cli/test_cli_r9b_unknown_rule_id.py +208 -0
  301. protokit-0.7.0/tests/schema/lint/cli/test_cli_rule_loading.py +259 -0
  302. protokit-0.7.0/tests/schema/lint/cli/test_cli_utils.py +25 -0
  303. protokit-0.7.0/tests/schema/lint/cli/test_config_flags.py +310 -0
  304. protokit-0.7.0/tests/schema/lint/cli/test_d6d_custom_annotation_example.py +627 -0
  305. protokit-0.7.0/tests/schema/lint/cli/test_exclude.py +410 -0
  306. protokit-0.7.0/tests/schema/lint/cli/test_human_stderr_render.py +623 -0
  307. protokit-0.7.0/tests/schema/lint/cli/test_min_severity_relaxed.py +245 -0
  308. protokit-0.7.0/tests/schema/lint/cli/test_no_exclude.py +233 -0
  309. protokit-0.7.0/tests/schema/lint/cli/test_r6_cli_integration.py +315 -0
  310. protokit-0.7.0/tests/schema/lint/cli/test_r9a_severities_overlay.py +251 -0
  311. protokit-0.7.0/tests/schema/lint/cli/test_r9c_no_builtin_rules.py +176 -0
  312. protokit-0.7.0/tests/schema/lint/cli/test_r9d_schema_version.py +137 -0
  313. protokit-0.7.0/tests/schema/lint/cli/test_severities_unloaded_rule_category.py +288 -0
  314. protokit-0.7.0/tests/schema/lint/cli/test_version_output.py +91 -0
  315. protokit-0.7.0/tests/schema/lint/cli/user_packs/__init__.py +12 -0
  316. protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_collision.py +31 -0
  317. protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_compat_format.py +20 -0
  318. protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_emits_error.py +32 -0
  319. protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_module_raises.py +13 -0
  320. protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_no_rules.py +6 -0
  321. protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_rule_raises.py +34 -0
  322. protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_strict_only.py +35 -0
  323. protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_sys_exits.py +16 -0
  324. protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_user_a.py +33 -0
  325. protokit-0.7.0/tests/schema/lint/cli/user_packs/pack_user_b.py +32 -0
  326. protokit-0.7.0/tests/schema/lint/fixtures/all_kinds.proto +61 -0
  327. protokit-0.7.0/tests/schema/lint/rules/__init__.py +0 -0
  328. protokit-0.7.0/tests/schema/lint/rules/conftest.py +92 -0
  329. protokit-0.7.0/tests/schema/lint/rules/fixtures/__init__.py +7 -0
  330. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/__init__.py +20 -0
  331. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/cofire-r8-r8b/buf.yaml +7 -0
  332. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/cofire-r8-r8b/other_dir/c.proto +5 -0
  333. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/cofire-r8-r8b/pkg/a.proto +5 -0
  334. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/cofire-r8-r8b/pkg/b.proto +5 -0
  335. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/matched-dir/buf.yaml +6 -0
  336. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/matched-dir/pkg/a.proto +5 -0
  337. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/matched-dir/pkg/b.proto +5 -0
  338. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/mismatched-dir/buf.yaml +6 -0
  339. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/mismatched-dir/pkg/a.proto +5 -0
  340. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/mismatched-dir/pkg/b.proto +5 -0
  341. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/n3-directories-split/buf.yaml +6 -0
  342. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/n3-directories-split/d1/a.proto +5 -0
  343. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/n3-directories-split/d2/b.proto +5 -0
  344. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/n3-directories-split/d3/c.proto +5 -0
  345. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/n3-packages-same-dir/buf.yaml +6 -0
  346. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/n3-packages-same-dir/pkg/a.proto +5 -0
  347. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/n3-packages-same-dir/pkg/b.proto +5 -0
  348. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/n3-packages-same-dir/pkg/c.proto +5 -0
  349. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/no-package-mixed/buf.yaml +6 -0
  350. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/no-package-mixed/pkg/a.proto +5 -0
  351. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/no-package-mixed/pkg/b.proto +5 -0
  352. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/no-package-mixed/pkg/c.proto +3 -0
  353. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/proto-root-mixed/a.proto +5 -0
  354. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/proto-root-mixed/b.proto +5 -0
  355. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/proto-root-mixed/buf.yaml +6 -0
  356. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/CHECKSUMS.sha256 +10 -0
  357. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/cofire-r8-r8b.json +4 -0
  358. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/matched-dir.json +0 -0
  359. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/mismatched-dir.json +2 -0
  360. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/n3-directories-split.json +3 -0
  361. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/n3-packages-same-dir.json +3 -0
  362. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/no-package-mixed.json +3 -0
  363. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/proto-root-mixed.json +2 -0
  364. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/single-declared-no-package.json +3 -0
  365. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/single-file-dir.json +0 -0
  366. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/recorded/split-package-multi-dir.json +2 -0
  367. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/single-declared-no-package/buf.yaml +6 -0
  368. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/single-declared-no-package/pkg/a.proto +5 -0
  369. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/single-declared-no-package/pkg/b.proto +3 -0
  370. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/single-declared-no-package/pkg/c.proto +3 -0
  371. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/single-file-dir/buf.yaml +6 -0
  372. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/single-file-dir/pkg/a.proto +5 -0
  373. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/split-package-multi-dir/buf.yaml +6 -0
  374. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/split-package-multi-dir/dir1/a.proto +5 -0
  375. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_directory/_buf_smoke/split-package-multi-dir/dir2/b.proto +5 -0
  376. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/leaf_files_in_cyclic_pkg/buf.yaml +6 -0
  377. 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
  378. 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
  379. 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
  380. 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
  381. 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
  382. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/no_cycle_baseline/buf.yaml +6 -0
  383. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/no_cycle_baseline/pkg_a/a.proto +4 -0
  384. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/no_cycle_baseline/pkg_b/b.proto +3 -0
  385. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/recorded/leaf_files_in_cyclic_pkg.json +2 -0
  386. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/recorded/no_cycle_baseline.json +0 -0
  387. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/recorded/root_vendor_pkg_cycle.json +2 -0
  388. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/recorded/three_pkg_cycle.json +3 -0
  389. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/recorded/two_pkg_cycle.json +2 -0
  390. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/root_vendor_pkg_cycle/buf.yaml +6 -0
  391. 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
  392. 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
  393. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/root_vendor_pkg_cycle/vendor/v1.proto +3 -0
  394. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/root_vendor_pkg_cycle/vendor/v2.proto +4 -0
  395. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/three_pkg_cycle/buf.yaml +6 -0
  396. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/three_pkg_cycle/pkg_a/a.proto +4 -0
  397. 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
  398. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/three_pkg_cycle/pkg_b/b1.proto +3 -0
  399. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/three_pkg_cycle/pkg_b/b2.proto +4 -0
  400. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/three_pkg_cycle/pkg_c/c1.proto +3 -0
  401. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/three_pkg_cycle/pkg_c/c2.proto +4 -0
  402. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/two_pkg_cycle/buf.yaml +6 -0
  403. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/two_pkg_cycle/pkg_a/a1.proto +4 -0
  404. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/two_pkg_cycle/pkg_a/a2.proto +3 -0
  405. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/two_pkg_cycle/pkg_b/b1.proto +3 -0
  406. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_no_import_cycle/_buf_smoke/two_pkg_cycle/pkg_b/b2.proto +4 -0
  407. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/__init__.py +9 -0
  408. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/all-agree/a.proto +7 -0
  409. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/all-agree/b.proto +7 -0
  410. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/all-agree/buf.yaml +6 -0
  411. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/all-agree/c.proto +7 -0
  412. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/compound-backslash-quote/a.proto +7 -0
  413. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/compound-backslash-quote/b.proto +7 -0
  414. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/compound-backslash-quote/buf.yaml +6 -0
  415. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/empty-package-mixed/a.proto +5 -0
  416. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/empty-package-mixed/b.proto +5 -0
  417. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/empty-package-mixed/buf.yaml +6 -0
  418. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/empty-package-mixed/c.proto +5 -0
  419. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/googleapis-import/a.proto +11 -0
  420. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/googleapis-import/buf.yaml +6 -0
  421. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/googleapis-import/google/api/annotations.proto +7 -0
  422. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/googleapis-import/google/api/http.proto +7 -0
  423. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence/a.proto +7 -0
  424. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence/b.proto +5 -0
  425. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence/buf.yaml +6 -0
  426. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence/c.proto +5 -0
  427. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-csharp-namespace/a.proto +7 -0
  428. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-csharp-namespace/b.proto +5 -0
  429. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-csharp-namespace/buf.yaml +6 -0
  430. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-csharp-namespace/c.proto +5 -0
  431. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-java-multiple-files/a.proto +7 -0
  432. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-java-multiple-files/b.proto +5 -0
  433. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-java-multiple-files/buf.yaml +6 -0
  434. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-java-multiple-files/c.proto +5 -0
  435. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-java-package/a.proto +7 -0
  436. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-java-package/b.proto +5 -0
  437. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-java-package/buf.yaml +6 -0
  438. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-java-package/c.proto +5 -0
  439. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-php-namespace/a.proto +7 -0
  440. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-php-namespace/b.proto +5 -0
  441. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-php-namespace/buf.yaml +6 -0
  442. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-php-namespace/c.proto +5 -0
  443. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-ruby-package/a.proto +7 -0
  444. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-ruby-package/b.proto +5 -0
  445. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-ruby-package/buf.yaml +6 -0
  446. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-ruby-package/c.proto +5 -0
  447. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-swift-prefix/a.proto +7 -0
  448. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-swift-prefix/b.proto +5 -0
  449. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-swift-prefix/buf.yaml +6 -0
  450. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-presence-swift-prefix/c.proto +5 -0
  451. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value/a.proto +7 -0
  452. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value/b.proto +7 -0
  453. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value/buf.yaml +6 -0
  454. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value/c.proto +7 -0
  455. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-csharp-namespace/a.proto +7 -0
  456. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-csharp-namespace/b.proto +7 -0
  457. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-csharp-namespace/buf.yaml +6 -0
  458. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-csharp-namespace/c.proto +7 -0
  459. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-java-multiple-files/a.proto +7 -0
  460. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-java-multiple-files/b.proto +7 -0
  461. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-java-multiple-files/buf.yaml +6 -0
  462. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-java-multiple-files/c.proto +7 -0
  463. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-java-package/a.proto +7 -0
  464. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-java-package/b.proto +7 -0
  465. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-java-package/buf.yaml +6 -0
  466. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-java-package/c.proto +7 -0
  467. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-php-namespace/a.proto +7 -0
  468. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-php-namespace/b.proto +7 -0
  469. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-php-namespace/buf.yaml +6 -0
  470. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-php-namespace/c.proto +7 -0
  471. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-ruby-package/a.proto +7 -0
  472. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-ruby-package/b.proto +7 -0
  473. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-ruby-package/buf.yaml +6 -0
  474. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-ruby-package/c.proto +7 -0
  475. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-swift-prefix/a.proto +7 -0
  476. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-swift-prefix/b.proto +7 -0
  477. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-swift-prefix/buf.yaml +6 -0
  478. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-swift-prefix/c.proto +7 -0
  479. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-with-inner-quote/a.proto +7 -0
  480. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-with-inner-quote/b.proto +7 -0
  481. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-with-inner-quote/buf.yaml +6 -0
  482. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/mixed-value-with-inner-quote/c.proto +7 -0
  483. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/CHECKSUMS.sha256 +22 -0
  484. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/all-agree.json +0 -0
  485. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/compound-backslash-quote.json +2 -0
  486. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/empty-package-mixed.json +3 -0
  487. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/googleapis-import.json +2 -0
  488. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-presence-csharp-namespace.json +3 -0
  489. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-presence-java-multiple-files.json +3 -0
  490. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-presence-java-package.json +3 -0
  491. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-presence-php-namespace.json +3 -0
  492. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-presence-ruby-package.json +3 -0
  493. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-presence-swift-prefix.json +3 -0
  494. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-presence.json +3 -0
  495. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-value-csharp-namespace.json +3 -0
  496. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-value-java-multiple-files.json +3 -0
  497. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-value-java-package.json +3 -0
  498. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-value-php-namespace.json +3 -0
  499. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-value-ruby-package.json +3 -0
  500. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-value-swift-prefix.json +3 -0
  501. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-value-with-inner-quote.json +3 -0
  502. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/mixed-value.json +3 -0
  503. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/reverse-order-go.json +3 -0
  504. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/wkt-conflict.json +2 -0
  505. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/recorded/wkt-only.json +0 -0
  506. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/reverse-order-go/a.proto +7 -0
  507. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/reverse-order-go/b.proto +7 -0
  508. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/reverse-order-go/buf.yaml +6 -0
  509. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/reverse-order-go/c.proto +7 -0
  510. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/wkt-conflict/a.proto +11 -0
  511. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/wkt-conflict/buf.yaml +6 -0
  512. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/wkt-conflict/google/protobuf/extension_a.proto +7 -0
  513. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/wkt-conflict/google/protobuf/extension_b.proto +7 -0
  514. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/wkt-only/a.proto +11 -0
  515. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/_buf_smoke/wkt-only/buf.yaml +6 -0
  516. protokit-0.7.0/tests/schema/lint/rules/fixtures/package_same/proto_templates.py +357 -0
  517. protokit-0.7.0/tests/schema/lint/rules/options/__init__.py +0 -0
  518. protokit-0.7.0/tests/schema/lint/rules/options/test_comments.py +396 -0
  519. protokit-0.7.0/tests/schema/lint/rules/options/test_deprecated_replacement.py +974 -0
  520. protokit-0.7.0/tests/schema/lint/rules/options/test_deprecated_replacement_severity.py +139 -0
  521. protokit-0.7.0/tests/schema/lint/rules/options/test_field_behavior_consistent.py +914 -0
  522. protokit-0.7.0/tests/schema/lint/rules/test_enum.py +345 -0
  523. protokit-0.7.0/tests/schema/lint/rules/test_field.py +435 -0
  524. protokit-0.7.0/tests/schema/lint/rules/test_file.py +296 -0
  525. protokit-0.7.0/tests/schema/lint/rules/test_imports.py +612 -0
  526. protokit-0.7.0/tests/schema/lint/rules/test_kd9_docstring.py +49 -0
  527. protokit-0.7.0/tests/schema/lint/rules/test_naming_extended.py +857 -0
  528. protokit-0.7.0/tests/schema/lint/rules/test_package.py +432 -0
  529. protokit-0.7.0/tests/schema/lint/rules/test_package_same.py +1329 -0
  530. protokit-0.7.0/tests/schema/lint/rules/test_package_same_directory.py +907 -0
  531. protokit-0.7.0/tests/schema/lint/test_buf_smoke_assumptions.py +108 -0
  532. protokit-0.7.0/tests/schema/lint/test_buf_smoke_assumptions_package_directory.py +131 -0
  533. protokit-0.7.0/tests/schema/lint/test_buf_smoke_recorded_checksums.py +108 -0
  534. protokit-0.7.0/tests/schema/lint/test_buf_smoke_recorded_checksums_package_directory.py +166 -0
  535. protokit-0.7.0/tests/schema/lint/test_builtin_packs.py +214 -0
  536. protokit-0.7.0/tests/schema/lint/test_canary_naming.py +216 -0
  537. protokit-0.7.0/tests/schema/lint/test_cli_package_same_e2e.py +293 -0
  538. protokit-0.7.0/tests/schema/lint/test_cli_rule_pack_dedup.py +754 -0
  539. protokit-0.7.0/tests/schema/lint/test_cold_import_extended.py +105 -0
  540. protokit-0.7.0/tests/schema/lint/test_compile_failure.py +322 -0
  541. protokit-0.7.0/tests/schema/lint/test_compile_include_source_info.py +552 -0
  542. protokit-0.7.0/tests/schema/lint/test_compile_multi.py +321 -0
  543. protokit-0.7.0/tests/schema/lint/test_compile_pool_file_names.py +334 -0
  544. protokit-0.7.0/tests/schema/lint/test_compile_protoxy_fallback.py +249 -0
  545. protokit-0.7.0/tests/schema/lint/test_custom_rules_loader.py +573 -0
  546. protokit-0.7.0/tests/schema/lint/test_decorator.py +216 -0
  547. protokit-0.7.0/tests/schema/lint/test_engine.py +1040 -0
  548. protokit-0.7.0/tests/schema/lint/test_engine_directory_package_accumulator.py +699 -0
  549. protokit-0.7.0/tests/schema/lint/test_engine_pre_walk.py +964 -0
  550. protokit-0.7.0/tests/schema/lint/test_engine_source_info_descriptors_injection.py +383 -0
  551. protokit-0.7.0/tests/schema/lint/test_engine_warning_content_safety.py +472 -0
  552. protokit-0.7.0/tests/schema/lint/test_model.py +1098 -0
  553. protokit-0.7.0/tests/schema/lint/test_model_dataclass_changes.py +251 -0
  554. protokit-0.7.0/tests/schema/lint/test_no_builtin_rule_uses_custom_prefix.py +48 -0
  555. protokit-0.7.0/tests/schema/lint/test_perf_smoke.py +196 -0
  556. protokit-0.7.0/tests/schema/lint/test_perf_smoke_coverage.py +320 -0
  557. protokit-0.7.0/tests/schema/lint/test_protoxy_option_value_encoding_contract.py +205 -0
  558. protokit-0.7.0/tests/schema/lint/test_pyproject_custom_annotation.py +555 -0
  559. protokit-0.7.0/tests/schema/lint/test_r9b_precedence.py +282 -0
  560. protokit-0.7.0/tests/schema/lint/test_r9b_warnings.py +150 -0
  561. protokit-0.7.0/tests/schema/lint/test_walk_coverage.py +299 -0
  562. protokit-0.7.0/tests/schema/test_checker.py +1103 -0
  563. protokit-0.7.0/tests/schema/test_cli.py +1583 -0
  564. protokit-0.7.0/tests/schema/test_git.py +562 -0
  565. protokit-0.7.0/tests/schema/test_model.py +320 -0
  566. protokit-0.7.0/tests/schema/test_plugins.py +537 -0
  567. protokit-0.7.0/tests/schema/test_profiles.py +234 -0
  568. protokit-0.7.0/tests/schema/test_pytest_plugin.py +186 -0
  569. protokit-0.7.0/tests/schema/test_rules.py +986 -0
  570. protokit-0.7.0/tests/test_buf_parity_pin_drift.py +176 -0
  571. protokit-0.7.0/tests/test_builtin_lint_formatter.py +1158 -0
  572. protokit-0.7.0/tests/test_builtin_lint_runtime_warnings.py +505 -0
  573. protokit-0.7.0/tests/test_bytes.py +71 -0
  574. protokit-0.7.0/tests/test_changelog_delivery_presence_ratchet.py +124 -0
  575. protokit-0.7.0/tests/test_cli.py +398 -0
  576. protokit-0.7.0/tests/test_cli_utils.py +390 -0
  577. protokit-0.7.0/tests/test_cross_pool.py +169 -0
  578. protokit-0.7.0/tests/test_defaults.py +111 -0
  579. protokit-0.7.0/tests/test_descriptors.py +235 -0
  580. protokit-0.7.0/tests/test_diff_result.py +198 -0
  581. protokit-0.7.0/tests/test_enums.py +91 -0
  582. protokit-0.7.0/tests/test_field_path.py +181 -0
  583. protokit-0.7.0/tests/test_float_comparison.py +123 -0
  584. protokit-0.7.0/tests/test_formatters_builtin.py +339 -0
  585. protokit-0.7.0/tests/test_formatters_cli.py +718 -0
  586. protokit-0.7.0/tests/test_formatters_integration.py +273 -0
  587. protokit-0.7.0/tests/test_formatters_junit.py +533 -0
  588. protokit-0.7.0/tests/test_formatters_registry.py +287 -0
  589. protokit-0.7.0/tests/test_formatters_sarif.py +349 -0
  590. protokit-0.7.0/tests/test_hooks.py +790 -0
  591. protokit-0.7.0/tests/test_ignore_fields.py +146 -0
  592. protokit-0.7.0/tests/test_maps.py +237 -0
  593. protokit-0.7.0/tests/test_nested.py +138 -0
  594. protokit-0.7.0/tests/test_oneof.py +112 -0
  595. protokit-0.7.0/tests/test_options.py +197 -0
  596. protokit-0.7.0/tests/test_proto_builder.py +107 -0
  597. protokit-0.7.0/tests/test_pytest_plugin.py +131 -0
  598. protokit-0.7.0/tests/test_repeated.py +142 -0
  599. protokit-0.7.0/tests/test_scalars.py +113 -0
  600. protokit-0.7.0/tests/test_schema_evolution.py +276 -0
  601. protokit-0.7.0/tests/test_static_analysis.py +128 -0
  602. protokit-0.7.0/tests/test_treat_as_map.py +288 -0
  603. 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/