grift-cli 0.7.2__tar.gz → 0.8.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 (353) hide show
  1. grift_cli-0.8.0/.github/ISSUE_TEMPLATE/bug_report.yml +79 -0
  2. grift_cli-0.8.0/.github/ISSUE_TEMPLATE/config.yml +11 -0
  3. grift_cli-0.8.0/.github/ISSUE_TEMPLATE/feature_request.yml +52 -0
  4. grift_cli-0.8.0/.github/ISSUE_TEMPLATE/question.yml +52 -0
  5. grift_cli-0.8.0/.github/PULL_REQUEST_TEMPLATE.md +66 -0
  6. {grift_cli-0.7.2 → grift_cli-0.8.0}/CHANGELOG.md +97 -0
  7. grift_cli-0.8.0/PKG-INFO +193 -0
  8. grift_cli-0.8.0/README.en.md +164 -0
  9. grift_cli-0.8.0/README.md +142 -0
  10. {grift_cli-0.7.2 → grift_cli-0.8.0}/action.yml +1 -1
  11. grift_cli-0.8.0/benchmarks/v060/golden/expected/actor-partition.json +1 -0
  12. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/golden/manifest.json +1 -1
  13. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/golden/migrations.json +1 -1
  14. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/REQUIREMENTS-v060.md +1 -0
  15. grift_cli-0.8.0/docs/adr/ADR-0001-v08-no-volume-ordering.md +116 -0
  16. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/en/metrics-guide.md +5 -2
  17. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/en/norms.md +4 -2
  18. grift_cli-0.7.2/README.en.md → grift_cli-0.8.0/docs/en/usage.md +92 -221
  19. grift_cli-0.8.0/docs/en/validation.md +52 -0
  20. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/metrics-guide.md +20 -1
  21. grift_cli-0.8.0/docs/migration-v080.md +648 -0
  22. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/norms.md +8 -4
  23. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/report-schema.md +1 -0
  24. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/report-v2.md +2 -1
  25. grift_cli-0.8.0/docs/usage.md +302 -0
  26. grift_cli-0.8.0/docs/validation.md +51 -0
  27. {grift_cli-0.7.2 → grift_cli-0.8.0}/pyproject.toml +10 -3
  28. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/v070_benchmark.py +51 -0
  29. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_cli/__main__.py +5 -12
  30. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/actor_artifacts.py +75 -4
  31. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/actor_directory.py +8 -1
  32. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/alignment.py +9 -5
  33. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/analyze.py +4 -0
  34. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/analyze_v2.py +6 -0
  35. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/contribute.py +4 -0
  36. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/report.py +1 -0
  37. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/report_v2.py +18 -8
  38. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/rhythm.py +7 -1
  39. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/schemas/v060-contracts.schema.json +2 -1
  40. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/v2_constants.py +20 -0
  41. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/version.py +2 -2
  42. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_discriminant_claims.py +17 -9
  43. grift_cli-0.8.0/tests/test_readme_entry.py +162 -0
  44. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v058_gates.py +47 -2
  45. grift_cli-0.8.0/tests/test_v060_docs_parity.py +283 -0
  46. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_release_consistency.py +27 -14
  47. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_scenario_matrix.py +62 -8
  48. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_benchmark.py +50 -0
  49. grift_cli-0.8.0/tests/test_v080_actor_index_order.py +350 -0
  50. grift_cli-0.8.0/tests/test_v080_inflation_limitations.py +214 -0
  51. grift_cli-0.8.0/tests/test_v080_selectivity_notice.py +212 -0
  52. grift_cli-0.7.2/PKG-INFO +0 -428
  53. grift_cli-0.7.2/README.md +0 -404
  54. grift_cli-0.7.2/benchmarks/v060/golden/expected/actor-partition.json +0 -1
  55. grift_cli-0.7.2/tests/test_v060_docs_parity.py +0 -108
  56. {grift_cli-0.7.2 → grift_cli-0.8.0}/.github/workflows/ci.yml +0 -0
  57. {grift_cli-0.7.2 → grift_cli-0.8.0}/.github/workflows/kpi-monthly.yml +0 -0
  58. {grift_cli-0.7.2 → grift_cli-0.8.0}/.github/workflows/publish.yml +0 -0
  59. {grift_cli-0.7.2 → grift_cli-0.8.0}/.github/workflows/v060-provider-live.yml +0 -0
  60. {grift_cli-0.7.2 → grift_cli-0.8.0}/.gitignore +0 -0
  61. {grift_cli-0.7.2 → grift_cli-0.8.0}/LICENSE +0 -0
  62. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/IMPLEMENTATION-AGENT-INSTRUCTIONS.md +0 -0
  63. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/README.md +0 -0
  64. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/data/alignment_cases.jsonl +0 -0
  65. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/data/gharchive_daily_summary.csv +0 -0
  66. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/data/gharchive_events_2024-01-15_to_21.ndjson +0 -0
  67. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/data/gharchive_repository_summary.csv +0 -0
  68. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/data/independent_repo_actor_audit_2026-08-30.json +0 -0
  69. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/data/metric_catalog.csv +0 -0
  70. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/data/role_ground_truth_sample.csv +0 -0
  71. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/data/role_label_counts.csv +0 -0
  72. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/data/tracker_lifecycle_fixture.csv +0 -0
  73. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/expected/tracker_fixture_expected.json +0 -0
  74. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/golden/fixtures/actor-partition-repo.json +0 -0
  75. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/quality-report.md +0 -0
  76. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/schemas/benchmark-manifest.schema.json +0 -0
  77. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/schemas/event-observation.schema.json +0 -0
  78. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/schemas/role-validation.schema.json +0 -0
  79. {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/sources.json +0 -0
  80. {grift_cli-0.7.2 → grift_cli-0.8.0}/corpus/AD-PILOT-20260822.md +0 -0
  81. {grift_cli-0.7.2 → grift_cli-0.8.0}/corpus/DISCRIMINANT-v2026.09.md +0 -0
  82. {grift_cli-0.7.2 → grift_cli-0.8.0}/corpus/DISCRIMINANT-v2026.11.md +0 -0
  83. {grift_cli-0.7.2 → grift_cli-0.8.0}/corpus/ad-pilot.json +0 -0
  84. {grift_cli-0.7.2 → grift_cli-0.8.0}/corpus/manifest.toml +0 -0
  85. {grift_cli-0.7.2 → grift_cli-0.8.0}/corpus/pins-v2026.09.toml +0 -0
  86. {grift_cli-0.7.2 → grift_cli-0.8.0}/corpus/pins-v2026.11.toml +0 -0
  87. {grift_cli-0.7.2 → grift_cli-0.8.0}/corpus/v2026.09/distributions.json +0 -0
  88. {grift_cli-0.7.2 → grift_cli-0.8.0}/corpus/v2026.11/distributions.json +0 -0
  89. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/CORPUS-CANDIDATES-v2026.11-20260822.md +0 -0
  90. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/EVIDENCE-v056-smoke-raw.log +0 -0
  91. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/EVIDENCE-v058-smoke-raw.log +0 -0
  92. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/EVIDENCE-v058b-smoke-raw.log +0 -0
  93. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/EVIDENCE-v059-smoke-raw.log +0 -0
  94. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/EVIDENCE-v059b-smoke-raw.log +0 -0
  95. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/PLAN-v060-20260825.md +0 -0
  96. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/READERS-GUIDE-draft-20260822.md +0 -0
  97. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/RESEARCH-v060.md +0 -0
  98. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/V060-CLOSURE-LEDGER-20260831.md +0 -0
  99. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/alignment-schema.md +0 -0
  100. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/contribute-intake-design-20260822.md +0 -0
  101. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/corpus-protocol.md +0 -0
  102. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/coverage-map.md +0 -0
  103. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/en/corpus-protocol.md +0 -0
  104. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/en/coverage-map.md +0 -0
  105. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/en/export-schema.md +0 -0
  106. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/en/identity-schema.md +0 -0
  107. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/en/persona-answers.md +0 -0
  108. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/en/report-schema.md +0 -0
  109. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/evidence/v060/attest-portfolio.md +0 -0
  110. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/evidence/v060/grift-2055-audit.md +0 -0
  111. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/export-schema.md +0 -0
  112. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/identity-schema.md +0 -0
  113. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/input-export-schema.md +0 -0
  114. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/migration-v060.md +0 -0
  115. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/migration-v070.md +0 -0
  116. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/migration-v071.md +0 -0
  117. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/migration-v072.md +0 -0
  118. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/persona-answers.md +0 -0
  119. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/project-schema.md +0 -0
  120. {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/rereview-checklist-template.md +0 -0
  121. {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/README.md +0 -0
  122. {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/coverage.md +0 -0
  123. {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G1-click.json +0 -0
  124. {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G10-scvi-tools.json +0 -0
  125. {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G11-kilo.json +0 -0
  126. {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G12-httpx.json +0 -0
  127. {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G13-voicevox.json +0 -0
  128. {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G2-gitignore.json +0 -0
  129. {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G3-spoon-knife.json +0 -0
  130. {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G4-express.json +0 -0
  131. {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G5-typer.json +0 -0
  132. {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G6-claude-code.json +0 -0
  133. {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G7-axios.json +0 -0
  134. {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G8-co.json +0 -0
  135. {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G9-pyscript.json +0 -0
  136. {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/identity/G1-click.toml +0 -0
  137. {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/identity/example.toml +0 -0
  138. {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/pins.toml +0 -0
  139. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/action_contract_guard.py +0 -0
  140. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/admission_v2026_11.py +0 -0
  141. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/build_dist_v2026_11.py +0 -0
  142. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/build_distributions.py +0 -0
  143. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/build_library_prevalence.py +0 -0
  144. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/check_forbidden_vocab.py +0 -0
  145. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/corpus_ad_pilot.py +0 -0
  146. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/corpus_run.py +0 -0
  147. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/discriminant_v2026.py +0 -0
  148. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/discriminant_v2026_11.py +0 -0
  149. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/gen_coverage_table.py +0 -0
  150. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/gen_golden_expected.py +0 -0
  151. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/hygiene_grep.py +0 -0
  152. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/intake_contract_parity.py +0 -0
  153. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/package_smoke.py +0 -0
  154. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/v060_blind_pilot.py +0 -0
  155. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/v060_golden.py +0 -0
  156. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/v060_golden_baseline.py +0 -0
  157. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/v060_provider_live_gate.py +0 -0
  158. {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/v060_scenario_matrix.py +0 -0
  159. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_cli/__init__.py +0 -0
  160. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_cli/benchmark_cmd.py +0 -0
  161. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_cli/options.py +0 -0
  162. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_cli/output.py +0 -0
  163. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_cli/subject.py +0 -0
  164. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/__init__.py +0 -0
  165. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/activity.py +0 -0
  166. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/actor_basis.py +0 -0
  167. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/ai_identity.py +0 -0
  168. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/archive_events.py +0 -0
  169. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/attest.py +0 -0
  170. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/attribution.py +0 -0
  171. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark.py +0 -0
  172. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/data/alignment_cases.jsonl +0 -0
  173. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/data/gharchive_daily_summary.csv +0 -0
  174. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/data/gharchive_events_2024-01-15_to_21.ndjson +0 -0
  175. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/data/gharchive_repository_summary.csv +0 -0
  176. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/data/independent_repo_actor_audit_2026-08-30.json +0 -0
  177. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/data/metric_catalog.csv +0 -0
  178. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/data/role_ground_truth_sample.csv +0 -0
  179. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/data/role_label_counts.csv +0 -0
  180. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/data/tracker_lifecycle_fixture.csv +0 -0
  181. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/expected/tracker_fixture_expected.json +0 -0
  182. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/schemas/benchmark-manifest.schema.json +0 -0
  183. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/schemas/event-observation.schema.json +0 -0
  184. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/schemas/role-validation.schema.json +0 -0
  185. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/sources.json +0 -0
  186. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/cochange.py +0 -0
  187. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/complementarity.py +0 -0
  188. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/context_profile.py +0 -0
  189. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/contribution_v2.py +0 -0
  190. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/coordination.py +0 -0
  191. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/core_period.py +0 -0
  192. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/data/prevalence/v2026.09/library_prevalence.json +0 -0
  193. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/data/v2026.09/distributions.json +0 -0
  194. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/data/v2026.11/distributions.json +0 -0
  195. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/dates.py +0 -0
  196. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/dependency_manifest.py +0 -0
  197. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/digest.py +0 -0
  198. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/event_rhythm.py +0 -0
  199. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/experience.py +0 -0
  200. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/experience_collect.py +0 -0
  201. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/export.py +0 -0
  202. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/forge.py +0 -0
  203. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/forge_public.py +0 -0
  204. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/gitutil.py +0 -0
  205. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/identity.py +0 -0
  206. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/lineage.py +0 -0
  207. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/local_inputs.py +0 -0
  208. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/observation.py +0 -0
  209. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/origin.py +0 -0
  210. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/outcome.py +0 -0
  211. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/path_surface.py +0 -0
  212. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/paths.py +0 -0
  213. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/portfolio.py +0 -0
  214. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/prevalence.py +0 -0
  215. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/project.py +0 -0
  216. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/public_evidence.py +0 -0
  217. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/public_fetch.py +0 -0
  218. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/reference.py +0 -0
  219. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/revision.py +0 -0
  220. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/rework.py +0 -0
  221. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/role_lens.py +0 -0
  222. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/role_profile.py +0 -0
  223. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/role_validation.py +0 -0
  224. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/schema.py +0 -0
  225. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/schema_v2.py +0 -0
  226. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/schemas/__init__.py +0 -0
  227. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/scope.py +0 -0
  228. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/secrets_guard.py +0 -0
  229. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/secure_output.py +0 -0
  230. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/source_binding.py +0 -0
  231. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/surface_profile.py +0 -0
  232. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/survival.py +0 -0
  233. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/tagset.py +0 -0
  234. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/tendency.py +0 -0
  235. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/tests_observed.py +0 -0
  236. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/tracker.py +0 -0
  237. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/tracker_lifecycle.py +0 -0
  238. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/verification_profile.py +0 -0
  239. {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/verify.py +0 -0
  240. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/conftest.py +0 -0
  241. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/coverage_matrix.py +0 -0
  242. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/fixtures/v060/forge.json +0 -0
  243. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/fixtures/v060/p0-results.json +0 -0
  244. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/fixtures/v060/project-declared.json +0 -0
  245. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/fixtures/v060/project-init.toml +0 -0
  246. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/fixtures/v060/project.toml +0 -0
  247. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/fixtures/v060/repo-smoke-head.json +0 -0
  248. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/fixtures/v060/run_p0_falsify.py +0 -0
  249. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/fixtures/v060/tracker.json +0 -0
  250. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/git_fixture.py +0 -0
  251. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_action_contract.py +0 -0
  252. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_activity.py +0 -0
  253. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_benchmark_pack_v060.py +0 -0
  254. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_cli.py +0 -0
  255. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_cli_v060.py +0 -0
  256. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_cochange.py +0 -0
  257. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_context_profile.py +0 -0
  258. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_contribute.py +0 -0
  259. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_coverage.py +0 -0
  260. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_default_report_path.py +0 -0
  261. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_export.py +0 -0
  262. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_export_recipe.py +0 -0
  263. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_forbidden_vocab.py +0 -0
  264. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_gitutil.py +0 -0
  265. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_gloss_gates.py +0 -0
  266. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_golden.py +0 -0
  267. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_h5_swarm.py +0 -0
  268. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_hygiene.py +0 -0
  269. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_identity_validation.py +0 -0
  270. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_intake_contract_parity.py +0 -0
  271. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_intake_disclosure.py +0 -0
  272. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_lifecycle_v2.py +0 -0
  273. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_migration_v060.py +0 -0
  274. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_not_observed.py +0 -0
  275. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_origin.py +0 -0
  276. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_package_contract.py +0 -0
  277. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_persona_answers.py +0 -0
  278. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_publish_baseline_pin.py +0 -0
  279. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_release_gate.py +0 -0
  280. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_report.py +0 -0
  281. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_rework.py +0 -0
  282. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_schema.py +0 -0
  283. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_scope.py +0 -0
  284. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_shared_block.py +0 -0
  285. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_survival.py +0 -0
  286. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_ux_v057.py +0 -0
  287. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_actor_account_source_binding_cli.py +0 -0
  288. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_actor_artifacts.py +0 -0
  289. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_actor_partition.py +0 -0
  290. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_actor_public_directory.py +0 -0
  291. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_alignment.py +0 -0
  292. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_attest_core.py +0 -0
  293. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_attest_input_binding.py +0 -0
  294. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_attest_portfolio_cli.py +0 -0
  295. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_binding_quality.py +0 -0
  296. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_blind_pilot.py +0 -0
  297. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_bound_export_observations.py +0 -0
  298. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_complete.py +0 -0
  299. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_contribute_atomic_consent.py +0 -0
  300. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_contribution_profiles.py +0 -0
  301. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_cross_repo.py +0 -0
  302. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_determinism.py +0 -0
  303. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_emit_robustness.py +0 -0
  304. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_experience_collect.py +0 -0
  305. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_experience_incomplete.py +0 -0
  306. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_experience_product_cli.py +0 -0
  307. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_experience_role.py +0 -0
  308. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_forge_evidence.py +0 -0
  309. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_golden_runner.py +0 -0
  310. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_historical_exact_head.py +0 -0
  311. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_identity_v2.py +0 -0
  312. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_independent_audit.py +0 -0
  313. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_inputs.py +0 -0
  314. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_large_repo_degradation.py +0 -0
  315. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_no_false_zero.py +0 -0
  316. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_observed_compare.py +0 -0
  317. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_p0_runner.py +0 -0
  318. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_portfolio_core.py +0 -0
  319. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_provider_live_gate.py +0 -0
  320. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_provider_live_workflow.py +0 -0
  321. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_public_actor_presentation.py +0 -0
  322. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_public_evidence_contract.py +0 -0
  323. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_public_registry_export.py +0 -0
  324. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_report_deep_schema.py +0 -0
  325. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_report_strict_producer.py +0 -0
  326. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_revision.py +0 -0
  327. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_rhythm.py +0 -0
  328. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_schema.py +0 -0
  329. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_schema_contracts.py +0 -0
  330. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_subject_source_binding_cli.py +0 -0
  331. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_surfaces.py +0 -0
  332. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_verify_fixed_revision.py +0 -0
  333. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_verify_inferred_actor.py +0 -0
  334. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_actor_time_phase.py +0 -0
  335. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_align_share.py +0 -0
  336. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_cli_surface.py +0 -0
  337. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_complementarity.py +0 -0
  338. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_dependency_attribution.py +0 -0
  339. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_dependency_experience.py +0 -0
  340. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_dependency_manifest.py +0 -0
  341. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_history_incomplete.py +0 -0
  342. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_intake_contract.py +0 -0
  343. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_library_prevalence.py +0 -0
  344. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_norms_link.py +0 -0
  345. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_outcome.py +0 -0
  346. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_project_min_share.py +0 -0
  347. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_scale_denominator.py +0 -0
  348. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v071_bot_accounts.py +0 -0
  349. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v071_gate_failure_detail.py +0 -0
  350. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v071_response_completeness.py +0 -0
  351. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v072_empty_actor.py +0 -0
  352. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_verb_semantics.py +0 -0
  353. {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_verify.py +0 -0
@@ -0,0 +1,79 @@
1
+ name: バグ報告 / Bug report
2
+ description: 期待と違う出力・終了コード・クラッシュ。An output, exit code or crash that differs from what you expected.
3
+ title: "fix: "
4
+ labels: ["bug"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ 観測値と期待値を分けて書いてください。再現に使う repo は「形」が分かれば十分です(公開 URL + SHA、または合成 repo を作るスクリプト)。
10
+ 秘密情報・生メールアドレス・非公開 repo の履歴は貼らないでください。脆弱性は Issue ではなく [SECURITY.md](https://github.com/Cor-Incorporated/grift-cli/blob/main/SECURITY.md) の窓口へ。
11
+
12
+ Please separate what you observed from what you expected. For the repository, its *shape* is enough (public URL + SHA, or a script that builds a synthetic repo).
13
+ Do not paste secrets, raw email addresses or private history. Vulnerabilities go to [SECURITY.md](https://github.com/Cor-Incorporated/grift-cli/blob/main/SECURITY.md), not to an issue.
14
+ - type: textarea
15
+ id: command
16
+ attributes:
17
+ label: 実行したコマンド / Command you ran
18
+ description: フラグも含めてそのまま。As typed, including flags.
19
+ render: bash
20
+ placeholder: |
21
+ grift repo . --format json
22
+ validations:
23
+ required: true
24
+ - type: textarea
25
+ id: observed
26
+ attributes:
27
+ label: 観測値 / What you observed
28
+ description: 出力(必要な部分だけ)と終了コード。stderr があればそれも。Output (the relevant part), exit code, and stderr if any.
29
+ render: text
30
+ validations:
31
+ required: true
32
+ - type: textarea
33
+ id: expected
34
+ attributes:
35
+ label: 期待値 / What you expected
36
+ description: どの文書・help・過去の版からそう期待したかも書いてください。Say which document, help text or earlier version led you to expect it.
37
+ validations:
38
+ required: true
39
+ - type: dropdown
40
+ id: repo-shape
41
+ attributes:
42
+ label: 再現 repo の形 / Shape of the reproducing repository
43
+ options:
44
+ - 公開 repo(URL と SHA を下に書く)/ Public repository (URL + SHA below)
45
+ - 合成 repo(作るスクリプトを下に書く)/ Synthetic repository (script below)
46
+ - 非公開で共有できない(形だけ下に書く)/ Private, cannot share (describe the shape below)
47
+ - この grift-cli リポジトリ自身 / This grift-cli repository itself
48
+ validations:
49
+ required: true
50
+ - type: textarea
51
+ id: repo-detail
52
+ attributes:
53
+ label: 再現 repo の詳細 / Repository details
54
+ description: |
55
+ URL + SHA、または `git init` から始まる最小スクリプト。共有できないときは commit 数・著者数・merge の有無・shallow / promisor か・bot commit の有無・identity の有無を書いてください。
56
+ URL + SHA, or a minimal script starting at `git init`. If you cannot share it: number of commits and authors, merges or not, shallow / promisor or not, bot commits or not, identity file or not.
57
+ render: bash
58
+ - type: input
59
+ id: version
60
+ attributes:
61
+ label: バージョン / Version
62
+ description: "`grift --version` の出力。The output of `grift --version`."
63
+ placeholder: grift 0.7.2
64
+ validations:
65
+ required: true
66
+ - type: input
67
+ id: env
68
+ attributes:
69
+ label: 環境 / Environment
70
+ description: OS、Python の版、入れ方(pipx / pip / GitHub Action)。OS, Python version, how installed (pipx / pip / GitHub Action).
71
+ placeholder: macOS 15 / Python 3.12.9 / pipx
72
+ - type: checkboxes
73
+ id: hygiene
74
+ attributes:
75
+ label: 確認 / Checks
76
+ options:
77
+ - label: 秘密情報・生メールアドレス・非公開履歴を貼っていない / No secrets, raw email addresses or private history are pasted above
78
+ required: true
79
+ - label: 同じ内容の Issue が無いか検索した / I searched for an existing issue
@@ -0,0 +1,11 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: 脆弱性の報告 / Report a vulnerability
4
+ url: https://github.com/Cor-Incorporated/grift-cli/blob/main/SECURITY.md
5
+ about: 公開 Issue には書かず、SECURITY.md の窓口へ。Do not open a public issue; use the channel in SECURITY.md.
6
+ - name: 非公開の連絡(削除依頼など)/ Private contact (removal requests etc.)
7
+ url: https://cor-jp.com/contact/
8
+ about: golden identity の削除依頼など、公開したくない内容はこちら。For anything you do not want public, such as removal requests for golden identities.
9
+ - name: 利用規範(TEP 準拠の条件)/ Usage norms
10
+ url: https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/norms.md
11
+ about: 「この使い方は TEP 準拠か」はまず 7 条を読んでから。Read the seven articles before asking whether a use is TEP-compliant.
@@ -0,0 +1,52 @@
1
+ name: 機能の提案 / Feature request
2
+ description: 新しい観測・フラグ・出力形式の提案。A new observation, flag or output format.
3
+ title: "feat: "
4
+ labels: ["enhancement"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ grift は合成スコア・順位・推奨・合否を出しません([CONTRIBUTING.md](https://github.com/Cor-Incorporated/grift-cli/blob/main/CONTRIBUTING.md) §7、[docs/norms.md](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/norms.md))。
10
+ それに当たる提案は、どれだけ便利でも受けられないので、先に下のチェックを見てください。
11
+
12
+ grift never produces a composite score, rank, recommendation or pass/fail ([CONTRIBUTING.en.md](https://github.com/Cor-Incorporated/grift-cli/blob/main/CONTRIBUTING.en.md) §7, [docs/en/norms.md](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/en/norms.md)).
13
+ A proposal that amounts to one cannot be accepted however useful it is, so please look at the checklist below first.
14
+ - type: textarea
15
+ id: observed
16
+ attributes:
17
+ label: 今の出力で困っていること(観測値)/ What today's output does (observed)
18
+ description: 実際に実行したコマンドと、今返ってくるもの。The command you ran and what comes back today.
19
+ render: text
20
+ validations:
21
+ required: true
22
+ - type: textarea
23
+ id: expected
24
+ attributes:
25
+ label: 望む出力(期待値)/ What you want it to do (expected)
26
+ description: 可能なら report の JSON キー名や Markdown の文面の案まで。単位・分母・観測窓も。If you can, propose the JSON key, the Markdown wording, and its unit, denominator and window.
27
+ validations:
28
+ required: true
29
+ - type: textarea
30
+ id: repo-shape
31
+ attributes:
32
+ label: 違いが出る repo の形 / Shape of a repository where the difference shows
33
+ description: |
34
+ 公開 repo の URL + SHA、または合成 repo を作るスクリプト。提案した観測が「観測できる repo」と「not_observed になる repo」の両方があると議論が速いです。
35
+ Public URL + SHA, or a script that builds a synthetic repo. One repo where the observation is possible and one where it must be `not_observed` speeds things up.
36
+ render: bash
37
+ - type: checkboxes
38
+ id: design
39
+ attributes:
40
+ label: 設計上の確認 / Design checks
41
+ options:
42
+ - label: 人を 1 つの数値・等級・順位に縮約しない / Does not reduce a person to one number, grade or rank
43
+ required: true
44
+ - label: 「膨らませ方」(形式的な操作で値が上がる経路)を一緒に書いた / I described how the value could be inflated by formal operations
45
+ required: true
46
+ - label: 母数 20 未満・履歴不完全のときに `not_observed` になる条件を書いた / I described when it becomes `not_observed` (population below 20, incomplete history)
47
+ - label: 新しい network 経路を必要としない。必要なら opt-in フラグ付き / Needs no new network path, or only behind an opt-in flag
48
+ - type: textarea
49
+ id: alternatives
50
+ attributes:
51
+ label: 代替案 / Alternatives
52
+ description: 既存のフラグや文書で代わりになるものを試したか。What existing flags or documents you tried instead.
@@ -0,0 +1,52 @@
1
+ name: 質問 / Question
2
+ description: 出力の読み方、使い方、文書の分かりにくさ。How to read an output, how to use a command, unclear documentation.
3
+ title: "question: "
4
+ labels: ["question"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ 先に見ると早いもの: [README](https://github.com/Cor-Incorporated/grift-cli/blob/main/README.md) の「試す」、[docs/metrics-guide.md](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/metrics-guide.md)(数値の読み方)、[docs/norms.md](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/norms.md)(利用規範)。
10
+ 「文書を読んでも分からなかった」という報告は、それ自体が文書のバグなので歓迎です。
11
+
12
+ Worth a look first: the "Try it" section of the [README](https://github.com/Cor-Incorporated/grift-cli/blob/main/README.en.md), [docs/en/metrics-guide.md](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/en/metrics-guide.md) (how to read the numbers), [docs/en/norms.md](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/en/norms.md) (usage norms).
13
+ "I read the docs and still did not get it" is a documentation bug and welcome here.
14
+ - type: textarea
15
+ id: question
16
+ attributes:
17
+ label: 質問 / Question
18
+ validations:
19
+ required: true
20
+ - type: textarea
21
+ id: observed
22
+ attributes:
23
+ label: 見た出力(観測値)/ The output you saw (observed)
24
+ description: 実行したコマンドと、問題の部分。The command and the part of the output in question.
25
+ render: text
26
+ - type: textarea
27
+ id: expected
28
+ attributes:
29
+ label: そう思った理由(期待値)/ What you expected and why
30
+ description: どの文書や経験からそう期待したか。Which document or experience led you to expect something else.
31
+ - type: dropdown
32
+ id: repo-shape
33
+ attributes:
34
+ label: 見ていた repo の形 / Shape of the repository you were looking at
35
+ options:
36
+ - 公開 repo(URL と SHA を下に)/ Public repository (URL + SHA below)
37
+ - 自分の非公開 repo(形だけ下に)/ My private repository (shape below)
38
+ - まだ実行していない / Have not run it yet
39
+ - type: textarea
40
+ id: repo-detail
41
+ attributes:
42
+ label: repo の詳細 / Repository details
43
+ description: URL + SHA、または commit 数・著者数・merge / shallow / bot の有無。URL + SHA, or commits, authors, merges / shallow / bots.
44
+ - type: checkboxes
45
+ id: read
46
+ attributes:
47
+ label: 読んだもの / What you already read
48
+ options:
49
+ - label: README の「試す」/ The "Try it" section of the README
50
+ - label: docs/metrics-guide.md(数値の読み方)/ docs/en/metrics-guide.md
51
+ - label: docs/norms.md(利用規範)/ docs/en/norms.md
52
+ - label: CONTRIBUTING.md
@@ -0,0 +1,66 @@
1
+ <!--
2
+ 1 PR = 1 意図。ブランチ名と PR タイトルの type(feat / fix / docs / refactor / chore / ci / test / perf)を一致させてください。
3
+ 作法と禁止事項は CONTRIBUTING.md §6 / §7。英語版は CONTRIBUTING.en.md。
4
+ One PR, one intent. Branch name and PR title share a type. Etiquette and prohibitions: CONTRIBUTING.en.md §6 / §7.
5
+ -->
6
+
7
+ ## 目的 / Purpose
8
+
9
+ <!-- この PR が変える 1 つのこと。関連 Issue があれば `Closes #N`。The one thing this PR changes. `Closes #N` if there is an issue. -->
10
+
11
+ ## 変更の種類 / Kind of change
12
+
13
+ - [ ] docs(文書のみ。`src/` に触れない / documentation only, no `src/`)
14
+ - [ ] fix
15
+ - [ ] feat(テストを含む / ships with tests)
16
+ - [ ] refactor / chore / ci / test / perf
17
+
18
+ ## 変更内容 / What changed
19
+
20
+ <!-- 箇条書きで。ファイルと理由。Bullets: file and why. -->
21
+
22
+ ## 実行したテスト / Tests you ran
23
+
24
+ ```text
25
+ python -m pytest tests -m "not golden" -q
26
+ # → passed / failed の件数をここに貼る。Paste the passed / failed counts here.
27
+ ```
28
+
29
+ ## H5-E2E
30
+
31
+ <!--
32
+ 実際に実行したコマンドと、その生出力の要約(20 文字以上)または安定したログ path。
33
+ 実行環境を持たない変更(docs のみ)は `H5-E2E: none` の 1 行。
34
+ The command you actually ran and a summary of its raw output (20+ characters) or a stable log path.
35
+ For changes with no runtime (docs only), the single line `H5-E2E: none`.
36
+ -->
37
+
38
+ ```text
39
+ H5-E2E: <command>
40
+ H5-E2E-OUT: <raw output summary or log path>
41
+ ```
42
+
43
+ ## ADR-0001 の確認 G / R / B(`src/`・schema・norms に触れた PR は必須)/ ADR-0001 check (required when `src/`, a schema or the norms change)
44
+
45
+ <!-- 定義は CONTRIBUTING.md §6。該当しない欄は「該当なし」と書く。Definitions in CONTRIBUTING.en.md §6. Write "not applicable" where nothing qualifies. -->
46
+
47
+ - **G(Green)** 受入条件を満たすテストが通った / the acceptance test passes:
48
+ - **R(Red)** 片側だけ変えると落ちることを実測した(何を壊して何が落ちたか)/ one-sided change fails (what you broke, what failed):
49
+ - **B(Binding)** 宣言と実体を 1 つのテストで結んだ / declaration and enforcement tied by one test:
50
+
51
+ ## 証跡ゲート / Evidence gates(`src/` に触れた PR のみ / only when `src/` changed)
52
+
53
+ <!-- CONTRIBUTING.md §5 の 4 本。赤になったものと、意図した出力変更かどうか。The four gates in CONTRIBUTING.en.md §5: which went red, and whether the output change is intended. -->
54
+
55
+ - [ ] #1 `evidence/v060/scenarios` — 緑 / 再生成した / 赤のまま(理由: )
56
+ - [ ] #2 `evidence/v060/scenarios-public` — 赤でも可。release で再束縛 / may stay red; re-bound at release
57
+ - [ ] #3 `evidence/v070/benchmark.json` — 緑 / 再生成した
58
+ - [ ] #4 `benchmarks/v060/golden` + `DEFINITION_VERSION` — 緑 / 上げた
59
+
60
+ ## チェック / Checklist
61
+
62
+ - [ ] 合成スコア・順位・推奨・合否を出す出力やキーを足していない(`FORBIDDEN_VERDICT_KEYS`、`check_forbidden_vocab`)/ No score, rank, recommendation or pass/fail output or key
63
+ - [ ] 新しい network 経路は無い。あるなら opt-in フラグ付き / No new network path, or only behind an opt-in flag
64
+ - [ ] 生メールアドレス・個人を特定する値を出力・テスト fixture・文書に載せていない / No raw email or identifying value in output, fixtures or docs
65
+ - [ ] 文書を変えたなら日英両方(`README.md` ↔ `README.en.md`、`docs/*` ↔ `docs/en/*`)/ Docs changed in both languages
66
+ - [ ] 利用者に見える変更は `CHANGELOG.md` の `[Unreleased]` に 1 行 / One line under `[Unreleased]` for anything a user can see
@@ -4,6 +4,103 @@
4
4
 
5
5
  タグ・PyPI・リポ public 化は本ファイルの記載対象外(人間ゲート)。
6
6
 
7
+ ## [Unreleased]
8
+
9
+ ### Changed
10
+
11
+ - **README を日英とも書き直し、PyPI の説明を英語にした**。冒頭で「何を出すか・何を
12
+ 出さないか・1 コマンドで試す」が分かる構成にし、版ごとの修正履歴は本ファイルと
13
+ migration へのリンクだけにした。コマンドの詳しい使い方は `docs/usage.md` /
14
+ `docs/en/usage.md`、指標の限界・参照用の位置・群のあいだの判別結果は
15
+ `docs/validation.md` / `docs/en/validation.md` へ内容を移した。`pyproject.toml` の
16
+ `readme` を `README.en.md`(リンクはすべて絶対 URL)に、`description` を評価に
17
+ 読めない 1 行に変え、`project_urls` に Homepage(griftai.org)・Documentation・
18
+ Japanese README・Changelog・Source・Issues を揃えた。README を読む検査は移した先の
19
+ 文書を読むように直し、PyPI に出る README の相対リンク・`project_urls` の参照先・
20
+ リンクの見出しを `tests/test_readme_entry.py` で検査する。CLI の出力は変わらない。
21
+
22
+ ## [0.8.0] — 2026-10-25
23
+
24
+ 面は増えない。公開面が約束する「点数や順位はつけない」「選んで出したことも受け取る側に
25
+ 分かる」「量は誰でも作れる」を既定出力に揃える release。CLI フラグ・schema key・enum 値は
26
+ 変わらない。公開 Forge 取得(provider-neutral Forge証跡、GitHub/GitLab/self-managed、
27
+ PARTIAL/resume)、attest / portfolio、contribution-v2 の契約、`暗黙 PyPI update check` を
28
+ 持たない設計はいずれも 0.7.2 から変わらない。判断の根拠は
29
+ `docs/adr/ADR-0001-v08-no-volume-ordering.md`、公開面との突合は
30
+ `docs/GAP-site-vs-cli-v08-20261025.md`、移行は `docs/migration-v080.md`。
31
+
32
+ ### Added
33
+
34
+ - **活動日数の膨らませ方を数値の隣に開示する**(ADR-0001 R4、GAP-site-vs-cli
35
+ 行 4)。`tep_core.v2_constants.ACTIVE_DAYS_INFLATION_LIMITATION` の 1 文
36
+ (毎日 1 件の小さな commit で増え、1 日にまとめると減る。量や中身は見ない)
37
+ を report-v1 のトップレベル `limitations`(新 optional key。`activity` の
38
+ 中に置かないのは P0 反証 `P0-legacy-activity-parity` が同ブロックを v0.5.9
39
+ と同一に保つため)、report-v2 `activity.limitations`、report-v2
40
+ `change_rhythm.limitations`、`align` の `change_rhythm.active_days_180d`
41
+ 軸の `limitations` と、それぞれの Markdown に固定で載せる。開示であって
42
+ 補正ではなく、値・比較結果・schema の必須項目は変えない(norms §7)。
43
+ `verify` は `limitations` も再計算して比べる。同じ定義版数の build 間では
44
+ report-v1 のトップレベル `limitations` と report-v2 の `activity.limitations` /
45
+ `change_rhythm.limitations` が差として出る(PR #77 本文の実測)。release で
46
+ `DEFINITION_VERSION` を上げた後は、0.7.x で保存した report は field 比較の前に
47
+ 定義版数の不一致で CANNOT_VERIFY になる(`verify.py` の定義版数検査)。
48
+ `DEFINITION_VERSION` と `__version__` は release PR で上げる。
49
+ - 単体の actor report-v2 と alignment-v1 の `notices` に、提供者が選んだ 1 repo で
50
+ あることを示す固定文 `SELECTIVITY_NOTICE`(norms §6)を常に載せる。Markdown の
51
+ 「言えること / 言えないこと」にも同じ文を出す。schema は `notices: array<string>`
52
+ のため追加互換だが、`verify` は `notices` も再計算して比べるので 0.7.x で保存した
53
+ actor report と alignment-v1 は 0.8.0 の verify で MISMATCH になる(release PR の
54
+ `DEFINITION_VERSION` と migration で扱う)。文は英語で固定(両側が読む 1 文を
55
+ collection の英語 limitation 文に揃えた決定。GAP 行 7 の日本語案は採らない)。
56
+ collection の `repo-report.json`(kind=repo)と actor-card-v1 は対象外。
57
+
58
+ ### Changed
59
+
60
+ - **`DEFINITION_VERSION` を `tep-v0.8.0-2026-10-25` に上げた**。版数への追随に加えて、
61
+ actor-index / `actor_directory` の形(行順)と、actor report-v2 / alignment の
62
+ `notices`、report-v1 / report-v2 の `limitations` の内容が変わるため。0.7.x で
63
+ 保存した report は 0.8.0 の `verify` で定義版数の不一致により CANNOT_VERIFY、
64
+ collection は index の行順検査で MISMATCH になる(`docs/migration-v080.md`)。
65
+ - **証跡を 0.8.0 の source で再束縛した**: `evidence/v060/scenarios`(6 シナリオ。
66
+ R01 / R02 の source は 2026-09-27 の bundle から復元)、`evidence/v060/scenarios-public`
67
+ (PR tier 実走)、`evidence/v070/benchmark.json`(`--write`)、`benchmarks/v060/golden`
68
+ (承認移行 `gold-actor-partition-0005`、承認者 human:teradakousuke)。
69
+ - **actor を列挙する既定出力の行順を actor id 順にした**(0.8.0 #1、ADR-0001 R1)。
70
+ 0.7.2 までは、`actor-index.json` / `actor-index.md` の行と selected card の
71
+ 列挙(`actor_artifacts.py` の `-len(commit_shas)` ソート)と、`grift repo` の
72
+ report-v2 `actor_directory.actors`(`attribution.py` の同じソートをそのまま
73
+ 出力し、Markdown は先頭 50 行で切っていた = 事実上の上位 50 名表)の 2 箇所が
74
+ 観測 commit 数の多い順だった。注記「not a quality ranking」は宣言のまま、
75
+ 表の並びという実体は量で決まっていた。公開面の「点数や順位はつけない」と
76
+ 食い違うので並び順だけを直し、`commit_count` の値は分母付きの事実として
77
+ 残す。actor id は identity があれば canonical_id、無ければ `actor_<hash>`。`--top N` が選ぶ N 名は変わらない(量で選ぶ経路は 0.9 で
78
+ 廃止か改名をユーザーが判断する。`docs/PLAN-v080-20261025.md` §2.3)。
79
+ `grift verify DIR` は、行が actor id 順でない index、行順に従わない
80
+ selection、最多 commit の集合でない `top` selection を digest 比較の前に
81
+ 拒否し、CLI の collection verify は writer と同じ `actor_summaries` で行を
82
+ 再構成する(0.7.x は verify 側に同じソートの複製があった)。**0.7.x で生成
83
+ した collection は 0.8.0 の `verify` で MISMATCH になる**(複数 actor なら
84
+ `actor index rows must be ordered by actor id …`、行が偶然 id 順でも
85
+ `actor-index.md` の注記差で `actor index Markdown does not match verified
86
+ JSON`)。release 時に `DEFINITION_VERSION` を上げ、migration に実測を載せる。
87
+
88
+ ### Fixed
89
+
90
+ - **shallow clone 上で offline suite が `not our ref` / `not a tree object`
91
+ で落ちる**。`tests/test_v070_benchmark.py` と
92
+ `tests/test_v060_scenario_matrix.py` の registry 検証は、この repo 自身の
93
+ 履歴(`PINNED_OID`、runner binding の `commit_oid`)を `file://` で fetch
94
+ して測る。`actions/checkout@v4` 既定の `--depth 1` で公開 repo を取得した
95
+ 消費側(grift-sales-poc run 40165305773、2026-10-25)にはその commit が
96
+ 無く、ローカル upload-pack の拒否が GitHub 側のエラーのように見えていた
97
+ (GitHub 自体は同じ SHA を `git fetch` に返す)。shallow clone でその
98
+ commit が無い場合だけ理由付き skip にし、full clone で pin が無い場合は
99
+ 従来どおり fail させる。検出関数は合成 repo の反証テスト付き。
100
+ `scripts/v060_scenario_matrix.py` は registry の source binding 対象の
101
+ ため触っていない(`fatal: not a tree object` の文言改善は再束縛を伴う
102
+ 次の release 作業へ)。
103
+
7
104
  ## [0.7.2] — 2026-09-07
8
105
 
9
106
  面は 1 つも増えない。commit がまだ 1 件も無い actor に対して report が
@@ -0,0 +1,193 @@
1
+ Metadata-Version: 2.5
2
+ Name: grift-cli
3
+ Version: 0.8.0
4
+ Summary: Reads git history and reports who changed what and when, with the counting rule beside every number.
5
+ Project-URL: Homepage, https://griftai.org
6
+ Project-URL: Documentation, https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/en/usage.md
7
+ Project-URL: Japanese README, https://github.com/Cor-Incorporated/grift-cli/blob/main/README.md
8
+ Project-URL: Changelog, https://github.com/Cor-Incorporated/grift-cli/blob/main/CHANGELOG.md
9
+ Project-URL: Source, https://github.com/Cor-Incorporated/grift-cli
10
+ Project-URL: Issues, https://github.com/Cor-Incorporated/grift-cli/issues
11
+ Author: TEP contributors
12
+ License: MIT
13
+ License-File: LICENSE
14
+ Keywords: evidence,git,origin,provenance,tep
15
+ Classifier: Development Status :: 3 - Alpha
16
+ Classifier: Environment :: Console
17
+ Classifier: Intended Audience :: Developers
18
+ Classifier: License :: OSI Approved :: MIT License
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Topic :: Software Development :: Quality Assurance
23
+ Requires-Python: >=3.11
24
+ Provides-Extra: dev
25
+ Requires-Dist: build>=1.2; extra == 'dev'
26
+ Requires-Dist: jsonschema<5,>=4; extra == 'dev'
27
+ Requires-Dist: pytest>=8.0; extra == 'dev'
28
+ Description-Content-Type: text/markdown
29
+
30
+ **English** | [日本語](https://github.com/Cor-Incorporated/grift-cli/blob/main/README.md)
31
+
32
+ # grift
33
+
34
+ grift shows what kind of code an engineer has changed, how much, and how often those changes came with tests. It reads this from git, the system that records every change to a codebase, and every number comes with the counts behind it. grift does not score or rank anyone.
35
+
36
+ ## How you might use it
37
+
38
+ ### If you are an engineer looking for a project
39
+
40
+ If you wrote a repository (the place where code and its change history live) on your own, run `grift repo` on it to see which areas you have worked in, how much, and how often your changes came with tests, all with counts. If you shared the repository with others, list yourself in an identity file (a list of who wrote under which email address) and use `grift actor` to count only your own changes. Either way, you can put checkable facts next to the experience listed on your résumé. You decide which repositories to show and whether to share them at all.
41
+
42
+ ### If you introduce engineers to projects
43
+
44
+ You can use a record that a candidate chose to share as material when you explain why you recommend them. Pass the numbers on together with their counts, such as "12 of 40" (a made-up figure). The [usage norms](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/en/norms.md) treat cutting candidates on a single number, or ranking people, as non-compliant use.
45
+
46
+ ### If you are looking for engineers for a project
47
+
48
+ Run `grift project --init --out .tep/project.toml` to get an empty template, and fill in the areas and testing practices you need. `grift align` then places each candidate's record next to those requirements, item by item. It produces no total score and no pass/fail result. Use the numbers to decide what to ask in an interview.
49
+
50
+ ## Try it
51
+
52
+ Engineers can look at their own repository with three commands:
53
+
54
+ ```bash
55
+ pipx install grift-cli
56
+ cd your-repo
57
+ grift repo
58
+ ```
59
+
60
+ At run time grift needs only Python 3.11 or newer and git. The report is printed to your terminal; grift writes no files and sends nothing anywhere. Add `--out DIR` to save it, or `--format json` for machine-readable output. If your shell cannot find `grift`, run `pipx ensurepath` and open a new terminal.
61
+
62
+ The report text is currently in Japanese; the JSON output uses English keys.
63
+
64
+ ## Reading the output
65
+
66
+ `grift repo` prints values like these for the whole repository. Each value comes with its count: how many out of how many.
67
+
68
+ - Areas: for each of 11 areas (tests, docs, CI, frontend, and so on), how many commits (recorded changes) touched files in that area.
69
+ - Intervals: on how many days in the last 180 changes were made, and how many days passed between one change and the next. These are not working hours or speed.
70
+ - Verification: the share of commits that include test files, and which kinds of tests they touch (unit, integration, and so on).
71
+ - People involved: how many commits each person made, listed in ID order rather than by count.
72
+
73
+ The JSON output (`--format json`) and the output of `grift analyze` also include:
74
+
75
+ - Origin: whose work each commit is, in 11 classes, such as commits by people listed in the identity file, by other people, by bots (automated accounts), generated files, and changes inherited from an upstream fork.
76
+ - Test co-change (`test_cochange` in JSON): of the commits that changed production code, the share that also changed tests in the same commit. For example (a made-up case), if 40 commits changed production code and 12 of them also changed tests, the report says 12 of 40.
77
+
78
+ `grift align` places a project's declared requirements next to the values counted from history, item by item. Each item is one of five outcomes: overlap, outside the declared range, zero, not observed, or not declared.
79
+
80
+ A value that could not be measured is never written as 0. It is written as "not observed" with a reason (`not_observed` in the output). A missing record does not mean missing experience. When the population (the total number of items counted) is below 20, the report text shows counts instead of rates.
81
+
82
+ The [metrics guide](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/en/metrics-guide.md) explains each number in plain language. The table that maps the terms used on griftai.org and cor-jp.com to CLI terms is in the [Japanese guide](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/metrics-guide.md#サイトの訳語と-cli-の語の対応表).
83
+
84
+ ## Why we built it
85
+
86
+ When a recruiting agency or an IT staffing firm recommends an engineer for a project, most of what they have to go on is a résumé and an impression from an interview. Meanwhile, "activity" such as commit counts is easy to inflate with generative AI. Cor.Inc. built grift to pull out only the facts that can be checked in git history, together with how they were counted, and released it as open source under the MIT license.
87
+
88
+ grift's numbers can also move with changes made only for show. Some of the known ways to inflate them, such as the number of days with changes, are disclosed next to the numbers in the report.
89
+
90
+ ## How grift differs from self-report assessments and résumés
91
+
92
+ A personality assessment such as MBTI gives you a type based on your answers to a questionnaire. A résumé is also written by the person it describes. Both reflect how people see themselves. (grift is not affiliated with MBTI in any way.)
93
+
94
+ grift asks no questions. It counts what is recorded in git and reports tendencies together with the counts behind them. It does not sort people into types or give them labels. Because the same point in history, the same list of people and the same grift version give the same numbers on anyone's machine, a recipient can recompute them. Getting the same number again is not proof that the number is correct, or that the work is good or better than anyone else's. Work that never reaches git, such as meetings, design discussions, or private repositories, is invisible to grift.
95
+
96
+ ## TEP (Technical Evidence Pipeline)
97
+
98
+ TEP (Technical Evidence Pipeline) is the name of the method grift uses. It is a set of rules: pull checkable facts out of git history, report them with what was counted, over which period, and out of how many, and make it possible for a recipient to recompute them the same way. grift is the command that carries out these rules. No large language model (LLM) is involved in measuring.
99
+
100
+ How the numbers may be used is set out in seven [usage norms](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/en/norms.md). Among them: do not read a missing record as missing experience, do not cut candidates on a single number, do not profile third parties without consent, do not use it for surveillance, and do not weight several numbers into one score. Compliance with these norms is a condition of using the TEP name.
101
+
102
+ ## Main commands
103
+
104
+ - `grift repo`: the record for the whole repository.
105
+ - `grift actor ID`: the record for one person (actor). The ID is a canonical_id from the identity file, or an actor id derived from history when there is no identity file.
106
+ - `grift project`: observe how the repository is run, or read a project's declared requirements (`--requirements`). `--init --out FILE` writes an empty requirements template.
107
+ - `grift align`: place declarations and records side by side, item by item. No overall score.
108
+ - `grift verify`: recompute a saved report under the same conditions and check that it matches. The result is `VERIFIED`, `MISMATCH`, or `CANNOT_VERIFY` (could not be checked).
109
+
110
+ To compare one person's record with a project's requirements:
111
+
112
+ ```bash
113
+ grift actor candidate_001 --identity .tep/identity.toml --format both --out actor-report.json
114
+ grift project --requirements .tep/project.toml --format both --out project-out
115
+ grift align \
116
+ --actor-report actor-report.json \
117
+ --project-report project-out/project.json \
118
+ --format both --out alignment-out
119
+ ```
120
+
121
+ Collections of several people, the identity file, public forge fetch, signing, exit codes, and upgrading from 0.7.x are covered in the [usage guide](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/en/usage.md).
122
+
123
+ ## Data and network
124
+
125
+ grift runs on your machine and uses the network only when you ask it to, for example with `--fetch-public`, `grift update`, or `grift contribute --open`. Each of these is an explicit network path; the [usage guide](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/en/usage.md#operations-that-use-the-network) lists every one. This CLI has no feature that sends data to us automatically, and we will not add one to this CLI. If Cor.Inc. offers a separate application or service built on grift, that service's terms of service and privacy policy will set out how it handles data.
126
+
127
+ `grift contribute`, which submits report values for the reference distributions, runs only when you choose to. Submissions go to the public [tep-contributions](https://github.com/Cor-Incorporated/tep-contributions) repository, and with `--open` the final button is yours.
128
+
129
+ ## GitHub Actions
130
+
131
+ ```yaml
132
+ permissions:
133
+ contents: read
134
+ steps:
135
+ - uses: actions/checkout@v4
136
+ with:
137
+ fetch-depth: 0
138
+ persist-credentials: false
139
+ - uses: actions/setup-python@v5
140
+ with:
141
+ python-version: "3.12"
142
+ - uses: Cor-Incorporated/grift-cli@v0.8.0
143
+ with:
144
+ scope: repo
145
+ comment: false
146
+ ```
147
+
148
+ The action runs `grift analyze`, writes a summary to `$GITHUB_STEP_SUMMARY`, and uploads report.md and report.json as artifacts. It never turns observed values into pass/fail results or thresholds.
149
+
150
+ - It needs the caller repository's full history and Python 3.11 or newer. A missing checkout or a shallow clone stops the run before measurement (fail-closed, exit 2). Invalid inputs also fail closed.
151
+ - Run it with `contents: read` and `comment: false`, so code from a pull request never receives a write token. The `comment: true` path is implemented, but this project's own CI runs read-only, so that path is unproven. Do not grant write permission to pull-request code until a trusted follow-up workflow exists.
152
+
153
+ ## Documentation
154
+
155
+ - [Usage guide](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/en/usage.md)
156
+ - [How to read reports](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/en/metrics-guide.md)
157
+ - [Usage norms](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/en/norms.md)
158
+ - [Metric validation and limits](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/en/validation.md): the design choices behind the numbers and their limits, and results from 117 public repositories, including the comparisons that did not separate
159
+ - Output formats: [report-v1](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/en/report-schema.md), [export](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/en/export-schema.md), [identity](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/en/identity-schema.md); in Japanese: [report-v2](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/report-v2.md), [alignment](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/alignment-schema.md), [project](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/project-schema.md)
160
+ - [Changelog](https://github.com/Cor-Incorporated/grift-cli/blob/main/CHANGELOG.md) and [0.8.0 migration notes](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/migration-v080.md) (both in Japanese)
161
+
162
+ Product site: [griftai.org](https://griftai.org) (Japanese).
163
+
164
+ ## Contributing and support
165
+
166
+ - Questions and bug reports: [Issues](https://github.com/Cor-Incorporated/grift-cli/issues) on the public repository.
167
+ - To change the code or docs, start with [CONTRIBUTING.en.md](https://github.com/Cor-Incorporated/grift-cli/blob/main/CONTRIBUTING.en.md). The code of conduct is [CODE_OF_CONDUCT.md](https://github.com/Cor-Incorporated/grift-cli/blob/main/CODE_OF_CONDUCT.md).
168
+ - Report vulnerabilities as described in [SECURITY.md](https://github.com/Cor-Incorporated/grift-cli/blob/main/SECURITY.md), not in a public issue.
169
+ - To ask for removal of an email address in the test data (taken from public commit metadata), open an issue on the public repository. The [tep-contributions](https://github.com/Cor-Incorporated/tep-contributions) README describes a private contact channel. A proxy contact can keep your name out of it, but data already published in the corpus does not become private.
170
+
171
+ ## License
172
+
173
+ MIT. See [LICENSE](https://github.com/Cor-Incorporated/grift-cli/blob/main/LICENSE).
174
+
175
+ ## 日本語の概要
176
+
177
+ このページは PyPI でも表示されるため、日本語の要点をここに置いています。全文は[日本語の README](https://github.com/Cor-Incorporated/grift-cli/blob/main/README.md) をご覧ください。
178
+
179
+ grift を使うと、エンジニアがこれまでどんなコードを、どれくらい、テストで確かめながら変えてきたかを、git(コードの変更を 1 件ずつ記録する仕組み)に残った記録から件数つきで知ることができます。点数や順位はつけません。人材紹介会社や SES の営業が推薦の理由を説明するときにも、エンジニア本人が経歴書に確かめられる事実を添えるときにも使えます。
180
+
181
+ ```bash
182
+ pipx install grift-cli
183
+ cd your-repo
184
+ grift repo
185
+ ```
186
+
187
+ MBTI のような性格診断は、本人の回答からタイプを出します。grift は質問をせず、git に残った記録を数えて、傾向とその根拠の件数を出します。人をタイプに分けたり、名前を付けたりはしません(grift は MBTI と関係も提携もありません)。
188
+
189
+ 手法の名前は TEP(Technical Evidence Pipeline)です。git の履歴から確かめられる事実を取り出し、数え方を添えて出し、受け取った側が同じ手順で計算し直せるようにする決まりを指します。数値の使い方は[利用規範(norms)](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/norms.md)で決めています。
190
+
191
+ - [コマンドの詳しい使い方](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/usage.md)
192
+ - [レポートの読み方](https://github.com/Cor-Incorporated/grift-cli/blob/main/docs/metrics-guide.md)
193
+ - [製品サイト griftai.org](https://griftai.org)