$ the-wire · showcase
IBM SDK held at 5.6.2 over leaked secret suffix, JSON extraction fixed
By RepoJournal · Filed · About AI Red Teaming · Composed from the cited sources · methodology
promptfoo pins its IBM and WatsonX dependencies to keep a secret-leaking SDK out of build profiles, fixes a JSON extractor that silently dropped valid objects, and garak corrects a promptinject sampling mismatch.
fix(deps): hold IBM core SDK at 5.6.2 promptfoo/promptfoo
IBM SDK 5.6.3 leaves the suffix of a JSON secret visible in HTTP debug logs when the value contains an escaped quote, so promptfoo now holds the core SDK at 5.6.2 and pauses Renovate upgrades. Both the core dependency and the copy WatsonX resolves transitively are pinned, including production install and rebuild profiles, so check the version your install resolves if you build from source.
fix(util): ignore braces inside strings when extracting JSON objects promptfoo/promptfoo
extractJsonObjects used to drop valid embedded objects whenever a string contained an unmatched brace, so `Result: {"value":"}"}` returned nothing. That broke contains-json assertions and model-response parsing; strict recognition now runs iteratively over overlapping 200,000-character windows, preserving later and nested objects.
fix(redteam): keep $ sequences literal when datamarking an injection (#11381) promptfoo/promptfoo
Datamarking an injection used to let `$` sequences in the payload get expanded instead of staying literal. They are now passed through untouched, so datamarked red-team probes no longer mutate the values you injected.
keep promptinject settings aligned with sampled prompts NVIDIA/garak
The capped promptinject probes shuffled and truncated `prompts` but not `pi_prompts`, so settings looked up by `seq` came from a different prompt than the one sent. Both lists are now built from the same shuffled, truncated source, keeping results consistent for a given seed.
refactor(redteam): remove orphaned voice crescendo promptfoo/promptfoo
The long tail was housekeeping: promptfoo removed the unregistered VoiceCrescendo provider (its text fallback was being serialized as WAV audio), staged Docker production dependencies in a separate install, and PyRIT and garak landed dependency bumps and test stabilization.
Action items