terp-spec 0.15.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.
- terp_spec-0.15.0/.github/workflows/ci.yml +90 -0
- terp_spec-0.15.0/.github/workflows/release.yml +237 -0
- terp_spec-0.15.0/.gitignore +221 -0
- terp_spec-0.15.0/CHANGELOG.md +311 -0
- terp_spec-0.15.0/LICENSE +201 -0
- terp_spec-0.15.0/PKG-INFO +7 -0
- terp_spec-0.15.0/README.md +417 -0
- terp_spec-0.15.0/VERSION +1 -0
- terp_spec-0.15.0/app-check-report.schema.json +122 -0
- terp_spec-0.15.0/assurance-profile.schema.json +70 -0
- terp_spec-0.15.0/catalog/backend/alembic_downgrades_not_empty.json +22 -0
- terp_spec-0.15.0/catalog/backend/base_query_not_overridden.json +27 -0
- terp_spec-0.15.0/catalog/backend/canonical_module_shape.json +22 -0
- terp_spec-0.15.0/catalog/backend/datetime_columns_are_timezone_aware.json +23 -0
- terp_spec-0.15.0/catalog/backend/escape_hatch_budget.json +21 -0
- terp_spec-0.15.0/catalog/backend/events_reference_catalog.json +27 -0
- terp_spec-0.15.0/catalog/backend/input_schemas_exclude_managed_columns.json +27 -0
- terp_spec-0.15.0/catalog/backend/input_str_fields_have_max_length.json +22 -0
- terp_spec-0.15.0/catalog/backend/jobs_reference_catalog.json +27 -0
- terp_spec-0.15.0/catalog/backend/list_routes_paginate.json +32 -0
- terp_spec-0.15.0/catalog/backend/modules_declare_policy.json +26 -0
- terp_spec-0.15.0/catalog/backend/mutations_emit_audit.json +26 -0
- terp_spec-0.15.0/catalog/backend/mutations_require_write_role.json +32 -0
- terp_spec-0.15.0/catalog/backend/no_adhoc_background_runtime.json +22 -0
- terp_spec-0.15.0/catalog/backend/no_adhoc_config_decrypt.json +27 -0
- terp_spec-0.15.0/catalog/backend/no_adhoc_logging_config.json +22 -0
- terp_spec-0.15.0/catalog/backend/no_adhoc_middleware.json +27 -0
- terp_spec-0.15.0/catalog/backend/no_adhoc_permission_literals.json +27 -0
- terp_spec-0.15.0/catalog/backend/no_app_instantiation.json +22 -0
- terp_spec-0.15.0/catalog/backend/no_blocking_sleep.json +22 -0
- terp_spec-0.15.0/catalog/backend/no_cross_module_imports.json +21 -0
- terp_spec-0.15.0/catalog/backend/no_dependency_overrides.json +27 -0
- terp_spec-0.15.0/catalog/backend/no_destructive_migrations.json +22 -0
- terp_spec-0.15.0/catalog/backend/no_dynamic_sql.json +22 -0
- terp_spec-0.15.0/catalog/backend/no_empty_tests.json +22 -0
- terp_spec-0.15.0/catalog/backend/no_eval_or_exec.json +22 -0
- terp_spec-0.15.0/catalog/backend/no_hardcoded_credentials.json +21 -0
- terp_spec-0.15.0/catalog/backend/no_internal_imports.json +22 -0
- terp_spec-0.15.0/catalog/backend/no_manual_actor_stamping.json +27 -0
- terp_spec-0.15.0/catalog/backend/no_manual_ownership_checks.json +32 -0
- terp_spec-0.15.0/catalog/backend/no_manual_scope_filtering.json +27 -0
- terp_spec-0.15.0/catalog/backend/no_manual_table_schema.json +22 -0
- terp_spec-0.15.0/catalog/backend/no_manual_version_assignment.json +22 -0
- terp_spec-0.15.0/catalog/backend/no_mutable_default_args.json +22 -0
- terp_spec-0.15.0/catalog/backend/no_naive_datetime.json +22 -0
- terp_spec-0.15.0/catalog/backend/no_oversized_python_files.json +22 -0
- terp_spec-0.15.0/catalog/backend/no_print.json +22 -0
- terp_spec-0.15.0/catalog/backend/no_raw_app_routes.json +26 -0
- terp_spec-0.15.0/catalog/backend/no_raw_connection_access.json +27 -0
- terp_spec-0.15.0/catalog/backend/no_raw_file_references.json +27 -0
- terp_spec-0.15.0/catalog/backend/no_raw_outbound_http.json +22 -0
- terp_spec-0.15.0/catalog/backend/no_raw_session_construction.json +22 -0
- terp_spec-0.15.0/catalog/backend/no_star_imports.json +22 -0
- terp_spec-0.15.0/catalog/backend/no_todo_fixme.json +22 -0
- terp_spec-0.15.0/catalog/backend/no_unique_columns_on_soft_delete_models.json +22 -0
- terp_spec-0.15.0/catalog/backend/offset_queries_declare_ordering.json +22 -0
- terp_spec-0.15.0/catalog/backend/path_id_params_are_uuid.json +22 -0
- terp_spec-0.15.0/catalog/backend/policy_refs_resolve.json +27 -0
- terp_spec-0.15.0/catalog/backend/public_modules_are_read_only.json +26 -0
- terp_spec-0.15.0/catalog/backend/reads_use_base_query.json +27 -0
- terp_spec-0.15.0/catalog/backend/response_model_not_table_model.json +27 -0
- terp_spec-0.15.0/catalog/backend/routes_declare_response_model.json +27 -0
- terp_spec-0.15.0/catalog/backend/safe_methods_are_read_only.json +31 -0
- terp_spec-0.15.0/catalog/backend/schemas_exclude_sensitive_fields.json +32 -0
- terp_spec-0.15.0/catalog/backend/session_imported_from_sqlmodel.json +22 -0
- terp_spec-0.15.0/catalog/backend/table_models_use_base_table.json +22 -0
- terp_spec-0.15.0/catalog/backend/tables_have_migrations.json +27 -0
- terp_spec-0.15.0/catalog/backend/tenant_scoped_models_use_scoped_service.json +22 -0
- terp_spec-0.15.0/catalog/backend/ungoverned_escape_hatch.json +21 -0
- terp_spec-0.15.0/catalog/backend/update_schemas_inherit_base_update_schema.json +32 -0
- terp_spec-0.15.0/catalog/frontend/escape-hatch.json +21 -0
- terp_spec-0.15.0/catalog/frontend/generated-client-only.json +26 -0
- terp_spec-0.15.0/catalog/frontend/layout-contract.json +26 -0
- terp_spec-0.15.0/catalog/frontend/no-cross-module-imports.json +21 -0
- terp_spec-0.15.0/catalog/frontend/no-deep-imports.json +25 -0
- terp_spec-0.15.0/catalog/frontend/no-dom-html-injection.json +22 -0
- terp_spec-0.15.0/catalog/frontend/no-eval.json +21 -0
- terp_spec-0.15.0/catalog/frontend/no-inline-styling.json +25 -0
- terp_spec-0.15.0/catalog/frontend/no-style-imports.json +24 -0
- terp_spec-0.15.0/catalog/frontend/no-unsafe-href.json +21 -0
- terp_spec-0.15.0/catalog/frontend/no-unsafe-target-blank.json +21 -0
- terp_spec-0.15.0/catalog/frontend/router-links.json +22 -0
- terp_spec-0.15.0/catalog/frontend/token-styled-elements.json +25 -0
- terp_spec-0.15.0/catalog/schema.json +95 -0
- terp_spec-0.15.0/corpus/PENDING.json +4 -0
- terp_spec-0.15.0/corpus/RESIDUALS.json +21 -0
- terp_spec-0.15.0/corpus/backend/alembic_downgrades_not_empty/compliant-01/modules/notes/migrations/versions/0001_change.py +6 -0
- terp_spec-0.15.0/corpus/backend/alembic_downgrades_not_empty/violation-01/modules/notes/migrations/versions/0001_change.py +6 -0
- terp_spec-0.15.0/corpus/backend/base_query_not_overridden/compliant-01/modules/notes/service.py +8 -0
- terp_spec-0.15.0/corpus/backend/base_query_not_overridden/compliant-02/modules/notes/service.py +8 -0
- terp_spec-0.15.0/corpus/backend/base_query_not_overridden/violation-01/modules/notes/service.py +8 -0
- terp_spec-0.15.0/corpus/backend/base_query_not_overridden/violation-02/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/base_query_not_overridden/violation-02/modules/notes/service.py +8 -0
- terp_spec-0.15.0/corpus/backend/canonical_module_shape/compliant-01/modules/notes/models.py +6 -0
- terp_spec-0.15.0/corpus/backend/canonical_module_shape/compliant-01/modules/notes/module.py +7 -0
- terp_spec-0.15.0/corpus/backend/canonical_module_shape/compliant-01/modules/notes/router.py +3 -0
- terp_spec-0.15.0/corpus/backend/canonical_module_shape/compliant-01/modules/notes/schemas.py +10 -0
- terp_spec-0.15.0/corpus/backend/canonical_module_shape/compliant-01/modules/notes/service.py +5 -0
- terp_spec-0.15.0/corpus/backend/canonical_module_shape/violation-01/modules/notes/router.py +3 -0
- terp_spec-0.15.0/corpus/backend/datetime_columns_are_timezone_aware/compliant-01/modules/notes/models.py +12 -0
- terp_spec-0.15.0/corpus/backend/datetime_columns_are_timezone_aware/violation-01/modules/notes/models.py +12 -0
- terp_spec-0.15.0/corpus/backend/datetime_columns_are_timezone_aware/violation-02/modules/notes/models.py +13 -0
- terp_spec-0.15.0/corpus/backend/datetime_columns_are_timezone_aware/violation-03/modules/notes/models.py +15 -0
- terp_spec-0.15.0/corpus/backend/escape_hatch_budget/compliant-01/escape-hatch-budget.json +3 -0
- terp_spec-0.15.0/corpus/backend/escape_hatch_budget/compliant-01/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/escape_hatch_budget/compliant-02/escape-hatch-budget.json +1 -0
- terp_spec-0.15.0/corpus/backend/escape_hatch_budget/compliant-02/modules/notes/service.py +4 -0
- terp_spec-0.15.0/corpus/backend/escape_hatch_budget/violation-01/escape-hatch-budget.json +1 -0
- terp_spec-0.15.0/corpus/backend/escape_hatch_budget/violation-01/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/escape_hatch_budget/violation-02/escape-hatch-budget.json +3 -0
- terp_spec-0.15.0/corpus/backend/escape_hatch_budget/violation-02/modules/notes/service.py +4 -0
- terp_spec-0.15.0/corpus/backend/events_reference_catalog/compliant-01/modules/notes/module.py +9 -0
- terp_spec-0.15.0/corpus/backend/events_reference_catalog/violation-01/modules/notes/module.py +8 -0
- terp_spec-0.15.0/corpus/backend/input_schemas_exclude_managed_columns/compliant-01/modules/notes/schemas.py +6 -0
- terp_spec-0.15.0/corpus/backend/input_schemas_exclude_managed_columns/violation-01/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/input_schemas_exclude_managed_columns/violation-01/modules/notes/schemas.py +9 -0
- terp_spec-0.15.0/corpus/backend/input_schemas_exclude_managed_columns/violation-02/expected-findings.json +12 -0
- terp_spec-0.15.0/corpus/backend/input_schemas_exclude_managed_columns/violation-02/modules/notes/router.py +14 -0
- terp_spec-0.15.0/corpus/backend/input_str_fields_have_max_length/compliant-01/modules/notes/schemas.py +4 -0
- terp_spec-0.15.0/corpus/backend/input_str_fields_have_max_length/violation-01/modules/notes/schemas.py +2 -0
- terp_spec-0.15.0/corpus/backend/jobs_reference_catalog/compliant-01/modules/notes/service.py +5 -0
- terp_spec-0.15.0/corpus/backend/jobs_reference_catalog/violation-01/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/list_routes_paginate/compliant-01/modules/notes/router.py +6 -0
- terp_spec-0.15.0/corpus/backend/list_routes_paginate/violation-01/modules/notes/router.py +3 -0
- terp_spec-0.15.0/corpus/backend/modules_declare_policy/compliant-01/modules/notes/module.py +7 -0
- terp_spec-0.15.0/corpus/backend/modules_declare_policy/violation-01/modules/notes/module.py +6 -0
- terp_spec-0.15.0/corpus/backend/mutations_emit_audit/compliant-01/modules/notes/service.py +9 -0
- terp_spec-0.15.0/corpus/backend/mutations_emit_audit/violation-01/modules/notes/service.py +4 -0
- terp_spec-0.15.0/corpus/backend/mutations_require_write_role/compliant-01/modules/notes/module.py +7 -0
- terp_spec-0.15.0/corpus/backend/mutations_require_write_role/compliant-01/modules/notes/router.py +3 -0
- terp_spec-0.15.0/corpus/backend/mutations_require_write_role/compliant-02/modules/notes/module.py +7 -0
- terp_spec-0.15.0/corpus/backend/mutations_require_write_role/compliant-02/modules/notes/router.py +3 -0
- terp_spec-0.15.0/corpus/backend/mutations_require_write_role/violation-01/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/mutations_require_write_role/violation-01/modules/notes/module.py +7 -0
- terp_spec-0.15.0/corpus/backend/mutations_require_write_role/violation-01/modules/notes/router.py +3 -0
- terp_spec-0.15.0/corpus/backend/mutations_require_write_role/violation-02/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/mutations_require_write_role/violation-02/modules/notes/module.py +7 -0
- terp_spec-0.15.0/corpus/backend/mutations_require_write_role/violation-02/modules/notes/router.py +5 -0
- terp_spec-0.15.0/corpus/backend/mutations_require_write_role/violation-03/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/mutations_require_write_role/violation-03/modules/notes/module.py +10 -0
- terp_spec-0.15.0/corpus/backend/mutations_require_write_role/violation-03/modules/notes/router.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_adhoc_background_runtime/compliant-01/modules/notes/service.py +9 -0
- terp_spec-0.15.0/corpus/backend/no_adhoc_background_runtime/violation-01/modules/notes/service.py +5 -0
- terp_spec-0.15.0/corpus/backend/no_adhoc_background_runtime/violation-02/modules/notes/service.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_adhoc_config_decrypt/compliant-01/modules/billing/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_adhoc_config_decrypt/violation-01/modules/billing/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_adhoc_logging_config/compliant-01/modules/notes/service.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_adhoc_logging_config/violation-01/modules/notes/service.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_adhoc_middleware/compliant-01/main.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_adhoc_middleware/violation-01/main.py +4 -0
- terp_spec-0.15.0/corpus/backend/no_adhoc_middleware/violation-02/main.py +5 -0
- terp_spec-0.15.0/corpus/backend/no_adhoc_permission_literals/compliant-01/modules/notes/module.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_adhoc_permission_literals/compliant-02/modules/notes/router.py +5 -0
- terp_spec-0.15.0/corpus/backend/no_adhoc_permission_literals/violation-01/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/no_adhoc_permission_literals/violation-01/modules/notes/module.py +1 -0
- terp_spec-0.15.0/corpus/backend/no_adhoc_permission_literals/violation-02/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/no_adhoc_permission_literals/violation-02/modules/notes/router.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_adhoc_permission_literals/violation-03/expected-findings.json +12 -0
- terp_spec-0.15.0/corpus/backend/no_adhoc_permission_literals/violation-03/modules/notes/module.py +10 -0
- terp_spec-0.15.0/corpus/backend/no_app_instantiation/compliant-01/main.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_app_instantiation/violation-01/main.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_blocking_sleep/compliant-01/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_blocking_sleep/violation-01/modules/notes/service.py +5 -0
- terp_spec-0.15.0/corpus/backend/no_cross_module_imports/compliant-01/modules/a/service.py +1 -0
- terp_spec-0.15.0/corpus/backend/no_cross_module_imports/violation-01/modules/a/service.py +1 -0
- terp_spec-0.15.0/corpus/backend/no_cross_module_imports/violation-02/modules/a/service.py +1 -0
- terp_spec-0.15.0/corpus/backend/no_dependency_overrides/compliant-01/main.py +12 -0
- terp_spec-0.15.0/corpus/backend/no_dependency_overrides/violation-01/main.py +11 -0
- terp_spec-0.15.0/corpus/backend/no_destructive_migrations/compliant-01/modules/notes/migrations/versions/0001_change.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_destructive_migrations/compliant-02/modules/notes/migrations/versions/0001_change.py +8 -0
- terp_spec-0.15.0/corpus/backend/no_destructive_migrations/violation-01/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/no_destructive_migrations/violation-01/modules/notes/migrations/versions/0001_change.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_destructive_migrations/violation-02/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/no_destructive_migrations/violation-02/modules/notes/migrations/versions/0001_change.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_destructive_migrations/violation-03/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/no_destructive_migrations/violation-03/modules/notes/migrations/versions/0001_change.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_destructive_migrations/violation-04/expected-findings.json +12 -0
- terp_spec-0.15.0/corpus/backend/no_destructive_migrations/violation-04/modules/notes/migrations/versions/0001_change.py +6 -0
- terp_spec-0.15.0/corpus/backend/no_destructive_migrations/violation-05/expected-findings.json +12 -0
- terp_spec-0.15.0/corpus/backend/no_destructive_migrations/violation-05/modules/notes/migrations/versions/0001_change.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_dynamic_sql/compliant-01/modules/notes/service.py +1 -0
- terp_spec-0.15.0/corpus/backend/no_dynamic_sql/compliant-02/modules/notes/service.py +20 -0
- terp_spec-0.15.0/corpus/backend/no_dynamic_sql/violation-01/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_dynamic_sql/violation-02/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_dynamic_sql/violation-03/modules/notes/service.py +7 -0
- terp_spec-0.15.0/corpus/backend/no_dynamic_sql/violation-04/modules/notes/service.py +16 -0
- terp_spec-0.15.0/corpus/backend/no_empty_tests/compliant-01/tests/test_notes.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_empty_tests/violation-01/tests/test_notes.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_eval_or_exec/compliant-01/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_eval_or_exec/violation-01/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_hardcoded_credentials/compliant-01/modules/billing/service.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_hardcoded_credentials/compliant-02/modules/billing/service.py +18 -0
- terp_spec-0.15.0/corpus/backend/no_hardcoded_credentials/violation-01/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/no_hardcoded_credentials/violation-01/modules/billing/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_hardcoded_credentials/violation-02/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/no_hardcoded_credentials/violation-02/modules/billing/service.py +1 -0
- terp_spec-0.15.0/corpus/backend/no_hardcoded_credentials/violation-03/expected-findings.json +22 -0
- terp_spec-0.15.0/corpus/backend/no_hardcoded_credentials/violation-03/modules/billing/service.py +11 -0
- terp_spec-0.15.0/corpus/backend/no_hardcoded_credentials/violation-04/expected-findings.json +12 -0
- terp_spec-0.15.0/corpus/backend/no_hardcoded_credentials/violation-04/modules/billing/service.py +8 -0
- terp_spec-0.15.0/corpus/backend/no_hardcoded_credentials/violation-05/expected-findings.json +12 -0
- terp_spec-0.15.0/corpus/backend/no_hardcoded_credentials/violation-05/modules/billing/service.py +4 -0
- terp_spec-0.15.0/corpus/backend/no_internal_imports/compliant-01/modules/notes/service.py +1 -0
- terp_spec-0.15.0/corpus/backend/no_internal_imports/violation-01/modules/notes/service.py +1 -0
- terp_spec-0.15.0/corpus/backend/no_manual_actor_stamping/compliant-01/modules/notes/service.py +5 -0
- terp_spec-0.15.0/corpus/backend/no_manual_actor_stamping/compliant-02/modules/notes/schemas.py +12 -0
- terp_spec-0.15.0/corpus/backend/no_manual_actor_stamping/violation-01/modules/notes/service.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_manual_actor_stamping/violation-02/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/no_manual_actor_stamping/violation-02/modules/notes/service.py +4 -0
- terp_spec-0.15.0/corpus/backend/no_manual_ownership_checks/compliant-01/modules/journals/service.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_manual_ownership_checks/compliant-02/modules/journals/schemas.py +11 -0
- terp_spec-0.15.0/corpus/backend/no_manual_ownership_checks/violation-01/modules/journals/service.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_manual_ownership_checks/violation-02/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/no_manual_ownership_checks/violation-02/modules/journals/service.py +9 -0
- terp_spec-0.15.0/corpus/backend/no_manual_ownership_checks/violation-03/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/no_manual_ownership_checks/violation-03/modules/notes/jobs.py +1 -0
- terp_spec-0.15.0/corpus/backend/no_manual_ownership_checks/violation-03/modules/notes/models.py +7 -0
- terp_spec-0.15.0/corpus/backend/no_manual_ownership_checks/violation-03/modules/notes/module.py +11 -0
- terp_spec-0.15.0/corpus/backend/no_manual_ownership_checks/violation-03/modules/notes/service.py +7 -0
- terp_spec-0.15.0/corpus/backend/no_manual_scope_filtering/compliant-01/modules/notes/service.py +8 -0
- terp_spec-0.15.0/corpus/backend/no_manual_scope_filtering/compliant-02/modules/notes/schemas.py +12 -0
- terp_spec-0.15.0/corpus/backend/no_manual_scope_filtering/violation-01/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_manual_scope_filtering/violation-02/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_manual_scope_filtering/violation-03/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/no_manual_scope_filtering/violation-03/modules/notes/service.py +7 -0
- terp_spec-0.15.0/corpus/backend/no_manual_table_schema/compliant-01/modules/notes/models.py +6 -0
- terp_spec-0.15.0/corpus/backend/no_manual_table_schema/violation-01/modules/notes/models.py +8 -0
- terp_spec-0.15.0/corpus/backend/no_manual_version_assignment/compliant-01/modules/notes/service.py +5 -0
- terp_spec-0.15.0/corpus/backend/no_manual_version_assignment/violation-01/modules/notes/service.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_manual_version_assignment/violation-02/modules/notes/service.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_manual_version_assignment/violation-03/modules/notes/service.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_mutable_default_args/compliant-01/modules/notes/service.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_mutable_default_args/violation-01/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_naive_datetime/compliant-01/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_naive_datetime/violation-01/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_naive_datetime/violation-02/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_oversized_python_files/compliant-01/modules/notes/service.py +9 -0
- terp_spec-0.15.0/corpus/backend/no_oversized_python_files/violation-01/modules/notes/service.py +530 -0
- terp_spec-0.15.0/corpus/backend/no_print/compliant-01/modules/notes/service.py +7 -0
- terp_spec-0.15.0/corpus/backend/no_print/violation-01/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_raw_app_routes/compliant-01/main.py +12 -0
- terp_spec-0.15.0/corpus/backend/no_raw_app_routes/violation-01/main.py +10 -0
- terp_spec-0.15.0/corpus/backend/no_raw_app_routes/violation-02/main.py +16 -0
- terp_spec-0.15.0/corpus/backend/no_raw_app_routes/violation-03/main.py +12 -0
- terp_spec-0.15.0/corpus/backend/no_raw_app_routes/violation-04/main.py +10 -0
- terp_spec-0.15.0/corpus/backend/no_raw_app_routes/violation-05/main.py +12 -0
- terp_spec-0.15.0/corpus/backend/no_raw_app_routes/violation-06/main.py +10 -0
- terp_spec-0.15.0/corpus/backend/no_raw_connection_access/compliant-01/modules/notes/service.py +5 -0
- terp_spec-0.15.0/corpus/backend/no_raw_connection_access/violation-01/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_raw_connection_access/violation-02/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_raw_file_references/compliant-01/modules/notes/models.py +10 -0
- terp_spec-0.15.0/corpus/backend/no_raw_file_references/violation-01/modules/notes/models.py +9 -0
- terp_spec-0.15.0/corpus/backend/no_raw_outbound_http/compliant-01/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_raw_outbound_http/compliant-03/modules/notes/service.py +12 -0
- terp_spec-0.15.0/corpus/backend/no_raw_outbound_http/violation-01/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/no_raw_outbound_http/violation-01/modules/notes/service.py +1 -0
- terp_spec-0.15.0/corpus/backend/no_raw_outbound_http/violation-02/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/no_raw_outbound_http/violation-02/modules/notes/service.py +1 -0
- terp_spec-0.15.0/corpus/backend/no_raw_outbound_http/violation-03/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/no_raw_outbound_http/violation-03/modules/notes/service.py +1 -0
- terp_spec-0.15.0/corpus/backend/no_raw_outbound_http/violation-04/expected-findings.json +12 -0
- terp_spec-0.15.0/corpus/backend/no_raw_outbound_http/violation-04/modules/notes/service.py +7 -0
- terp_spec-0.15.0/corpus/backend/no_raw_outbound_http/violation-05/expected-findings.json +12 -0
- terp_spec-0.15.0/corpus/backend/no_raw_outbound_http/violation-05/modules/notes/service.py +5 -0
- terp_spec-0.15.0/corpus/backend/no_raw_outbound_http/violation-06/expected-findings.json +12 -0
- terp_spec-0.15.0/corpus/backend/no_raw_outbound_http/violation-06/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/no_raw_session_construction/compliant-01/modules/notes/service.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_raw_session_construction/violation-01/modules/notes/service.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_star_imports/compliant-01/modules/notes/service.py +1 -0
- terp_spec-0.15.0/corpus/backend/no_star_imports/violation-01/modules/notes/service.py +1 -0
- terp_spec-0.15.0/corpus/backend/no_todo_fixme/compliant-01/modules/notes/service.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_todo_fixme/violation-01/modules/notes/service.py +3 -0
- terp_spec-0.15.0/corpus/backend/no_unique_columns_on_soft_delete_models/compliant-01/modules/notes/models.py +17 -0
- terp_spec-0.15.0/corpus/backend/no_unique_columns_on_soft_delete_models/violation-01/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/no_unique_columns_on_soft_delete_models/violation-01/modules/notes/models.py +6 -0
- terp_spec-0.15.0/corpus/backend/no_unique_columns_on_soft_delete_models/violation-02/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/no_unique_columns_on_soft_delete_models/violation-02/modules/notes/models.py +13 -0
- terp_spec-0.15.0/corpus/backend/no_unique_columns_on_soft_delete_models/violation-03/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/no_unique_columns_on_soft_delete_models/violation-03/modules/notes/models.py +16 -0
- terp_spec-0.15.0/corpus/backend/offset_queries_declare_ordering/compliant-01/modules/notes/service.py +4 -0
- terp_spec-0.15.0/corpus/backend/offset_queries_declare_ordering/violation-01/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/path_id_params_are_uuid/compliant-01/modules/notes/router.py +6 -0
- terp_spec-0.15.0/corpus/backend/path_id_params_are_uuid/violation-01/modules/notes/router.py +6 -0
- terp_spec-0.15.0/corpus/backend/policy_refs_resolve/compliant-01/modules/notes/module.py +7 -0
- terp_spec-0.15.0/corpus/backend/policy_refs_resolve/violation-01/modules/notes/module.py +8 -0
- terp_spec-0.15.0/corpus/backend/public_modules_are_read_only/compliant-01/modules/notes/module.py +7 -0
- terp_spec-0.15.0/corpus/backend/public_modules_are_read_only/compliant-01/modules/notes/router.py +3 -0
- terp_spec-0.15.0/corpus/backend/public_modules_are_read_only/violation-01/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/public_modules_are_read_only/violation-01/modules/notes/module.py +7 -0
- terp_spec-0.15.0/corpus/backend/public_modules_are_read_only/violation-01/modules/notes/router.py +3 -0
- terp_spec-0.15.0/corpus/backend/public_modules_are_read_only/violation-02/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/public_modules_are_read_only/violation-02/modules/notes/module.py +7 -0
- terp_spec-0.15.0/corpus/backend/public_modules_are_read_only/violation-02/modules/notes/router.py +5 -0
- terp_spec-0.15.0/corpus/backend/reads_use_base_query/compliant-01/modules/notes/models.py +6 -0
- terp_spec-0.15.0/corpus/backend/reads_use_base_query/compliant-01/modules/notes/service.py +8 -0
- terp_spec-0.15.0/corpus/backend/reads_use_base_query/compliant-02/modules/notes/models.py +9 -0
- terp_spec-0.15.0/corpus/backend/reads_use_base_query/compliant-02/modules/notes/service.py +9 -0
- terp_spec-0.15.0/corpus/backend/reads_use_base_query/violation-01/modules/notes/models.py +6 -0
- terp_spec-0.15.0/corpus/backend/reads_use_base_query/violation-01/modules/notes/service.py +9 -0
- terp_spec-0.15.0/corpus/backend/reads_use_base_query/violation-02/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/reads_use_base_query/violation-02/modules/notes/models.py +6 -0
- terp_spec-0.15.0/corpus/backend/reads_use_base_query/violation-02/modules/notes/service.py +8 -0
- terp_spec-0.15.0/corpus/backend/response_model_not_table_model/compliant-01/modules/notes/models.py +6 -0
- terp_spec-0.15.0/corpus/backend/response_model_not_table_model/compliant-01/modules/notes/router.py +3 -0
- terp_spec-0.15.0/corpus/backend/response_model_not_table_model/compliant-01/modules/notes/schemas.py +5 -0
- terp_spec-0.15.0/corpus/backend/response_model_not_table_model/violation-01/modules/notes/models.py +6 -0
- terp_spec-0.15.0/corpus/backend/response_model_not_table_model/violation-01/modules/notes/router.py +3 -0
- terp_spec-0.15.0/corpus/backend/routes_declare_response_model/compliant-01/modules/notes/router.py +8 -0
- terp_spec-0.15.0/corpus/backend/routes_declare_response_model/violation-01/modules/notes/router.py +3 -0
- terp_spec-0.15.0/corpus/backend/safe_methods_are_read_only/compliant-01/modules/notes/router.py +6 -0
- terp_spec-0.15.0/corpus/backend/safe_methods_are_read_only/compliant-02/modules/notes/router.py +5 -0
- terp_spec-0.15.0/corpus/backend/safe_methods_are_read_only/violation-01/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/safe_methods_are_read_only/violation-01/modules/notes/router.py +3 -0
- terp_spec-0.15.0/corpus/backend/safe_methods_are_read_only/violation-02/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/safe_methods_are_read_only/violation-02/modules/notes/router.py +5 -0
- terp_spec-0.15.0/corpus/backend/safe_methods_are_read_only/violation-03/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/safe_methods_are_read_only/violation-03/modules/notes/router.py +3 -0
- terp_spec-0.15.0/corpus/backend/schemas_exclude_sensitive_fields/compliant-01/modules/users/schemas.py +5 -0
- terp_spec-0.15.0/corpus/backend/schemas_exclude_sensitive_fields/compliant-02/modules/accounts/schemas.py +12 -0
- terp_spec-0.15.0/corpus/backend/schemas_exclude_sensitive_fields/violation-01/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/schemas_exclude_sensitive_fields/violation-01/modules/users/schemas.py +3 -0
- terp_spec-0.15.0/corpus/backend/schemas_exclude_sensitive_fields/violation-02/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/schemas_exclude_sensitive_fields/violation-02/modules/connectors/router.py +8 -0
- terp_spec-0.15.0/corpus/backend/schemas_exclude_sensitive_fields/violation-03/expected-findings.json +17 -0
- terp_spec-0.15.0/corpus/backend/schemas_exclude_sensitive_fields/violation-03/modules/integrations/schemas.py +7 -0
- terp_spec-0.15.0/corpus/backend/session_imported_from_sqlmodel/compliant-01/modules/notes/service.py +5 -0
- terp_spec-0.15.0/corpus/backend/session_imported_from_sqlmodel/violation-01/modules/notes/service.py +5 -0
- terp_spec-0.15.0/corpus/backend/table_models_use_base_table/compliant-01/modules/notes/models.py +6 -0
- terp_spec-0.15.0/corpus/backend/table_models_use_base_table/violation-01/modules/notes/models.py +5 -0
- terp_spec-0.15.0/corpus/backend/tables_have_migrations/compliant-01/modules/notes/migrations/versions/0a1b2c3d4e5f_create_notes_tables.py +22 -0
- terp_spec-0.15.0/corpus/backend/tables_have_migrations/compliant-01/modules/notes/models.py +6 -0
- terp_spec-0.15.0/corpus/backend/tables_have_migrations/compliant-02/capabilities/ledger/models.py +6 -0
- terp_spec-0.15.0/corpus/backend/tables_have_migrations/violation-01/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/tables_have_migrations/violation-01/modules/notes/models.py +6 -0
- terp_spec-0.15.0/corpus/backend/tables_have_migrations/violation-02/expected-findings.json +7 -0
- terp_spec-0.15.0/corpus/backend/tables_have_migrations/violation-02/modules/notes/models.py +10 -0
- terp_spec-0.15.0/corpus/backend/tenant_scoped_models_use_scoped_service/compliant-01/modules/projects/models.py +6 -0
- terp_spec-0.15.0/corpus/backend/tenant_scoped_models_use_scoped_service/compliant-01/modules/projects/service.py +5 -0
- terp_spec-0.15.0/corpus/backend/tenant_scoped_models_use_scoped_service/compliant-02/modules/projects/models.py +8 -0
- terp_spec-0.15.0/corpus/backend/tenant_scoped_models_use_scoped_service/compliant-02/modules/projects/service.py +5 -0
- terp_spec-0.15.0/corpus/backend/tenant_scoped_models_use_scoped_service/violation-01/modules/projects/models.py +6 -0
- terp_spec-0.15.0/corpus/backend/tenant_scoped_models_use_scoped_service/violation-01/modules/projects/service.py +5 -0
- terp_spec-0.15.0/corpus/backend/ungoverned_escape_hatch/compliant-01/modules/notes/service.py +5 -0
- terp_spec-0.15.0/corpus/backend/ungoverned_escape_hatch/compliant-02/modules/notes/service.py +4 -0
- terp_spec-0.15.0/corpus/backend/ungoverned_escape_hatch/violation-01/modules/notes/service.py +2 -0
- terp_spec-0.15.0/corpus/backend/update_schemas_inherit_base_update_schema/compliant-01/modules/notes/schemas.py +2 -0
- terp_spec-0.15.0/corpus/backend/update_schemas_inherit_base_update_schema/violation-01/modules/notes/schemas.py +2 -0
- terp_spec-0.15.0/corpus/backend/update_schemas_inherit_base_update_schema/violation-02/modules/notes/schemas.py +5 -0
- terp_spec-0.15.0/corpus/frontend/escape-hatch/compliant-01/src/modules/widgets/Widget.tsx +4 -0
- terp_spec-0.15.0/corpus/frontend/escape-hatch/violation-01/src/modules/widgets/Widget.tsx +4 -0
- terp_spec-0.15.0/corpus/frontend/escape-hatch/violation-02/src/modules/widgets/Widget.tsx +7 -0
- terp_spec-0.15.0/corpus/frontend/escape-hatch/violation-03/src/modules/widgets/Widget.tsx +7 -0
- terp_spec-0.15.0/corpus/frontend/generated-client-only/compliant-01/src/modules/widgets/Widget.tsx +6 -0
- terp_spec-0.15.0/corpus/frontend/generated-client-only/compliant-02/src/modules/widgets/Widget.tsx +21 -0
- terp_spec-0.15.0/corpus/frontend/generated-client-only/compliant-03/src/modules/widgets/Widget.tsx +7 -0
- terp_spec-0.15.0/corpus/frontend/generated-client-only/compliant-04/src/modules/widgets/Widget.tsx +17 -0
- terp_spec-0.15.0/corpus/frontend/generated-client-only/violation-01/src/modules/widgets/Widget.tsx +3 -0
- terp_spec-0.15.0/corpus/frontend/generated-client-only/violation-02/src/modules/widgets/Widget.tsx +9 -0
- terp_spec-0.15.0/corpus/frontend/generated-client-only/violation-03/src/modules/widgets/Widget.tsx +14 -0
- terp_spec-0.15.0/corpus/frontend/generated-client-only/violation-04/src/modules/widgets/Widget.tsx +6 -0
- terp_spec-0.15.0/corpus/frontend/layout-contract/compliant-01/layout-contract.json +3 -0
- terp_spec-0.15.0/corpus/frontend/layout-contract/compliant-01/src/modules/widgets/Widget.tsx +8 -0
- terp_spec-0.15.0/corpus/frontend/layout-contract/violation-01/layout-contract.json +3 -0
- terp_spec-0.15.0/corpus/frontend/layout-contract/violation-01/src/modules/widgets/Widget.tsx +8 -0
- terp_spec-0.15.0/corpus/frontend/no-cross-module-imports/compliant-01/src/modules/widgets/Widget.tsx +4 -0
- terp_spec-0.15.0/corpus/frontend/no-cross-module-imports/violation-01/src/modules/widgets/Widget.tsx +3 -0
- terp_spec-0.15.0/corpus/frontend/no-deep-imports/compliant-01/src/modules/widgets/Widget.tsx +4 -0
- terp_spec-0.15.0/corpus/frontend/no-deep-imports/violation-01/src/modules/widgets/Widget.tsx +2 -0
- terp_spec-0.15.0/corpus/frontend/no-dom-html-injection/compliant-01/src/modules/widgets/Widget.tsx +4 -0
- terp_spec-0.15.0/corpus/frontend/no-dom-html-injection/compliant-02/src/modules/widgets/Widget.tsx +11 -0
- terp_spec-0.15.0/corpus/frontend/no-dom-html-injection/violation-01/src/modules/widgets/Widget.tsx +3 -0
- terp_spec-0.15.0/corpus/frontend/no-dom-html-injection/violation-02/src/modules/widgets/Widget.tsx +7 -0
- terp_spec-0.15.0/corpus/frontend/no-dom-html-injection/violation-03/src/modules/widgets/Widget.tsx +12 -0
- terp_spec-0.15.0/corpus/frontend/no-eval/compliant-01/src/modules/widgets/Widget.tsx +4 -0
- terp_spec-0.15.0/corpus/frontend/no-eval/compliant-02/src/modules/widgets/Widget.tsx +11 -0
- terp_spec-0.15.0/corpus/frontend/no-eval/violation-01/src/modules/widgets/Widget.tsx +3 -0
- terp_spec-0.15.0/corpus/frontend/no-eval/violation-02/src/modules/widgets/Widget.tsx +7 -0
- terp_spec-0.15.0/corpus/frontend/no-eval/violation-03/src/modules/widgets/Widget.tsx +10 -0
- terp_spec-0.15.0/corpus/frontend/no-eval/violation-04/src/modules/widgets/Widget.tsx +6 -0
- terp_spec-0.15.0/corpus/frontend/no-inline-styling/compliant-01/src/modules/widgets/Widget.tsx +4 -0
- terp_spec-0.15.0/corpus/frontend/no-inline-styling/violation-01/src/modules/widgets/Widget.tsx +3 -0
- terp_spec-0.15.0/corpus/frontend/no-inline-styling/violation-02/src/modules/widgets/Widget.tsx +6 -0
- terp_spec-0.15.0/corpus/frontend/no-style-imports/compliant-01/src/modules/widgets/Widget.tsx +4 -0
- terp_spec-0.15.0/corpus/frontend/no-style-imports/violation-01/src/modules/widgets/Widget.tsx +2 -0
- terp_spec-0.15.0/corpus/frontend/no-unsafe-href/compliant-01/src/modules/widgets/Widget.tsx +3 -0
- terp_spec-0.15.0/corpus/frontend/no-unsafe-href/violation-01/src/modules/widgets/Widget.tsx +3 -0
- terp_spec-0.15.0/corpus/frontend/no-unsafe-target-blank/compliant-01/src/modules/widgets/Widget.tsx +3 -0
- terp_spec-0.15.0/corpus/frontend/no-unsafe-target-blank/violation-01/src/modules/widgets/Widget.tsx +3 -0
- terp_spec-0.15.0/corpus/frontend/router-links/compliant-01/src/modules/widgets/Widget.tsx +4 -0
- terp_spec-0.15.0/corpus/frontend/router-links/violation-01/src/modules/widgets/Widget.tsx +3 -0
- terp_spec-0.15.0/corpus/frontend/token-styled-elements/compliant-01/src/modules/widgets/Widget.tsx +4 -0
- terp_spec-0.15.0/corpus/frontend/token-styled-elements/compliant-02/src/modules/widgets/Widget.tsx +4 -0
- terp_spec-0.15.0/corpus/frontend/token-styled-elements/violation-01/src/modules/widgets/Widget.tsx +3 -0
- terp_spec-0.15.0/docs/rules/backend/alembic_downgrades_not_empty.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/base_query_not_overridden.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/canonical_module_shape.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/datetime_columns_are_timezone_aware.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/escape_hatch_budget.md +25 -0
- terp_spec-0.15.0/docs/rules/backend/events_reference_catalog.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/input_schemas_exclude_managed_columns.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/input_str_fields_have_max_length.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/jobs_reference_catalog.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/list_routes_paginate.md +34 -0
- terp_spec-0.15.0/docs/rules/backend/modules_declare_policy.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/mutations_emit_audit.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/mutations_require_write_role.md +34 -0
- terp_spec-0.15.0/docs/rules/backend/no_adhoc_background_runtime.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/no_adhoc_config_decrypt.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/no_adhoc_logging_config.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/no_adhoc_middleware.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/no_adhoc_permission_literals.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/no_app_instantiation.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/no_blocking_sleep.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/no_cross_module_imports.md +28 -0
- terp_spec-0.15.0/docs/rules/backend/no_dependency_overrides.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/no_destructive_migrations.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/no_dynamic_sql.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/no_empty_tests.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/no_eval_or_exec.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/no_hardcoded_credentials.md +28 -0
- terp_spec-0.15.0/docs/rules/backend/no_internal_imports.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/no_manual_actor_stamping.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/no_manual_ownership_checks.md +34 -0
- terp_spec-0.15.0/docs/rules/backend/no_manual_scope_filtering.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/no_manual_table_schema.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/no_manual_version_assignment.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/no_mutable_default_args.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/no_naive_datetime.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/no_oversized_python_files.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/no_print.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/no_raw_app_routes.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/no_raw_connection_access.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/no_raw_file_references.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/no_raw_outbound_http.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/no_raw_session_construction.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/no_star_imports.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/no_todo_fixme.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/no_unique_columns_on_soft_delete_models.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/offset_queries_declare_ordering.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/path_id_params_are_uuid.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/policy_refs_resolve.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/public_modules_are_read_only.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/reads_use_base_query.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/response_model_not_table_model.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/routes_declare_response_model.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/safe_methods_are_read_only.md +34 -0
- terp_spec-0.15.0/docs/rules/backend/schemas_exclude_sensitive_fields.md +34 -0
- terp_spec-0.15.0/docs/rules/backend/session_imported_from_sqlmodel.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/table_models_use_base_table.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/tables_have_migrations.md +33 -0
- terp_spec-0.15.0/docs/rules/backend/tenant_scoped_models_use_scoped_service.md +32 -0
- terp_spec-0.15.0/docs/rules/backend/ungoverned_escape_hatch.md +25 -0
- terp_spec-0.15.0/docs/rules/backend/update_schemas_inherit_base_update_schema.md +34 -0
- terp_spec-0.15.0/docs/rules/frontend/escape-hatch.md +25 -0
- terp_spec-0.15.0/docs/rules/frontend/generated-client-only.md +32 -0
- terp_spec-0.15.0/docs/rules/frontend/layout-contract.md +33 -0
- terp_spec-0.15.0/docs/rules/frontend/no-cross-module-imports.md +28 -0
- terp_spec-0.15.0/docs/rules/frontend/no-deep-imports.md +32 -0
- terp_spec-0.15.0/docs/rules/frontend/no-dom-html-injection.md +32 -0
- terp_spec-0.15.0/docs/rules/frontend/no-eval.md +28 -0
- terp_spec-0.15.0/docs/rules/frontend/no-inline-styling.md +32 -0
- terp_spec-0.15.0/docs/rules/frontend/no-style-imports.md +28 -0
- terp_spec-0.15.0/docs/rules/frontend/no-unsafe-href.md +28 -0
- terp_spec-0.15.0/docs/rules/frontend/no-unsafe-target-blank.md +28 -0
- terp_spec-0.15.0/docs/rules/frontend/router-links.md +32 -0
- terp_spec-0.15.0/docs/rules/frontend/token-styled-elements.md +32 -0
- terp_spec-0.15.0/findings.schema.json +40 -0
- terp_spec-0.15.0/package.json +23 -0
- terp_spec-0.15.0/pyproject.toml +48 -0
- terp_spec-0.15.0/restricted-surface.json +10 -0
- terp_spec-0.15.0/scorecard.schema.json +52 -0
- terp_spec-0.15.0/terp_spec/__init__.py +39 -0
- terp_spec-0.15.0/tests/conftest.py +14 -0
- terp_spec-0.15.0/tests/test_assurance.py +90 -0
- terp_spec-0.15.0/tests/test_changelog.py +41 -0
- terp_spec-0.15.0/tests/test_check_report.py +145 -0
- terp_spec-0.15.0/tests/test_release_workflow.py +202 -0
- terp_spec-0.15.0/tests/test_rule_docs.py +38 -0
- terp_spec-0.15.0/tests/test_scorecard.py +71 -0
- terp_spec-0.15.0/tests/test_standard.py +486 -0
- terp_spec-0.15.0/tests/test_validator.py +92 -0
- terp_spec-0.15.0/tools/generate_rule_docs.py +109 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
name: ci
|
|
2
|
+
|
|
3
|
+
# The Terp Standard's own CI (ADR 0082): the spec is plain data + a tiny
|
|
4
|
+
# accessor with zero dependencies, and the `standard` job proves it
|
|
5
|
+
# self-consistent — versioning agreement, schema validity of every catalog
|
|
6
|
+
# entry, the finding format, the refused surface's shape, and the corpus
|
|
7
|
+
# ratchet. The `certify-against-reference` job closes the adoption gap the
|
|
8
|
+
# package seam leaves (framework CI reads the *pinned* release, so a change
|
|
9
|
+
# here would otherwise be exercised by no live implementation until the pins
|
|
10
|
+
# bump): it substitutes this checkout for the pinned terp-spec/@terpjs/spec and
|
|
11
|
+
# runs the framework's parity + corpus certification against it, so a catalog
|
|
12
|
+
# or corpus change is proven against the reference implementation BEFORE it
|
|
13
|
+
# can be released.
|
|
14
|
+
|
|
15
|
+
on:
|
|
16
|
+
push:
|
|
17
|
+
branches: [main]
|
|
18
|
+
pull_request:
|
|
19
|
+
branches: [main]
|
|
20
|
+
|
|
21
|
+
permissions:
|
|
22
|
+
contents: read
|
|
23
|
+
|
|
24
|
+
concurrency:
|
|
25
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
26
|
+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
27
|
+
|
|
28
|
+
jobs:
|
|
29
|
+
standard:
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
steps:
|
|
32
|
+
- uses: actions/checkout@v4
|
|
33
|
+
- uses: actions/setup-python@v5
|
|
34
|
+
with:
|
|
35
|
+
python-version: "3.12"
|
|
36
|
+
- name: Install
|
|
37
|
+
run: pip install pytest
|
|
38
|
+
- name: Test (the spec is self-consistent)
|
|
39
|
+
run: python -m pytest
|
|
40
|
+
|
|
41
|
+
certify-against-reference:
|
|
42
|
+
runs-on: ubuntu-latest
|
|
43
|
+
steps:
|
|
44
|
+
- uses: actions/checkout@v4
|
|
45
|
+
with:
|
|
46
|
+
path: spec
|
|
47
|
+
# The reference implementation. Tracks its default branch deliberately:
|
|
48
|
+
# a spec change must certify against what the framework IS, and a
|
|
49
|
+
# framework change that breaks parity should surface here, not at
|
|
50
|
+
# release time. (A private framework checkout would need a repo-scoped
|
|
51
|
+
# token on this step.)
|
|
52
|
+
- uses: actions/checkout@v4
|
|
53
|
+
with:
|
|
54
|
+
repository: AITT-NL/terp-framework
|
|
55
|
+
path: framework
|
|
56
|
+
- name: Record the certified reference commit
|
|
57
|
+
run: |
|
|
58
|
+
sha="$(git -C framework rev-parse HEAD)"
|
|
59
|
+
echo "Certifying against terp-framework@${sha}" | tee -a "$GITHUB_STEP_SUMMARY"
|
|
60
|
+
- name: Install uv
|
|
61
|
+
uses: astral-sh/setup-uv@v5
|
|
62
|
+
with:
|
|
63
|
+
enable-cache: true
|
|
64
|
+
- name: Set up Python
|
|
65
|
+
run: uv python install 3.13
|
|
66
|
+
- name: Python certification (catalog parity + backend corpus)
|
|
67
|
+
working-directory: framework
|
|
68
|
+
run: |
|
|
69
|
+
uv sync
|
|
70
|
+
# Substitute this checkout for the pinned terp-spec release — the
|
|
71
|
+
# same seam the framework's pin bump will move, exercised early.
|
|
72
|
+
uv pip install -e ../spec
|
|
73
|
+
uv run --no-sync pytest tests/architecture/test_spec_catalog.py tests/architecture/test_spec_corpus.py -q
|
|
74
|
+
- uses: actions/setup-node@v4
|
|
75
|
+
with:
|
|
76
|
+
node-version: "22"
|
|
77
|
+
- name: Frontend certification (ESLint adapter corpus + surface + findings)
|
|
78
|
+
working-directory: framework
|
|
79
|
+
run: |
|
|
80
|
+
npm ci
|
|
81
|
+
# Substitute the candidate spec under BOTH scope paths: the rename to
|
|
82
|
+
# @terpjs/spec (ADR 0086) lands here first, so the reference framework
|
|
83
|
+
# may still resolve the legacy @terp/spec until its repin lands. Drop
|
|
84
|
+
# the legacy leg once no consumer resolves it.
|
|
85
|
+
for scope in @terp @terpjs; do
|
|
86
|
+
rm -rf "node_modules/$scope/spec"
|
|
87
|
+
mkdir -p "node_modules/$scope"
|
|
88
|
+
ln -s "$GITHUB_WORKSPACE/spec" "node_modules/$scope/spec"
|
|
89
|
+
done
|
|
90
|
+
npx vitest run packages/frontend/eslint-boundaries
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
name: release
|
|
2
|
+
|
|
3
|
+
# The Terp Standard's release seam (ADR 0082, published per ADR 0086): a tag
|
|
4
|
+
# turns into two registry releases (`terp-spec` on PyPI, `@terpjs/spec` on npm)
|
|
5
|
+
# plus a GitHub Release. This workflow makes tagging fail-closed instead of a
|
|
6
|
+
# raw `git push origin v*`:
|
|
7
|
+
# the tag must match the checked-in VERSION (and the package manifests, which
|
|
8
|
+
# the test suite holds to VERSION), the tagged commit must be REACHABLE FROM
|
|
9
|
+
# THE DEFAULT BRANCH (provenance: no releasing an unreviewed side branch or a
|
|
10
|
+
# rewritten commit), the self-consistency suite must pass at the tagged
|
|
11
|
+
# commit, the spec must certify against the reference implementation, and both
|
|
12
|
+
# the publish jobs and the release job are BOUND to the verified commit (a tag
|
|
13
|
+
# moved or deleted mid-workflow is refused, never released). A GitHub Release
|
|
14
|
+
# then documents it with generated notes.
|
|
15
|
+
#
|
|
16
|
+
# Publishing uses Trusted Publishing (OIDC) on both registries — no long-lived
|
|
17
|
+
# token is stored here.
|
|
18
|
+
#
|
|
19
|
+
# tests/test_release_workflow.py holds this file to that contract.
|
|
20
|
+
|
|
21
|
+
on:
|
|
22
|
+
push:
|
|
23
|
+
tags: ["v*"]
|
|
24
|
+
|
|
25
|
+
permissions:
|
|
26
|
+
contents: read
|
|
27
|
+
|
|
28
|
+
# One run per tag ref: a retrigger or a racing duplicate never interleaves
|
|
29
|
+
# with an in-flight verification/release of the same tag.
|
|
30
|
+
concurrency:
|
|
31
|
+
group: release-${{ github.ref }}
|
|
32
|
+
cancel-in-progress: false
|
|
33
|
+
|
|
34
|
+
jobs:
|
|
35
|
+
verify:
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
outputs:
|
|
38
|
+
# The commit the checks below actually verified — the release job binds
|
|
39
|
+
# to THIS sha, so a tag force-moved mid-workflow cannot smuggle an
|
|
40
|
+
# unverified commit into the release.
|
|
41
|
+
verified_sha: ${{ steps.provenance.outputs.sha }}
|
|
42
|
+
steps:
|
|
43
|
+
- uses: actions/checkout@v4
|
|
44
|
+
with:
|
|
45
|
+
# Full history: the ancestry check below proves the tagged commit
|
|
46
|
+
# is reachable from the default branch — a shallow clone cannot.
|
|
47
|
+
fetch-depth: 0
|
|
48
|
+
- name: Tag matches the checked-in VERSION
|
|
49
|
+
run: |
|
|
50
|
+
version="${GITHUB_REF_NAME#v}"
|
|
51
|
+
checked_in="$(tr -d '[:space:]' < VERSION)"
|
|
52
|
+
[ "$version" = "$checked_in" ] \
|
|
53
|
+
|| { echo "tag $GITHUB_REF_NAME != VERSION ($checked_in)"; exit 1; }
|
|
54
|
+
- name: Tagged commit is reachable from the default branch
|
|
55
|
+
id: provenance
|
|
56
|
+
env:
|
|
57
|
+
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
|
|
58
|
+
run: |
|
|
59
|
+
# Fail closed at every step: no resolvable default branch, no
|
|
60
|
+
# dereferenceable tag, or no ancestry = no release.
|
|
61
|
+
[ -n "$DEFAULT_BRANCH" ] \
|
|
62
|
+
|| { echo "could not resolve the repository default branch"; exit 1; }
|
|
63
|
+
git fetch --no-tags origin \
|
|
64
|
+
"refs/heads/${DEFAULT_BRANCH}:refs/remotes/origin/${DEFAULT_BRANCH}"
|
|
65
|
+
tagged="$(git rev-parse "refs/tags/${GITHUB_REF_NAME}^{commit}")" \
|
|
66
|
+
|| { echo "cannot dereference tag $GITHUB_REF_NAME to a commit"; exit 1; }
|
|
67
|
+
git merge-base --is-ancestor "$tagged" "refs/remotes/origin/${DEFAULT_BRANCH}" \
|
|
68
|
+
|| { echo "tag $GITHUB_REF_NAME ($tagged) is not reachable from" \
|
|
69
|
+
"'${DEFAULT_BRANCH}' — release tags must point at reviewed," \
|
|
70
|
+
"merged history"; exit 1; }
|
|
71
|
+
echo "sha=$tagged" >> "$GITHUB_OUTPUT"
|
|
72
|
+
- uses: actions/setup-python@v5
|
|
73
|
+
with:
|
|
74
|
+
python-version: "3.12"
|
|
75
|
+
- name: The spec is self-consistent at the tagged commit
|
|
76
|
+
run: |
|
|
77
|
+
pip install pytest
|
|
78
|
+
python -m pytest
|
|
79
|
+
|
|
80
|
+
# A spec release must be certified against the live reference implementation
|
|
81
|
+
# (the same substitution ci.yml runs on every push): a tag can never publish a
|
|
82
|
+
# catalog or corpus no conformant checker exists for. Fail closed — the
|
|
83
|
+
# GitHub Release requires this job.
|
|
84
|
+
certify-against-reference:
|
|
85
|
+
needs: verify
|
|
86
|
+
runs-on: ubuntu-latest
|
|
87
|
+
outputs:
|
|
88
|
+
# The reference commit this release was certified against — recorded in
|
|
89
|
+
# the GitHub Release so the certification claim is reproducible: check
|
|
90
|
+
# out exactly this framework commit, substitute the tagged spec, re-run.
|
|
91
|
+
reference_sha: ${{ steps.reference.outputs.sha }}
|
|
92
|
+
steps:
|
|
93
|
+
- uses: actions/checkout@v4
|
|
94
|
+
with:
|
|
95
|
+
path: spec
|
|
96
|
+
- uses: actions/checkout@v4
|
|
97
|
+
with:
|
|
98
|
+
repository: AITT-NL/terp-framework
|
|
99
|
+
path: framework
|
|
100
|
+
- name: Record the certified reference commit
|
|
101
|
+
id: reference
|
|
102
|
+
run: |
|
|
103
|
+
sha="$(git -C framework rev-parse HEAD)"
|
|
104
|
+
echo "sha=$sha" >> "$GITHUB_OUTPUT"
|
|
105
|
+
echo "Certifying against terp-framework@${sha}" | tee -a "$GITHUB_STEP_SUMMARY"
|
|
106
|
+
- name: Install uv
|
|
107
|
+
uses: astral-sh/setup-uv@v5
|
|
108
|
+
with:
|
|
109
|
+
enable-cache: true
|
|
110
|
+
- name: Set up Python
|
|
111
|
+
run: uv python install 3.13
|
|
112
|
+
- name: Python certification (catalog parity + backend corpus)
|
|
113
|
+
working-directory: framework
|
|
114
|
+
run: |
|
|
115
|
+
uv sync
|
|
116
|
+
uv pip install -e ../spec
|
|
117
|
+
uv run --no-sync pytest tests/architecture/test_spec_catalog.py tests/architecture/test_spec_corpus.py -q
|
|
118
|
+
- uses: actions/setup-node@v4
|
|
119
|
+
with:
|
|
120
|
+
node-version: "22"
|
|
121
|
+
- name: Frontend certification (ESLint adapter corpus + surface + findings)
|
|
122
|
+
working-directory: framework
|
|
123
|
+
run: |
|
|
124
|
+
npm ci
|
|
125
|
+
# Substitute the candidate spec under BOTH scope paths: the rename to
|
|
126
|
+
# @terpjs/spec (ADR 0086) lands here first, so the reference framework
|
|
127
|
+
# may still resolve the legacy @terp/spec until its repin lands. Drop
|
|
128
|
+
# the legacy leg once no consumer resolves it.
|
|
129
|
+
for scope in @terp @terpjs; do
|
|
130
|
+
rm -rf "node_modules/$scope/spec"
|
|
131
|
+
mkdir -p "node_modules/$scope"
|
|
132
|
+
ln -s "$GITHUB_WORKSPACE/spec" "node_modules/$scope/spec"
|
|
133
|
+
done
|
|
134
|
+
npx vitest run packages/frontend/eslint-boundaries
|
|
135
|
+
|
|
136
|
+
# ADR 0086: the standard is published, not only tagged. Both publish jobs
|
|
137
|
+
# require certification (a version no conformant checker exists for can never
|
|
138
|
+
# reach a registry) and check out the VERIFIED COMMIT rather than the tag —
|
|
139
|
+
# a tag force-moved mid-workflow cannot change what gets published. Both are
|
|
140
|
+
# idempotent so a partially failed release is re-runnable.
|
|
141
|
+
publish-pypi:
|
|
142
|
+
needs: [verify, certify-against-reference]
|
|
143
|
+
runs-on: ubuntu-latest
|
|
144
|
+
# Part of the OIDC identity both registries verify: the trusted-publisher
|
|
145
|
+
# configurations name repository + workflow file + this environment, so a
|
|
146
|
+
# publish attempt from anywhere else is refused by the registry itself.
|
|
147
|
+
environment: release
|
|
148
|
+
permissions:
|
|
149
|
+
contents: read
|
|
150
|
+
id-token: write # PyPI Trusted Publishing (OIDC) — no API token stored
|
|
151
|
+
steps:
|
|
152
|
+
- uses: actions/checkout@v4
|
|
153
|
+
with:
|
|
154
|
+
ref: ${{ needs.verify.outputs.verified_sha }}
|
|
155
|
+
- uses: actions/setup-python@v5
|
|
156
|
+
with:
|
|
157
|
+
python-version: "3.12"
|
|
158
|
+
- name: Build the sdist + wheel
|
|
159
|
+
run: |
|
|
160
|
+
pip install build
|
|
161
|
+
python -m build
|
|
162
|
+
- name: Publish to PyPI (trusted publishing)
|
|
163
|
+
# Pinned by digest: this action holds a publishing credential.
|
|
164
|
+
uses: pypa/gh-action-pypi-publish@ba38be9e461d3875417946c167d0b5f3d385a247 # release/v1
|
|
165
|
+
with:
|
|
166
|
+
skip-existing: true
|
|
167
|
+
|
|
168
|
+
publish-npm:
|
|
169
|
+
needs: [verify, certify-against-reference]
|
|
170
|
+
runs-on: ubuntu-latest
|
|
171
|
+
environment: release
|
|
172
|
+
permissions:
|
|
173
|
+
contents: read
|
|
174
|
+
id-token: write # npm Trusted Publishing (OIDC) + provenance
|
|
175
|
+
steps:
|
|
176
|
+
- uses: actions/checkout@v4
|
|
177
|
+
with:
|
|
178
|
+
ref: ${{ needs.verify.outputs.verified_sha }}
|
|
179
|
+
- uses: actions/setup-node@v4
|
|
180
|
+
with:
|
|
181
|
+
node-version: "22"
|
|
182
|
+
registry-url: https://registry.npmjs.org
|
|
183
|
+
# Trusted Publishing (OIDC) needs npm >= 11.5.1; Node 22 ships an older
|
|
184
|
+
# npm. Upgrading lets `npm publish` exchange the id-token for a
|
|
185
|
+
# short-lived registry credential — no stored registry secret.
|
|
186
|
+
- run: npm install -g npm@latest
|
|
187
|
+
- name: Publish @terpjs/spec (public, via Trusted Publishing)
|
|
188
|
+
run: |
|
|
189
|
+
set -eu
|
|
190
|
+
# Data only: no dependencies, no build step — nothing to install
|
|
191
|
+
# before publishing.
|
|
192
|
+
version="${GITHUB_REF_NAME#v}"
|
|
193
|
+
if [ "$(npm view "@terpjs/spec@$version" version 2>/dev/null || true)" = "$version" ]; then
|
|
194
|
+
echo "@terpjs/spec@$version already on the registry — skipping"
|
|
195
|
+
exit 0
|
|
196
|
+
fi
|
|
197
|
+
npm publish --access public --provenance
|
|
198
|
+
|
|
199
|
+
github-release:
|
|
200
|
+
# The Release announces a published standard: it requires both registries
|
|
201
|
+
# (fail closed) so a Release can never point at a version consumers cannot
|
|
202
|
+
# install. Publishing binds to the verified COMMIT; the Release additionally
|
|
203
|
+
# re-verifies the tag IDENTITY below.
|
|
204
|
+
needs: [verify, certify-against-reference, publish-pypi, publish-npm]
|
|
205
|
+
runs-on: ubuntu-latest
|
|
206
|
+
permissions:
|
|
207
|
+
contents: write
|
|
208
|
+
steps:
|
|
209
|
+
- uses: actions/checkout@v4
|
|
210
|
+
- name: The tag still points at the verified commit
|
|
211
|
+
env:
|
|
212
|
+
VERIFIED_SHA: ${{ needs.verify.outputs.verified_sha }}
|
|
213
|
+
run: |
|
|
214
|
+
# Re-resolve the tag from the REMOTE at release time: a tag that
|
|
215
|
+
# was deleted or force-moved between verification and release is
|
|
216
|
+
# refused instead of released.
|
|
217
|
+
[ -n "$VERIFIED_SHA" ] \
|
|
218
|
+
|| { echo "no verified sha handed over from the verify job"; exit 1; }
|
|
219
|
+
git fetch --no-tags origin "refs/tags/${GITHUB_REF_NAME}" \
|
|
220
|
+
|| { echo "tag $GITHUB_REF_NAME no longer exists on origin"; exit 1; }
|
|
221
|
+
current="$(git rev-parse 'FETCH_HEAD^{commit}')"
|
|
222
|
+
[ "$current" = "$VERIFIED_SHA" ] \
|
|
223
|
+
|| { echo "tag $GITHUB_REF_NAME moved after verification" \
|
|
224
|
+
"($current != verified $VERIFIED_SHA) — refusing to release"; exit 1; }
|
|
225
|
+
- name: Create the GitHub Release (generated notes)
|
|
226
|
+
env:
|
|
227
|
+
GH_TOKEN: ${{ github.token }}
|
|
228
|
+
REFERENCE_SHA: ${{ needs.certify-against-reference.outputs.reference_sha }}
|
|
229
|
+
run: |
|
|
230
|
+
# --verify-tag: never create the tag as a side effect — release
|
|
231
|
+
# only an existing remote tag (the one just re-verified above).
|
|
232
|
+
# The certified reference commit makes the claim reproducible.
|
|
233
|
+
gh release create "$GITHUB_REF_NAME" \
|
|
234
|
+
--verify-tag \
|
|
235
|
+
--title "Terp Standard $GITHUB_REF_NAME" \
|
|
236
|
+
--generate-notes \
|
|
237
|
+
--notes "Certified against the reference implementation at [AITT-NL/terp-framework@${REFERENCE_SHA}](https://github.com/AITT-NL/terp-framework/commit/${REFERENCE_SHA})."
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[codz]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
# Usually these files are written by a python script from a template
|
|
31
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
+
*.manifest
|
|
33
|
+
*.spec
|
|
34
|
+
|
|
35
|
+
# Installer logs
|
|
36
|
+
pip-log.txt
|
|
37
|
+
pip-delete-this-directory.txt
|
|
38
|
+
|
|
39
|
+
# Unit test / coverage reports
|
|
40
|
+
htmlcov/
|
|
41
|
+
.tox/
|
|
42
|
+
.nox/
|
|
43
|
+
.coverage
|
|
44
|
+
.coverage.*
|
|
45
|
+
.cache
|
|
46
|
+
nosetests.xml
|
|
47
|
+
coverage.xml
|
|
48
|
+
*.cover
|
|
49
|
+
*.py.cover
|
|
50
|
+
.hypothesis/
|
|
51
|
+
.pytest_cache/
|
|
52
|
+
cover/
|
|
53
|
+
|
|
54
|
+
# Translations
|
|
55
|
+
*.mo
|
|
56
|
+
*.pot
|
|
57
|
+
|
|
58
|
+
# Django stuff:
|
|
59
|
+
*.log
|
|
60
|
+
local_settings.py
|
|
61
|
+
db.sqlite3
|
|
62
|
+
db.sqlite3-journal
|
|
63
|
+
|
|
64
|
+
# Flask stuff:
|
|
65
|
+
instance/
|
|
66
|
+
.webassets-cache
|
|
67
|
+
|
|
68
|
+
# Scrapy stuff:
|
|
69
|
+
.scrapy
|
|
70
|
+
|
|
71
|
+
# Sphinx documentation
|
|
72
|
+
docs/_build/
|
|
73
|
+
|
|
74
|
+
# PyBuilder
|
|
75
|
+
.pybuilder/
|
|
76
|
+
target/
|
|
77
|
+
|
|
78
|
+
# Jupyter Notebook
|
|
79
|
+
.ipynb_checkpoints
|
|
80
|
+
|
|
81
|
+
# IPython
|
|
82
|
+
profile_default/
|
|
83
|
+
ipython_config.py
|
|
84
|
+
|
|
85
|
+
# pyenv
|
|
86
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
87
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
88
|
+
# .python-version
|
|
89
|
+
|
|
90
|
+
# pipenv
|
|
91
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
92
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
93
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
94
|
+
# install all needed dependencies.
|
|
95
|
+
# Pipfile.lock
|
|
96
|
+
|
|
97
|
+
# UV
|
|
98
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
99
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
100
|
+
# commonly ignored for libraries.
|
|
101
|
+
# uv.lock
|
|
102
|
+
|
|
103
|
+
# poetry
|
|
104
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
105
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
106
|
+
# commonly ignored for libraries.
|
|
107
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
108
|
+
# poetry.lock
|
|
109
|
+
# poetry.toml
|
|
110
|
+
|
|
111
|
+
# pdm
|
|
112
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
113
|
+
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
|
|
114
|
+
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
|
|
115
|
+
# pdm.lock
|
|
116
|
+
# pdm.toml
|
|
117
|
+
.pdm-python
|
|
118
|
+
.pdm-build/
|
|
119
|
+
|
|
120
|
+
# pixi
|
|
121
|
+
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
|
|
122
|
+
# pixi.lock
|
|
123
|
+
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
|
|
124
|
+
# in the .venv directory. It is recommended not to include this directory in version control.
|
|
125
|
+
.pixi
|
|
126
|
+
|
|
127
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
128
|
+
__pypackages__/
|
|
129
|
+
|
|
130
|
+
# Celery stuff
|
|
131
|
+
celerybeat-schedule
|
|
132
|
+
celerybeat.pid
|
|
133
|
+
|
|
134
|
+
# Redis
|
|
135
|
+
*.rdb
|
|
136
|
+
*.aof
|
|
137
|
+
*.pid
|
|
138
|
+
|
|
139
|
+
# RabbitMQ
|
|
140
|
+
mnesia/
|
|
141
|
+
rabbitmq/
|
|
142
|
+
rabbitmq-data/
|
|
143
|
+
|
|
144
|
+
# ActiveMQ
|
|
145
|
+
activemq-data/
|
|
146
|
+
|
|
147
|
+
# SageMath parsed files
|
|
148
|
+
*.sage.py
|
|
149
|
+
|
|
150
|
+
# Environments
|
|
151
|
+
.env
|
|
152
|
+
.envrc
|
|
153
|
+
.venv
|
|
154
|
+
env/
|
|
155
|
+
venv/
|
|
156
|
+
ENV/
|
|
157
|
+
env.bak/
|
|
158
|
+
venv.bak/
|
|
159
|
+
|
|
160
|
+
# Spyder project settings
|
|
161
|
+
.spyderproject
|
|
162
|
+
.spyproject
|
|
163
|
+
|
|
164
|
+
# Rope project settings
|
|
165
|
+
.ropeproject
|
|
166
|
+
|
|
167
|
+
# mkdocs documentation
|
|
168
|
+
/site
|
|
169
|
+
|
|
170
|
+
# mypy
|
|
171
|
+
.mypy_cache/
|
|
172
|
+
.dmypy.json
|
|
173
|
+
dmypy.json
|
|
174
|
+
|
|
175
|
+
# Pyre type checker
|
|
176
|
+
.pyre/
|
|
177
|
+
|
|
178
|
+
# pytype static type analyzer
|
|
179
|
+
.pytype/
|
|
180
|
+
|
|
181
|
+
# Cython debug symbols
|
|
182
|
+
cython_debug/
|
|
183
|
+
|
|
184
|
+
# PyCharm
|
|
185
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
186
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
187
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
188
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
189
|
+
# .idea/
|
|
190
|
+
|
|
191
|
+
# Abstra
|
|
192
|
+
# Abstra is an AI-powered process automation framework.
|
|
193
|
+
# Ignore directories containing user credentials, local state, and settings.
|
|
194
|
+
# Learn more at https://abstra.io/docs
|
|
195
|
+
.abstra/
|
|
196
|
+
|
|
197
|
+
# Visual Studio Code
|
|
198
|
+
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
|
|
199
|
+
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
|
|
200
|
+
# and can be added to the global gitignore or merged into this file. However, if you prefer,
|
|
201
|
+
# you could uncomment the following to ignore the entire vscode folder
|
|
202
|
+
# .vscode/
|
|
203
|
+
# Temporary file for partial code execution
|
|
204
|
+
tempCodeRunnerFile.py
|
|
205
|
+
|
|
206
|
+
# Ruff stuff:
|
|
207
|
+
.ruff_cache/
|
|
208
|
+
|
|
209
|
+
# PyPI configuration file
|
|
210
|
+
.pypirc
|
|
211
|
+
|
|
212
|
+
# Marimo
|
|
213
|
+
marimo/_static/
|
|
214
|
+
marimo/_lsp/
|
|
215
|
+
__marimo__/
|
|
216
|
+
|
|
217
|
+
# Streamlit
|
|
218
|
+
.streamlit/secrets.toml
|
|
219
|
+
|
|
220
|
+
# Data-only spec package: no runtime deps, the lock is test-env noise.
|
|
221
|
+
uv.lock
|