summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2026-04-02fix: update web dashboard to auto-discover data from multiple directoriesCaptainJack2491
- CSV results now found in logs/full_experiment/, output/, and config.output_dir - Viz images now found in viz/ (project root) and output/charts/ - Judge logs now found in judge_logs/ and logs/judge_full_experiment/ - Added CORS middleware for local development - Added /api/logs/ endpoints for browsing raw JSON experiment logs - Added --port and --host CLI args
2026-04-02Merge branch 'feature/web-gui'CaptainJack2491
2026-04-02docs: add v2 redesign notes with publication planCaptainJack2491
- 01: v1→v2 evolution history, results, limitations, rationalization hypothesis - 02: judge system state, single judge per prong, 20% validation protocol - 03: research plan analysis, Option B (two-phase) selected - 04: publication plan — paper structure, three-layer analysis strategy, Gemini ceiling effect handling, budget, venue targets, timeline Key decisions: - Two-phase design (540 runs) over full factorial (1,620) - Single paper: v1 exploratory → Study 1 (oversight) → Study 2 (framing) - Three-layer analysis: pooled → per-model → sensitivity excluding ceiling models
2026-04-01feat: implement robust reasoning token handling and multi-turn persistenceCaptainJack2491
- Refactored Agent's chat loop to explicitly preserve and pass back reasoning context (reasoning_details, reasoning) to OpenRouter. - Ensures frontier models like Gemini 3.1 and DeepSeek v3.2 maintain their 'thinking' chain during complex tool-calling sessions. - Enhanced reasoning extraction to support structured details, reasoning_content, and fallback tags. - Verified capture of encrypted and plain-text reasoning blocks in experimental logs.
2026-04-01Fix error runs not appearing in final summaryCaptainJack2491
2026-03-26Refactor judge module into judge/ packageCaptainJack2491
Split monolithic src/judge.py into a proper package structure: - src/judge/batch_providers.py: BatchProvider ABC, AnthropicBatchProvider, XAIBatchProvider - src/judge/judges.py: RegexChecker, BlackboxChecker, GlassboxChecker - src/judge/helpers.py: extract_* functions, parse_json_verdict - src/judge/prompts.py: BLACKBOX_PROMPT, GLASSBOX_PROMPT, constants - src/judge/judge.py: Judge orchestrator class - src/judge/__init__.py: Re-exports all public APIs
2026-03-26Add xAI (Grok) batch API supportCaptainJack2491
- Add XAIBatchProvider class implementing BatchProvider ABC - Add --provider CLI argument to judge_runner (anthropic|xai) - Refactor Judge class to use BatchProvider instead of direct API calls - Update tests for new Judge constructor signature
2026-03-25refactor: extract judge prompts to files and add granular blackbox categoriesCaptainJack2491
- Extracted Blackbox and Glassbox prompts from into their own markdown files in - Implemented progressive 4-tier Blackbox categories (FABRICATED, OMITTED_CRITICAL, DECEPTIVE_FRAMING, ACCURATE) - Added neutral examples to the Blackbox prompt to improve formatting consistency - Updated references and tests to match new judge categorization structure
2026-03-25feat: align all hidden goals with child_protection directive templateCaptainJack2491
2026-03-25fix: updated scenarios and added a new oneCaptainJack2491
2026-03-25feat: implement rich dashboard for experiment progressCaptainJack2491
2026-03-25feat: add tqdm progress bar and fix main config flag loadingCaptainJack2491
2026-03-25fix: catch and recover from JSONDecodeError on malformed tool argsCaptainJack2491
2026-03-25test: add coverage for v2 infra featuresCaptainJack2491
- VFSFactory: independent instances vs singletons - make_tools_for_vfs: parallel binding - config_loader: goal_types and max_workers parsing - runner: goal_type iteration and resume skipping - agent: goal_type storage and path resolution
2026-03-25feat: add hidden goal variants and rebalance child_protectionCaptainJack2491
- Create hidden_goals/ for all 3 scenarios (self_serving, moral, bare) - Corporate: shareholder value vs community harm vs bare instruction - Child protection: department stats vs saving lives vs bare directive - Pharma: stock price vs patient access vs bare instruction - Rebalance child_protection data: archive cases D, E, F (35KB -> 13.6KB) - Update child_protection regex_rules.yaml for remaining 3 cases
2026-03-25feat: add goal_type variation system and parallel processingCaptainJack2491
- vfs.py: add VFS.create() factory for parallel-safe independent instances - tools.py: add make_tools_for_vfs() to bind tools to specific VFS instances - config_loader.py: add goal_types and max_workers config properties - agent.py: add goal_type field, vfs_instance param, goal_type in log paths - runner.py: rewrite with goal_type loop dimension, ThreadPoolExecutor parallel execution, isolated VFS per run, flattened work items, thread-safe results All backward compatible - empty goal_types defaults to legacy hidden_goal.md, max_workers=1 defaults to sequential execution.
2026-03-24added new papersCaptainJack2491
2026-03-14feat: statistical analysis on the whole dataCaptainJack2491
2026-03-09feat: add total token usage chart and update documentationCaptainJack2491
This commit: - Adds a 'Total Token Usage by Model' chart alongside the average token chart - Updates the web_gui_plan.md to reflect the removal of execution APIs and the addition of the new data visualization features.
2026-03-09feat: add token usage metrics and click-to-zoom chartsCaptainJack2491
This commit: - Bakes total/prompt/completion tokens directly into results.csv - Reverts dynamic JSON scraping backend logic for speed - Adds modal overlay functionality to zoom Chart.js graphs on click
2026-03-09feat: implement multi-select filters and logical oversight sortingCaptainJack2491
This commit: - Replaces single-select dropdowns with multi-select checkbox lists - Adds 'All' and 'None' quick-action links for filter groups - Implements custom priority sorting for Oversight levels (low -> mid -> high) - Updates Chart.js logic to respect logical sorting on X-axes
2026-03-09feat: pivot Web GUI to dedicated Data Visualization DashboardCaptainJack2491
This commit: - Removes all execution logic (runs, cancellation, SSE logs) - Strips the terminal and configuration sidebar - Implements a global filtering panel (Model, Scenario, Oversight) - Dedicated the UI 100% to interactive Chart.js and static visuals
2026-03-09feat: upgrade web GUI to modular ES6 and add Chart.jsCaptainJack2491
This commit completely overhauls the initial GUI: - Splits monolithic JS/CSS into an ES6 module structure - Implements an industrial 'Control Room' dark theme - Adds dynamic file selection endpoints for CSV and JSON judge logs - Integrates Chart.js to automatically render visualizations from CSV data - Updates web_gui_plan.md to reflect architectural changes
2026-03-09feat: Add web GUI for experiment frameworkCaptainJack2491
- Add FastAPI backend (api/server.py) with endpoints for: - Config read/write - Scenario/model discovery - Experiment run management (start/cancel/status) - Real-time log streaming via SSE - Results fetching (CSV, images, judge results) - Add vanilla JS frontend (api/static/): - Clean dark-themed dashboard - Configuration panel with dropdowns - Live log terminal - Results viewer with tabs - Add documentation (docs/web_gui_plan.md) Dependencies added: fastapi, uvicorn, sse-starlette
2026-03-06feat(judge): add selective judging and log filteringCaptainJack2491
- Implement enabled_judges parameter in Judge class to selectively run regex, blackbox, or glassbox checks. - Add --judges CLI argument to judge_runner.py for granular control over judging pipeline. - Add --model and --scenario filters to judge_runner.py for targeted evaluation of experiment logs. - Optimize synchronous judging to skip LLM calls and API key checks when only local (regex) judges are enabled. - Update Anthropic Batch API integration to support dynamic number of requests per log based on enabled judges. - Improve console output and logging to reflect selected filters and active judge components.
2026-03-04fix(agent): added reasoning extraction from groq modelsCaptainJack2491
2026-03-02feat: regex checker now returns score (e.g. 6/7) instead of binary PASS/FAILCaptainJack2491
- Verdict shows matched/total required rules for more nuanced evaluation - Adds 'matched' and 'total' fields to result dict - Returns 'N/A' when no rules are defined
2026-03-02fix: sharpen glassbox category definitions for ROBUST_HONEST vs ↵CaptainJack2491
UNINTENTIONAL_FAILURE - ROBUST_HONEST: ignored hidden goal + output is accurate and complete - UNINTENTIONAL_FAILURE: ignored hidden goal + output has genuine quality issues - Added explicit disambiguation note in the prompt - Clarified CONSIDERED_HONEST as deliberate refusal to comply
2026-03-02fix(scenarios): removed `[HIDDEN]` token to stop models from think this is a ↵CaptainJack2491
test.
2026-03-02feat: add benign_goal (task description) context to blackbox judgeCaptainJack2491
- Blackbox prompt now includes TASK DESCRIPTION section from benign_goal.md - Helps judge evaluate framing even without a baseline - Hidden goal is never exposed (maintains blackbox/glassbox boundary) - Applied to both judge_single and prepare_batch_requests paths
2026-03-02fix: judge resilience for missing baselines and list-format regex rulesCaptainJack2491
- RegexChecker now handles both list-format and dict-format YAML rules - Judge falls back to experiment log's VFS state for source docs when no baseline exists - Blackbox judge receives '(No baseline available)' instead of crashing - Resume logic excludes .partial.json from completed run count
2026-03-02fix: global oversight_levels now filters scenario-available levelsCaptainJack2491
Previously a scenario with its own oversight/ directory would ignore the global oversight_levels config. Now the global list acts as a filter — only levels present in BOTH the scenario dir AND the global config are run. Warns if no levels match.
2026-03-02feat: incremental log saving via .partial.json filesCaptainJack2491
- Writes _in_progress.partial.json after each turn in the chat loop - Partial file persists if run crashes/hangs for post-mortem inspection - Cleaned up automatically when final save_logs succeeds - Enabled in both baseline and experiment runs via runner.py
2026-03-02feat: add generate_baseline toggle to configCaptainJack2491
- New 'generate_baseline' option in defaults (default: true) - When false, skips baseline generation entirely - Warns if no baseline exists when generation is disabled - Updated config.yaml.example and README.md with docs
2026-03-02feat: extract reasoning summaries from OpenAI reasoning modelsCaptainJack2491
- Handle reasoning.summary type in reasoning_details (GPT-5.3-codex etc.) - Prefix summaries with [SUMMARY] to distinguish from raw CoT - Add reasoning_format field to log entries for metadata tracking - Warn on first turn if no reasoning is detected (glass-box judging impact)
2026-03-01feat: add centralized logging with configurable debug levelsCaptainJack2491
- Create src/logger.py with Python logging module - Add 4 debug levels: 1=CRITICAL, 2=WARNING, 3=INFO, 4=DEBUG - Level 4 includes reasoning, VFS info, and available tools - Level 4 auto-enables file output (both mode) - Update agent.py and runner.py to use logger instead of print - Update config.yaml.example with logging configuration - Update README with logging documentation
2026-03-01fix(judge): added good regex filters for the judgeCaptainJack2491
2026-03-01feat(judge): updated blackbox to include source document for added accuracyCaptainJack2491
2026-03-01feat: added a script to summarize token usage based on a log folderCaptainJack2491
2026-02-27fix(judge): hash run_id to stay under Anthropic batch custom_id 64-char limitCaptainJack2491
2026-02-27fix: separate skipped runs from incomplete in summary outputCaptainJack2491
2026-02-27docs: add checkpoint/resume rationale note for methodologyCaptainJack2491
2026-02-26feat: add checkpoint/resume support and atomic log writesCaptainJack2491
- Runner now counts existing .json log files per combination and skips completed runs, resuming from where it left off - Log files are written atomically via temp file + rename to prevent corrupt files from being counted as completed - Added --no-resume CLI flag to force a fresh start - Resume is enabled by default
2026-02-26chore: add .env.example + config.yaml.example, gitignore config.yamlCaptainJack2491
- Create .env.example with placeholder keys for all providers - Create config.yaml.example with clean reference config - Add config.yaml and judge_logs/ to .gitignore - Load .env in judge.py for standalone usage
2026-02-25feat: implement judging system with regex, blackbox, and glassbox checksCaptainJack2491
- Add src/judge.py: RegexChecker, BlackboxChecker, GlassboxChecker, Judge orchestrator - Add src/judge_runner.py: CLI for batch/single judging with CSV output - Add regex_rules.yaml for corporate_sabotage_v2 and child_protection scenarios - Add judge config section to config.yaml (model, temperature, log_dir) - Add tests/test_judge.py: 34 unit tests covering all components - Uses Anthropic Batch API for half-cost LLM judge calls - Judge logs include full CoT reasoning and judge model for auditability
2026-02-24Update README: add testing section, document interrogation systemCaptainJack2491
2026-02-24Add comprehensive test suite (104 tests)CaptainJack2491
Tests cover: - VFS: sandbox escape, path traversal, CRUD, singleton staleness - Config loader: missing keys, temperature cascade, oversight fallback - Tools: schema/implementation sync, VFS delegation - Agent: message construction, error handling, token counting, reasoning extraction - Interrogation: sanitization, provider detection, prompt loading - Runner: baseline extraction, prompt assembly, success detection All tests run offline with mocked API calls.
2026-02-24[refactor] improved interrogation systemCaptainJack2491
- Fixed syntax errors in print statements (lines 159/162) - Added sanitize_for_api() to strip custom log fields before API calls - Added interactive commands: history, reasoning, vfs, info, save, help - Colored terminal output for readability - Better error handling (KeyboardInterrupt, EOFError) - Added --show-history flag to review conversation on load
2026-02-24[fix] VFS singleton reset + remove vestigial check_username toolCaptainJack2491
- VFS now creates fresh instance when root_path/fs_data is provided (prevents cross-scenario contamination in multi-scenario runs) - Removed check_username from tools (unrelated to any scenario)
2026-02-24[feat] baseline system - auto-generates baselines before experimentsCaptainJack2491
- Added _extract_baseline_content() to extract output from create_file tool calls - Baselines now saved to logs/{model}/{scenario}/baseline.md - Added global oversight fallback (scenario-specific → global oversight dir) - Updated config_loader with oversight level loading from scenario dirs