Repository navigation
Audit: fix correctness, accounting and robustness bugs across the testbed - #17
Merged
Merged
Conversation
…bugs - validate/reducer: reject self-transfers (minted resources), non-string resources, boolean amounts, and amounts that would make a balance non-finite; per-tick produce cap is cumulative - economy: reject duplicate objective ids and role-only consumption overrides - branch: allow branching after a rejected event; snapshot load verifies digest format and content hash - constitution: stacked amendments apply together; recorded ballot is the single source of truth (dedup, eligibility); out-of-range quorum/threshold invalid; no re-enactment; unique version names - sanctions: keep every revocation interval so overlapping sanctions are enforced until the last one ends (expiry and upheld appeals) See AUDIT.md F1-F5, F18, F19, F24-F27, F52-F54.
- client: non-JSON 200 bodies raise ModelError; null content -> ""; completed-call counter feeds the stall watchdog - config: api_key hidden from repr; keys read via model.api_key_env are covered by leak guards; range-check retries/timeout/concurrency - campaign: production cap tracked per agent (was society-wide); sanction flag kept while another sanction is live; metrics count only accepted sanctions and filed appeals; probe subjects in send order - tasks: one bad orchestrator field no longer discards the tape; failed parses are still logged for token accounting - memory: consolidation prompt uses only the summary - prompts show the lifecycle tick (society-prompt/5, inner-life/2) - live: retry window includes pool/connect/backoff time See AUDIT.md F6, F13-F17, F33, F41, F42, F49, F50.
- outcome_metrics: due ticks in lifecycle units (declared or derived), ordered before matching outcomes; exclusion episodes bounded by the last lifecycle tick and merged when overlapping; zero baseline not evaluable - comparative_report: escape rule values once (dict values crashed); label undefined/zero baselines "not evaluable" - scenario: load-time errors for values that crashed live runs late - longitudinal: robust yes/no and 0-5 answer parsing - interview_values: link trajectory rows to the latest event by lifecycle tick - judge_live: key-material patterns no longer match agent prose and never echo the secret; interview_audit counts SimpleAudit ERROR as an error - live_bridge: scorer failure recorded as missing, not 0.0 See AUDIT.md F7, F8, F20, F28, F30, F32, F34-F38, F40, F43-F48, F51, F55-F57.
… safe - sweep: Ctrl-C no longer starts queued runs; resume reruns runs whose scenario changed and ignores runs from earlier invocations; previous attempts are renamed aside instead of appended to; label/YAML hardening - paired_run: same resume/set-aside rules, readable missing output_root, Ctrl-C stops, concurrency default honours VERDI_MAX_CONCURRENCY - interview_experiment: post-pass audit no longer crashes; uses the scenario's model block - g5: scan every configured key; causal guard ignores verbatim model text - cli: `--run-dir=` form honoured; bare `verdi` prints help - pilot: sanction evidence only from the scripted violation; unique live capture dir See AUDIT.md F9-F12, F21-F23, F29, F31, F36, F39, F46.
Records six audit passes, verification results, behaviour changes researchers should know about, open owner decisions (R1, R2, R14) and continuation steps.
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota. Try requesting a review at a lower effort level.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.
Minor bump: the audit fixes change simulation results vs 0.1.x (per-agent production caps, prompt versions, corrected metrics); see AUDIT.md.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Result of a multi-pass system audit (six independent review passes). It fixes 57 confirmed defects and adds 97 regression tests; each test was checked to fail on the pre-fix code. Full findings, evidence, remaining risks and continuation steps are in
AUDIT.md.Split into area-scoped commits that each pass ruff and the full suite on their own:
reprand covered by the leak guards.due_tick,recovery_timeandexclusion_episodes."Yes."and"4/5"were mis-parsed.--run-dir=form honoured.AUDIT.md.Reviewer notes
verdi.society-prompt/5andverdi.inner-life/2.metrics.jsonsanctions/appeals,excluded_ticksanddue_tickare now counted correctly.AUDIT.md.test_cliasserts the help output instead of a message pointing at a missing doc.test_b2_planted_key_material_fails_leakagenow requires that the finding does not repeat the key (stricter).test_completion_rate_well_formedincludes the newledger_tickfield.Test plan
ruff check .cleanpython -m pytest: 769 passed, 1 skipped (was 672)build_t0_state