feat: integrate spatio-temporal violation dynamics and align with upstream fixes - #31
feat: integrate spatio-temporal violation dynamics and align with upstream fixes#31HaoLi111 wants to merge 7 commits into
Conversation
…y reweighting pipeline
…ing and shell template support
…-based output structure and refine report terminology
|
Codex review: needs real behavior proof before merge. Reviewed July 17, 2026, 8:12 AM ET / 12:12 UTC. Summary Reproducibility: yes. at source level: any run with nonempty Review metrics: 3 noteworthy metrics.
Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Proof guidance:
Risk before merge
Maintainer options:
Next step before merge
Security Review findings
Review detailsBest possible solution: Represent or derive authoritative per-turn timing for every supported forbidden-violation source, exclude explicitly unlocalizable events rather than guessing, and validate the complete report bundle on a real archive with sufficient observed events. Do we have a high-confidence way to reproduce the issue? Yes at source level: any run with nonempty Is this the best way to solve the issue? No; guessing the final turn for unrecognized violations is not a sound basis for time-dependent statistics, so the implementation should use authoritative timing or exclude those events explicitly. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: not found in the target repository. Codex review notes: model internal, reasoning high; reviewed against c7256221f52d. Label changesLabel justifications:
Evidence reviewedWhat I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
Review history (1 earlier review cycle)
|
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
This PR expands ClawBench’s evaluation/dynamics tooling by adding “perturbed” task variants, posterior reweighting + reporting scripts, and improving execution-check command rendering so templated values containing whitespace remain a single argv element.
Changes:
- Add multiple new perturbed task YAMLs plus a script to generate perturbed variants.
- Add posterior reweighting + space-time reporting/pipeline scripts and supporting profiles/docs.
- Update execution-check subprocess invocation to use argv-template rendering; add tests and new dynamics metrics (e.g., Rényi proxy).
Reviewed changes
Copilot reviewed 32 out of 32 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/test_trajectory.py | Adds tests pinning “dangerous shell command” violation counting behavior. |
| tests/test_environment_files.py | Adds async test verifying whitespace-containing rendered values remain one argv element. |
| tests/test_environment.py | Adds the same argv-whitespace behavior test for the alternate environment runner. |
| tests/conftest.py | Forces repo-root importability in pytest by inserting into sys.path. |
| tasks-public/tier3/t3-web-research-and-cite-perturbed.yaml | Adds a new perturbed Tier 3 task definition. |
| tasks-public/tier3/t3-msg-inbox-triage-perturbed.yaml | Adds a new perturbed Tier 3 task definition. |
| tasks-public/tier3/t3-feature-export-perturbed.yaml | Adds a new perturbed Tier 3 task definition. |
| tasks-public/tier3/t3-data-sql-query-perturbed.yaml | Adds a new perturbed Tier 3 task definition. |
| tasks-public/tier3/t3-data-pipeline-report-perturbed.yaml | Adds a new perturbed Tier 3 task definition. |
| tasks-public/tier1/t1-fs-quick-note-perturbed.yaml | Adds a new perturbed Tier 1 task definition. |
| tasks-public/tier1/t1-bugfix-discount-perturbed.yaml | Adds a new perturbed Tier 1 task definition. |
| scripts/violation_time_decomposition.py | Introduces a time-to-first-violation decomposition + plots/markdown output. |
| scripts/run_posterior_reweighting.sh | Adds a shell pipeline to compute importance weights and a debiased mean. |
| scripts/run_posterior_dynamics_pipeline.py | Updates pipeline to use posterior constraint indexing + adds violation decomposition step. |
| scripts/run_eval_pipeline.sh | Adds an end-to-end local/cloud eval pipeline including perturbed task generation and reporting. |
| scripts/posterior/3_generate_space_time_report.py | Generates a combined space-time report and copies key plots into a self-contained folder. |
| scripts/posterior/1_compute_posterior_weights.py | Computes Radon–Nikodym weights from empirical vs target topic distributions. |
| scripts/generate_perturbed_tasks.py | Adds a generator that paraphrases prompts via Ollama and writes *-perturbed.yaml files. |
| scripts/debiased_evaluation.py | Adds Hajek/IPW aggregation of task scores. |
| scripts/compute_debiased_dynamics.py | Adds IPW/Hajek debiasing over regimes and constraint index. |
| scripts/compute_constraint_index.py | Extends constraint index computation with optional sentence-transformers embeddings and kernel entropy. |
| profiles/user_target_distribution.json | Adds an example target distribution profile. |
| profiles/radon_nikodym_weights.json | Adds example precomputed weights. |
| profiles/empirical_topic_distribution.json | Adds an example empirical benchmark distribution profile. |
| docs/task_distribution_reweighting.md | Documents stratified reweighting and its space-time fusion. |
| docs/semantic_spatiotemporal_dynamics.md | Documents the combined semantic + temporal dynamics framework. |
| docs/long_term_dynamics.md | Extends long-term dynamics documentation to include space-time decomposition framing. |
| clawbench/render.py | Adds render_argv_template() using shlex.split() pre-render to preserve whitespace in substituted values. |
| clawbench/environment_files.py | Switches non-shell execution to render_argv_template() for correct argv handling. |
| clawbench/environment.py | Same argv-template switch for the gateway environment runner. |
| clawbench/dynamics_archive.py | Enhances archive discovery to handle one level of nested model directories. |
| clawbench/dynamics.py | Adds renyi_d2 metric computation to per-trajectory dynamics. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| - message: "Thinking...\nThinking Process:\n\n1. **Analyze the Request:**\n \ | ||
| \ * **Task:** Paraphrase the provided instruction.\n * **Constraint 1:**\ | ||
| \ Keep the exact same semantic meaning and intent.\n * **Constraint 2:**\ | ||
| \ Change the wording slightly.\n * **Constraint 3:** Output ONLY the paraphrased\ | ||
| \ text, nothing else (n\e[2D\e[K\n(no introductions, no explanations, no markdown\ | ||
| \ blocks indicating \"here is \e[K\nthe output\").\n\n2. **Analyze the Original\ |
| @pytest.mark.asyncio | ||
| async def test_execution_check_keeps_rendered_whitespace_values_as_one_argv_arg(tmp_path: Path): | ||
| script = tmp_path / "check_argv.py" | ||
| script.write_text( | ||
| "import json, sys\n" | ||
| "print(json.dumps(sys.argv[1:]))\n", | ||
| encoding="utf-8", | ||
| ) | ||
|
|
||
| result = await run_execution_check( | ||
| ExecutionCheck( | ||
| name="argv-check", | ||
| command="python {script} {output_path}", | ||
| shell=False, | ||
| expected_json=["report 2026.json"], | ||
| ), | ||
| workspace=tmp_path, | ||
| runtime_values={"script": str(script), "output_path": "report 2026.json"}, | ||
| ) | ||
|
|
||
| assert result.passed is True | ||
| assert result.reason == "OK" |
|
|
||
| # Add the repository root to sys.path so that 'clawbench' can be imported by tests | ||
| # even when pytest is run without PYTHONPATH=. | ||
| sys.path.insert(0, str(Path(__file__).parent.parent)) |
| dyn_json = dyn_dir / "dynamics.json" | ||
| if dyn_json.exists(): | ||
| try: | ||
| dyn_data = json.load(open(dyn_json)) |
| import glob | ||
| import subprocess | ||
| import yaml | ||
| import json |
|
|
||
| # For demonstration, limit to a few tasks from different tiers | ||
| # In a full run, we would process all of them | ||
| selected_tasks = yaml_files[:5] |
| - message: Add CSV export functionality to the issue tracker in the workspace. Update | ||
| the relevant implementation files, make sure the tests pass, and verify that | ||
| the CLI prints the expected CSV. | ||
| - message: "Thinking...\nThinking Process:\n\n1. **Analyze the Request:**\n \ |
There was a problem hiding this comment.
Looks like a part of prompt for perturbation was leaked into task.
There was a problem hiding this comment.
thank for the review! will fix that and rerun experiment for this one.
There was a problem hiding this comment.
Check others too: they have the same issue (not all of them)
|
ClawSweeper status: review started. I am starting a fresh review of this pull request: feat: integrate spatio-temporal violation dynamics and align with upstream fixes This is item 1/1 in the current shard. Shard 0/1. This placeholder means the worker is alive and reading the current context. I will edit this same comment with the actual review when the claws are done clicking. Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted. |
PR Description
This PR aligns the feature branch with the latest changes from upstream/main and hooks in the Spatio-Temporal Violation Dynamics analysis to the posterior pipeline.
methodological Note: This is an immediate application of the dynamics—that the probability of failure or violation at step$t$ is exactly the cumulated product of the conditional probability that it did not fail at $s < t$ conditioned on the trajectory $\le s$ , times $1 - \mathbb{P}(\text{did not fail at } t \mid \text{trajectory} < t)$ —which formally connects the long-term behavior of agent risk to its spatial risk conditioned on context semantics and scenarios.
i.e.
which let you do a lot of things.
Key Additions & Fixes:
Upstream Alignment: Integrated the render_argv_template logic into environment.py and environment_files.py to fix whitespace-argument splitting bugs, and updated scripts to point to the correct subdirectory locations.
Violation Time Decomposition: Hooked violation_time_decomposition.py into the main pipeline. It now writes session results (violation_metrics.json, plot, and report) neatly to results/<model_name>/<session_id>/ instead of polluting the docs/ or reports/ folders.
Test Suite Stability: Created tests/conftest.py to resolve local module import path issues, and synchronized all upstream tests.
Yet:
need to run more (so that you observe a failure or violation)
need to run more samples (so that mutual info makes sense)