strix/tests
Afraa Shaikh c0cc1a82c9 Address CSPT review: real data-flow + browser tests, fingerprint & docs fixes
Resolve the "changes required" review on the CSPT PR:

- SARIF: add a shared `_class_token` helper preferring the structured
  `finding_class` over a title keyword, used in BOTH `_class_fingerprint` and
  the synthetic branch of `_primary_fingerprint`, so a locationless CSPT finding
  no longer collapses onto a server-side traversal's primary fingerprint.
  Require CSPT reports to carry a discriminator (endpoint/method or a code
  location) so multiple locationless CSPT findings stay distinct.
- Dedup: include `finding_class` in the candidate and in
  `_prepare_report_for_comparison`; teach the judge that a differing
  finding_class under a shared CWE is not a duplicate.
- Skill/runbook: correct the %2f guidance — the browser does not decode `%2f`
  during normalization; only literal-slash dot-segments traverse, and
  `%2f`-based traversal is an app-layer decode. Switch fragment examples to raw
  `../../`. Split confirmation into a CSPT *primitive* (path steered) vs. an
  *impact* level (credentials/reach/chain) to stop false negatives. Fix
  non-loadable skill names to the underscore keys (`client_side_path_traversal`,
  `path_traversal_lfi_rfi`), including the skill frontmatter.
- Fixtures: drive `positive_normalized` from the fragment so it serves under a
  plain static server.
- Tests: add `test_cspt_browser_capture.py` — headless Chromium (Playwright) +
  a local request-capture server asserting the exact outbound path per positive
  and no traversal per negative, plus WHATWG ground-truth tests proving raw
  `../../` and `%2e%2e/` collapse while un-decoded `..%2f..%2f` does not. Add
  `test_cspt_dataflow.py` — a deterministic taint tracker that fails when a
  fixture's source and sink are present but unconnected. Add primary-fingerprint
  and dedup regressions. Add playwright to dev deps.
- Docs: list the CSPT skill in the public skills catalog.

Known follow-up (not blocking): `uv.lock` is left at format revision 2; run
`uv lock` with the repo's pinned uv to add the playwright dev dep without the
unrelated revision-2->3 rewrite. There is no test CI workflow yet; when one is
added it should run `uv run playwright install chromium` so the browser tests
execute (they importorskip otherwise).
2026-07-19 16:10:40 +05:30
..
fixtures/cspt Address CSPT review: real data-flow + browser tests, fingerprint & docs fixes 2026-07-19 15:18:01 +05:30
__init__.py Add configurable token / cost usage limits (#576) 2026-06-22 11:17:08 -04:00
test_agent_factory_shell.py Default sandbox exec commands to Bash (#764) 2026-07-14 03:44:05 -07:00
test_agent_tool_registration.py Allow scan agent tool registration (#733) 2026-07-11 23:58:51 -04:00
test_cli_target_list.py Add target list CLI option (#711) 2026-07-06 23:33:08 -04:00
test_config_loader.py feat(settings): add force_required_tool_choice to LlmSettings (#730) 2026-07-10 18:36:33 -04:00
test_cost_tracking.py fix(report): restore cost tracking for OpenRouter and other LiteLLM-routed models (#801) 2026-07-17 13:38:23 -07:00
test_cspt_browser_capture.py Address CSPT review: real data-flow + browser tests, fingerprint & docs fixes 2026-07-19 16:10:40 +05:30
test_cspt_dataflow.py Address CSPT review: real data-flow + browser tests, fingerprint & docs fixes 2026-07-19 15:18:01 +05:30
test_cspt_skill.py Address CSPT review: real data-flow + browser tests, fingerprint & docs fixes 2026-07-19 15:18:01 +05:30
test_docker_client_delete.py fix(runtime): swallow torn-down docker socket in sandbox delete() (#721) 2026-07-10 00:13:35 -04:00
test_execution.py Add configurable token / cost usage limits (#576) 2026-06-22 11:17:08 -04:00
test_hooks.py Add configurable token / cost usage limits (#576) 2026-06-22 11:17:08 -04:00
test_inputs.py chore(llm): shorten timeout helper docstring; update tests 2026-07-17 19:45:32 -07:00
test_local_dir_staging.py fix(runtime): stage symlink-safe copies for LocalDir uploads (#766) 2026-07-14 17:40:23 -04:00
test_local_sources.py Add target list CLI option (#711) 2026-07-06 23:33:08 -04:00
test_model_retry.py fix(llm): add per-turn model request timeout so stalled streams fail fast and retry 2026-07-17 18:40:23 -07:00
test_models.py fix(llm): use a JSON-serializable per-turn model timeout 2026-07-17 19:45:32 -07:00
test_notes.py fix: avoid note ID collisions (#630) 2026-07-02 22:54:44 -04:00
test_optional_deps.py fix(providers): declare bedrock + vertex extras and add provider import-error hints (#588) 2026-07-07 10:24:49 -04:00
test_provider_hints.py fix(providers): match google submodule imports and walk full exception chain 2026-07-10 07:21:47 -07:00
test_proxy_client.py revert(proxy): drop overfit Caido reconnect/HTTPQL band-aids, keep serialization lock (#799) 2026-07-17 13:18:40 -07:00
test_proxy_renderer.py fix(tui): show 'more content available' for view_request over 15 lines (#687) 2026-07-06 03:50:02 -07:00
test_report_writer.py fix(reporting): require advisory_cvss for dependency findings + add SCA TUI renderer (#753) 2026-07-12 17:31:49 -07:00
test_reporting_fields.py fix(reporting): require advisory_cvss for dependency findings + add SCA TUI renderer (#753) 2026-07-12 17:31:49 -07:00
test_runner_rate_limit.py fix(llm): add per-turn model request timeout so stalled streams fail fast and retry 2026-07-17 18:40:23 -07:00
test_runner_root_prompt.py fix(llm): add per-turn model request timeout so stalled streams fail fast and retry 2026-07-17 18:40:23 -07:00
test_sarif.py feat(report): SARIF 2.1.0 emitter for CI / code-scanning integration (#626) 2026-07-03 10:43:31 -04:00
test_sarif_stride.py feat(report): tag SARIF rules with STRIDE legs derived from CWE (#708) 2026-07-06 21:19:53 -04:00
test_session_entries.py fix(runtime): stage symlink-safe copies for LocalDir uploads (#766) 2026-07-14 17:40:23 -04:00
test_skill_dir_extension.py Add skill directory registration (#746) 2026-07-12 12:05:58 -04:00
test_state_repo_context.py fix(report): omit SARIF provenance for multiple repos (#726) 2026-07-10 09:41:18 -04:00