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.
- grift_cli-0.8.0/.github/ISSUE_TEMPLATE/bug_report.yml +79 -0
- grift_cli-0.8.0/.github/ISSUE_TEMPLATE/config.yml +11 -0
- grift_cli-0.8.0/.github/ISSUE_TEMPLATE/feature_request.yml +52 -0
- grift_cli-0.8.0/.github/ISSUE_TEMPLATE/question.yml +52 -0
- grift_cli-0.8.0/.github/PULL_REQUEST_TEMPLATE.md +66 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/CHANGELOG.md +97 -0
- grift_cli-0.8.0/PKG-INFO +193 -0
- grift_cli-0.8.0/README.en.md +164 -0
- grift_cli-0.8.0/README.md +142 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/action.yml +1 -1
- grift_cli-0.8.0/benchmarks/v060/golden/expected/actor-partition.json +1 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/golden/manifest.json +1 -1
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/golden/migrations.json +1 -1
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/REQUIREMENTS-v060.md +1 -0
- grift_cli-0.8.0/docs/adr/ADR-0001-v08-no-volume-ordering.md +116 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/en/metrics-guide.md +5 -2
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/en/norms.md +4 -2
- grift_cli-0.7.2/README.en.md → grift_cli-0.8.0/docs/en/usage.md +92 -221
- grift_cli-0.8.0/docs/en/validation.md +52 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/metrics-guide.md +20 -1
- grift_cli-0.8.0/docs/migration-v080.md +648 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/norms.md +8 -4
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/report-schema.md +1 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/report-v2.md +2 -1
- grift_cli-0.8.0/docs/usage.md +302 -0
- grift_cli-0.8.0/docs/validation.md +51 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/pyproject.toml +10 -3
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/v070_benchmark.py +51 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_cli/__main__.py +5 -12
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/actor_artifacts.py +75 -4
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/actor_directory.py +8 -1
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/alignment.py +9 -5
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/analyze.py +4 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/analyze_v2.py +6 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/contribute.py +4 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/report.py +1 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/report_v2.py +18 -8
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/rhythm.py +7 -1
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/schemas/v060-contracts.schema.json +2 -1
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/v2_constants.py +20 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/version.py +2 -2
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_discriminant_claims.py +17 -9
- grift_cli-0.8.0/tests/test_readme_entry.py +162 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v058_gates.py +47 -2
- grift_cli-0.8.0/tests/test_v060_docs_parity.py +283 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_release_consistency.py +27 -14
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_scenario_matrix.py +62 -8
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_benchmark.py +50 -0
- grift_cli-0.8.0/tests/test_v080_actor_index_order.py +350 -0
- grift_cli-0.8.0/tests/test_v080_inflation_limitations.py +214 -0
- grift_cli-0.8.0/tests/test_v080_selectivity_notice.py +212 -0
- grift_cli-0.7.2/PKG-INFO +0 -428
- grift_cli-0.7.2/README.md +0 -404
- grift_cli-0.7.2/benchmarks/v060/golden/expected/actor-partition.json +0 -1
- grift_cli-0.7.2/tests/test_v060_docs_parity.py +0 -108
- {grift_cli-0.7.2 → grift_cli-0.8.0}/.github/workflows/ci.yml +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/.github/workflows/kpi-monthly.yml +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/.github/workflows/publish.yml +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/.github/workflows/v060-provider-live.yml +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/.gitignore +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/LICENSE +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/IMPLEMENTATION-AGENT-INSTRUCTIONS.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/README.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/data/alignment_cases.jsonl +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/data/gharchive_daily_summary.csv +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/data/gharchive_events_2024-01-15_to_21.ndjson +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/data/gharchive_repository_summary.csv +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/data/independent_repo_actor_audit_2026-08-30.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/data/metric_catalog.csv +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/data/role_ground_truth_sample.csv +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/data/role_label_counts.csv +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/data/tracker_lifecycle_fixture.csv +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/expected/tracker_fixture_expected.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/golden/fixtures/actor-partition-repo.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/quality-report.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/schemas/benchmark-manifest.schema.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/schemas/event-observation.schema.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/schemas/role-validation.schema.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/benchmarks/v060/sources.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/corpus/AD-PILOT-20260822.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/corpus/DISCRIMINANT-v2026.09.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/corpus/DISCRIMINANT-v2026.11.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/corpus/ad-pilot.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/corpus/manifest.toml +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/corpus/pins-v2026.09.toml +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/corpus/pins-v2026.11.toml +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/corpus/v2026.09/distributions.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/corpus/v2026.11/distributions.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/CORPUS-CANDIDATES-v2026.11-20260822.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/EVIDENCE-v056-smoke-raw.log +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/EVIDENCE-v058-smoke-raw.log +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/EVIDENCE-v058b-smoke-raw.log +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/EVIDENCE-v059-smoke-raw.log +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/EVIDENCE-v059b-smoke-raw.log +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/PLAN-v060-20260825.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/READERS-GUIDE-draft-20260822.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/RESEARCH-v060.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/V060-CLOSURE-LEDGER-20260831.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/alignment-schema.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/contribute-intake-design-20260822.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/corpus-protocol.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/coverage-map.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/en/corpus-protocol.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/en/coverage-map.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/en/export-schema.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/en/identity-schema.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/en/persona-answers.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/en/report-schema.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/evidence/v060/attest-portfolio.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/evidence/v060/grift-2055-audit.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/export-schema.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/identity-schema.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/input-export-schema.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/migration-v060.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/migration-v070.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/migration-v071.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/migration-v072.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/persona-answers.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/project-schema.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/docs/rereview-checklist-template.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/README.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/coverage.md +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G1-click.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G10-scvi-tools.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G11-kilo.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G12-httpx.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G13-voicevox.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G2-gitignore.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G3-spoon-knife.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G4-express.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G5-typer.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G6-claude-code.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G7-axios.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G8-co.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/expected/G9-pyscript.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/identity/G1-click.toml +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/identity/example.toml +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/golden/pins.toml +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/action_contract_guard.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/admission_v2026_11.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/build_dist_v2026_11.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/build_distributions.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/build_library_prevalence.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/check_forbidden_vocab.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/corpus_ad_pilot.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/corpus_run.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/discriminant_v2026.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/discriminant_v2026_11.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/gen_coverage_table.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/gen_golden_expected.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/hygiene_grep.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/intake_contract_parity.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/package_smoke.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/v060_blind_pilot.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/v060_golden.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/v060_golden_baseline.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/v060_provider_live_gate.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/scripts/v060_scenario_matrix.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_cli/__init__.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_cli/benchmark_cmd.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_cli/options.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_cli/output.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_cli/subject.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/__init__.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/activity.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/actor_basis.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/ai_identity.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/archive_events.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/attest.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/attribution.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/data/alignment_cases.jsonl +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/data/gharchive_daily_summary.csv +0 -0
- {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
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/data/gharchive_repository_summary.csv +0 -0
- {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
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/data/metric_catalog.csv +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/data/role_ground_truth_sample.csv +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/data/role_label_counts.csv +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/data/tracker_lifecycle_fixture.csv +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/expected/tracker_fixture_expected.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/schemas/benchmark-manifest.schema.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/schemas/event-observation.schema.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/schemas/role-validation.schema.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/benchmark_assets/v060/sources.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/cochange.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/complementarity.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/context_profile.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/contribution_v2.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/coordination.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/core_period.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/data/prevalence/v2026.09/library_prevalence.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/data/v2026.09/distributions.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/data/v2026.11/distributions.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/dates.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/dependency_manifest.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/digest.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/event_rhythm.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/experience.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/experience_collect.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/export.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/forge.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/forge_public.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/gitutil.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/identity.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/lineage.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/local_inputs.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/observation.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/origin.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/outcome.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/path_surface.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/paths.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/portfolio.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/prevalence.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/project.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/public_evidence.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/public_fetch.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/reference.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/revision.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/rework.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/role_lens.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/role_profile.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/role_validation.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/schema.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/schema_v2.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/schemas/__init__.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/scope.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/secrets_guard.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/secure_output.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/source_binding.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/surface_profile.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/survival.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/tagset.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/tendency.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/tests_observed.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/tracker.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/tracker_lifecycle.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/verification_profile.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/src/tep_core/verify.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/conftest.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/coverage_matrix.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/fixtures/v060/forge.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/fixtures/v060/p0-results.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/fixtures/v060/project-declared.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/fixtures/v060/project-init.toml +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/fixtures/v060/project.toml +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/fixtures/v060/repo-smoke-head.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/fixtures/v060/run_p0_falsify.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/fixtures/v060/tracker.json +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/git_fixture.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_action_contract.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_activity.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_benchmark_pack_v060.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_cli.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_cli_v060.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_cochange.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_context_profile.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_contribute.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_coverage.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_default_report_path.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_export.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_export_recipe.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_forbidden_vocab.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_gitutil.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_gloss_gates.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_golden.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_h5_swarm.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_hygiene.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_identity_validation.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_intake_contract_parity.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_intake_disclosure.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_lifecycle_v2.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_migration_v060.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_not_observed.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_origin.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_package_contract.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_persona_answers.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_publish_baseline_pin.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_release_gate.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_report.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_rework.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_schema.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_scope.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_shared_block.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_survival.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_ux_v057.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_actor_account_source_binding_cli.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_actor_artifacts.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_actor_partition.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_actor_public_directory.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_alignment.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_attest_core.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_attest_input_binding.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_attest_portfolio_cli.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_binding_quality.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_blind_pilot.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_bound_export_observations.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_complete.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_contribute_atomic_consent.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_contribution_profiles.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_cross_repo.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_determinism.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_emit_robustness.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_experience_collect.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_experience_incomplete.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_experience_product_cli.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_experience_role.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_forge_evidence.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_golden_runner.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_historical_exact_head.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_identity_v2.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_independent_audit.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_inputs.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_large_repo_degradation.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_no_false_zero.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_observed_compare.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_p0_runner.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_portfolio_core.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_provider_live_gate.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_provider_live_workflow.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_public_actor_presentation.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_public_evidence_contract.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_public_registry_export.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_report_deep_schema.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_report_strict_producer.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_revision.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_rhythm.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_schema.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_schema_contracts.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_subject_source_binding_cli.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_surfaces.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_verify_fixed_revision.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v060_verify_inferred_actor.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_actor_time_phase.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_align_share.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_cli_surface.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_complementarity.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_dependency_attribution.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_dependency_experience.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_dependency_manifest.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_history_incomplete.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_intake_contract.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_library_prevalence.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_norms_link.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_outcome.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_project_min_share.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v070_scale_denominator.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v071_bot_accounts.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v071_gate_failure_detail.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v071_response_completeness.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_v072_empty_actor.py +0 -0
- {grift_cli-0.7.2 → grift_cli-0.8.0}/tests/test_verb_semantics.py +0 -0
- {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 が
|
grift_cli-0.8.0/PKG-INFO
ADDED
|
@@ -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)
|