CI / lint / typecheck / import-linter / tests / secrets (push) Canceled after 0s
ob_ai_call is the only input to V2 pricing, and it was dropping the two numbers needed to interpret its own cost column. tokens_reasoning was captured from the provider response but never written to the table, so the cost of thinking mode was invisible once it left the process. Folding it into tokens_out was not an option either -- it is billed at the output rate, and mixing the two hides exactly the difference we now have to watch. rate_tier records which price list applied. Without it a row's cost_cents cannot be rechecked: DeepSeek's peak rate is double off-peak from 2026-08-17, so recomputing an old row at "the current rate" silently produces a different answer than what was actually billed. Migration 0002 adds both columns. tokens_reasoning defaults to 0 rather than NULL so cost aggregates do not collapse to NULL on historical rows; rate_tier stays nullable because rows written before this change genuinely have an unknown tier, and NULL says that more honestly than a guessed 'flat'. The smoke script now asserts both: reasoning tokens must be 0 (a non-zero value means a provider default re-enabled thinking mode behind our backs) and rate_tier must be present. Verified against the real API -- tokens_reasoning=0, rate_tier=off_peak, 3.9s round trip.
247 lines
5.9 KiB
Plaintext
Executable File
247 lines
5.9 KiB
Plaintext
Executable File
{
|
|
"version": "1.5.0",
|
|
"plugins_used": [
|
|
{
|
|
"name": "ArtifactoryDetector"
|
|
},
|
|
{
|
|
"name": "AWSKeyDetector"
|
|
},
|
|
{
|
|
"name": "AzureStorageKeyDetector"
|
|
},
|
|
{
|
|
"name": "Base64HighEntropyString",
|
|
"limit": 4.5
|
|
},
|
|
{
|
|
"name": "BasicAuthDetector"
|
|
},
|
|
{
|
|
"name": "CloudantDetector"
|
|
},
|
|
{
|
|
"name": "DiscordBotTokenDetector"
|
|
},
|
|
{
|
|
"name": "GitHubTokenDetector"
|
|
},
|
|
{
|
|
"name": "GitLabTokenDetector"
|
|
},
|
|
{
|
|
"name": "HexHighEntropyString",
|
|
"limit": 3.0
|
|
},
|
|
{
|
|
"name": "IbmCloudIamDetector"
|
|
},
|
|
{
|
|
"name": "IbmCosHmacDetector"
|
|
},
|
|
{
|
|
"name": "IPPublicDetector"
|
|
},
|
|
{
|
|
"name": "JwtTokenDetector"
|
|
},
|
|
{
|
|
"name": "KeywordDetector",
|
|
"keyword_exclude": ""
|
|
},
|
|
{
|
|
"name": "MailchimpDetector"
|
|
},
|
|
{
|
|
"name": "NpmDetector"
|
|
},
|
|
{
|
|
"name": "OpenAIDetector"
|
|
},
|
|
{
|
|
"name": "PrivateKeyDetector"
|
|
},
|
|
{
|
|
"name": "PypiTokenDetector"
|
|
},
|
|
{
|
|
"name": "SendGridDetector"
|
|
},
|
|
{
|
|
"name": "SlackDetector"
|
|
},
|
|
{
|
|
"name": "SoftlayerDetector"
|
|
},
|
|
{
|
|
"name": "SquareOAuthDetector"
|
|
},
|
|
{
|
|
"name": "StripeDetector"
|
|
},
|
|
{
|
|
"name": "TelegramBotTokenDetector"
|
|
},
|
|
{
|
|
"name": "TwilioKeyDetector"
|
|
}
|
|
],
|
|
"filters_used": [
|
|
{
|
|
"path": "detect_secrets.filters.allowlist.is_line_allowlisted"
|
|
},
|
|
{
|
|
"path": "detect_secrets.filters.common.is_baseline_file",
|
|
"filename": ".secrets.baseline"
|
|
},
|
|
{
|
|
"path": "detect_secrets.filters.common.is_ignored_due_to_verification_policies",
|
|
"min_level": 2
|
|
},
|
|
{
|
|
"path": "detect_secrets.filters.heuristic.is_indirect_reference"
|
|
},
|
|
{
|
|
"path": "detect_secrets.filters.heuristic.is_likely_id_string"
|
|
},
|
|
{
|
|
"path": "detect_secrets.filters.heuristic.is_lock_file"
|
|
},
|
|
{
|
|
"path": "detect_secrets.filters.heuristic.is_not_alphanumeric_string"
|
|
},
|
|
{
|
|
"path": "detect_secrets.filters.heuristic.is_potential_uuid"
|
|
},
|
|
{
|
|
"path": "detect_secrets.filters.heuristic.is_prefixed_with_dollar_sign"
|
|
},
|
|
{
|
|
"path": "detect_secrets.filters.heuristic.is_sequential_string"
|
|
},
|
|
{
|
|
"path": "detect_secrets.filters.heuristic.is_swagger_file"
|
|
},
|
|
{
|
|
"path": "detect_secrets.filters.heuristic.is_templated_secret"
|
|
}
|
|
],
|
|
"results": {
|
|
".env.example": [
|
|
{
|
|
"type": "Basic Auth Credentials",
|
|
"filename": ".env.example",
|
|
"hashed_secret": "5b0c72b82d7a4f2d7021527f86ab0bed290b9604",
|
|
"is_verified": false,
|
|
"line_number": 15
|
|
}
|
|
],
|
|
".github/workflows/ci.yml": [
|
|
{
|
|
"type": "Secret Keyword",
|
|
"filename": ".github/workflows/ci.yml",
|
|
"hashed_secret": "5b0c72b82d7a4f2d7021527f86ab0bed290b9604",
|
|
"is_verified": false,
|
|
"line_number": 28
|
|
},
|
|
{
|
|
"type": "Secret Keyword",
|
|
"filename": ".github/workflows/ci.yml",
|
|
"hashed_secret": "0454753c5b5d78d5b1602b790450c2c4722e109c",
|
|
"is_verified": false,
|
|
"line_number": 47
|
|
},
|
|
{
|
|
"type": "Basic Auth Credentials",
|
|
"filename": ".github/workflows/ci.yml",
|
|
"hashed_secret": "5b0c72b82d7a4f2d7021527f86ab0bed290b9604",
|
|
"is_verified": false,
|
|
"line_number": 48
|
|
},
|
|
{
|
|
"type": "Secret Keyword",
|
|
"filename": ".github/workflows/ci.yml",
|
|
"hashed_secret": "291cae9c7abc43bb36c3fcec27775787977ecbe7",
|
|
"is_verified": false,
|
|
"line_number": 52
|
|
}
|
|
],
|
|
"deploy/docker-compose.dev.yml": [
|
|
{
|
|
"type": "Secret Keyword",
|
|
"filename": "deploy/docker-compose.dev.yml",
|
|
"hashed_secret": "5b0c72b82d7a4f2d7021527f86ab0bed290b9604",
|
|
"is_verified": false,
|
|
"line_number": 14
|
|
},
|
|
{
|
|
"type": "Basic Auth Credentials",
|
|
"filename": "deploy/docker-compose.dev.yml",
|
|
"hashed_secret": "5b0c72b82d7a4f2d7021527f86ab0bed290b9604",
|
|
"is_verified": false,
|
|
"line_number": 51
|
|
}
|
|
],
|
|
"packages/shared/config.py": [
|
|
{
|
|
"type": "Secret Keyword",
|
|
"filename": "packages/shared/config.py",
|
|
"hashed_secret": "9b0fa95ea79b52c1ed98ded789d79eaca61144db",
|
|
"is_verified": false,
|
|
"line_number": 20
|
|
},
|
|
{
|
|
"type": "Basic Auth Credentials",
|
|
"filename": "packages/shared/config.py",
|
|
"hashed_secret": "5b0c72b82d7a4f2d7021527f86ab0bed290b9604",
|
|
"is_verified": false,
|
|
"line_number": 43
|
|
}
|
|
],
|
|
"tests/conftest.py": [
|
|
{
|
|
"type": "Secret Keyword",
|
|
"filename": "tests/conftest.py",
|
|
"hashed_secret": "54391aaa964c71a817e17e42a523ffbe7c75f0b6",
|
|
"is_verified": false,
|
|
"line_number": 20
|
|
},
|
|
{
|
|
"type": "Secret Keyword",
|
|
"filename": "tests/conftest.py",
|
|
"hashed_secret": "cf2f6537b575e33aa209a982172c4253835eee83",
|
|
"is_verified": false,
|
|
"line_number": 21
|
|
}
|
|
],
|
|
"tests/unit/test_deepseek_provider.py": [
|
|
{
|
|
"type": "Secret Keyword",
|
|
"filename": "tests/unit/test_deepseek_provider.py",
|
|
"hashed_secret": "3acfb2c2b433c0ea7ff107e33df91b18e52f960f",
|
|
"is_verified": false,
|
|
"line_number": 42
|
|
}
|
|
],
|
|
"tests/unit/test_log_redaction.py": [
|
|
{
|
|
"type": "Secret Keyword",
|
|
"filename": "tests/unit/test_log_redaction.py",
|
|
"hashed_secret": "7ce6ed3727ece51d2219f2bdc7f6db3594dc4d7f",
|
|
"is_verified": false,
|
|
"line_number": 49
|
|
}
|
|
],
|
|
"tests/unit/test_thinking_mode.py": [
|
|
{
|
|
"type": "Secret Keyword",
|
|
"filename": "tests/unit/test_thinking_mode.py",
|
|
"hashed_secret": "3acfb2c2b433c0ea7ff107e33df91b18e52f960f",
|
|
"is_verified": false,
|
|
"line_number": 48
|
|
}
|
|
]
|
|
},
|
|
"generated_at": "2026-08-13T17:02:10Z"
|
|
}
|