pwn 0.5.783 → 0.5.784

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -3
  3. data/Rakefile +19 -1
  4. data/bin/pwn_setup +1 -1
  5. data/build_gem.sh +1 -1
  6. data/documentation/Backup-Retention.md +27 -0
  7. data/documentation/Cron.md +64 -35
  8. data/documentation/How-PWN-Works.md +1 -1
  9. data/documentation/Installation.md +247 -6
  10. data/documentation/Persistence.md +1 -1
  11. data/documentation/Reinforcement-Learning.md +5 -6
  12. data/documentation/diagrams/cron-scheduling.svg +130 -128
  13. data/documentation/diagrams/dot/cron-scheduling.dot +3 -3
  14. data/etc/default_cron/session_cleanup.rb +1217 -10
  15. data/lib/pwn/ai/agent/extrospection.rb +6 -7
  16. data/lib/pwn/ai/agent/learning.rb +48 -7
  17. data/lib/pwn/ai/agent/policy.rb +5 -0
  18. data/lib/pwn/ai/agent/swarm.rb +31 -16
  19. data/lib/pwn/ai/router.rb +45 -2
  20. data/lib/pwn/cron.rb +120 -49
  21. data/lib/pwn/migrate.rb +292 -15
  22. data/lib/pwn/plugins/binary_parser.rb +5 -4
  23. data/lib/pwn/plugins/ghidra.rb +4 -3
  24. data/lib/pwn/plugins/log.rb +18 -2
  25. data/lib/pwn/plugins/repl/ai.rb +12 -1
  26. data/lib/pwn/plugins/repl/ai_console.rb +6 -2
  27. data/lib/pwn/plugins/repl/ai_swarm.rb +4 -4
  28. data/lib/pwn/sessions.rb +58 -16
  29. data/lib/pwn/setup.rb +9 -17
  30. data/lib/pwn/version.rb +1 -1
  31. data/scripts/build_gate.rb +58 -0
  32. data/spec/integration/build_gate_spec.rb +73 -0
  33. data/spec/integration/persistence_roundtrip_spec.rb +1 -7
  34. data/spec/lib/pwn/ai/agent/policy_spec.rb +27 -0
  35. data/spec/lib/pwn/ai/router_spec.rb +30 -2
  36. data/spec/lib/pwn/cron_spec.rb +113 -6
  37. data/spec/lib/pwn/migrate_spec.rb +160 -5
  38. data/spec/lib/pwn/plugins/log_spec.rb +7 -0
  39. data/spec/lib/pwn/plugins/repl/ai_console_spec.rb +16 -4
  40. data/spec/lib/pwn/plugins/repl/ai_swarm_spec.rb +11 -0
  41. data/spec/lib/pwn/redaction_spec.rb +13 -10
  42. data/spec/lib/pwn/session_cleanup_concurrency_spec.rb +201 -0
  43. data/spec/lib/pwn/session_cleanup_default_spec.rb +165 -2
  44. data/spec/lib/pwn/session_cleanup_legacy_spec.rb +101 -0
  45. data/spec/lib/pwn/session_cleanup_payload_spec.rb +335 -2
  46. data/spec/lib/pwn/session_cleanup_recovery_spec.rb +389 -0
  47. data/spec/lib/pwn/sessions_spec.rb +112 -0
  48. data/spec/lib/pwn/setup_spec.rb +3 -1
  49. data/spec/support/gate_failure_formatter.rb +14 -0
  50. data/third_party/pwn_rdoc.jsonl +15 -1
  51. metadata +14 -7
@@ -1459,6 +1459,7 @@
1459
1459
  {"messages":[{"role":"user","content":"PWN::AI::Router.active_session_endpoint Usage"},{"role":"assistant","content":"`PWN::AI::Router.active_session_endpoint`: "}]}
1460
1460
  {"messages":[{"role":"user","content":"PWN::AI::Router.authors Usage"},{"role":"assistant","content":"`PWN::AI::Router.authors`: "}]}
1461
1461
  {"messages":[{"role":"user","content":"PWN::AI::Router.config_entry Usage"},{"role":"assistant","content":"`PWN::AI::Router.config_entry`: "}]}
1462
+ {"messages":[{"role":"user","content":"PWN::AI::Router.content_text Usage"},{"role":"assistant","content":"`PWN::AI::Router.content_text`: "}]}
1462
1463
  {"messages":[{"role":"user","content":"PWN::AI::Router.default_entry Usage"},{"role":"assistant","content":"`PWN::AI::Router.default_entry`: "}]}
1463
1464
  {"messages":[{"role":"user","content":"PWN::AI::Router.env_dig Usage"},{"role":"assistant","content":"`PWN::AI::Router.env_dig`: "}]}
1464
1465
  {"messages":[{"role":"user","content":"PWN::AI::Router.env_hash Usage"},{"role":"assistant","content":"`PWN::AI::Router.env_hash`: "}]}
@@ -1470,6 +1471,7 @@
1470
1471
  {"messages":[{"role":"user","content":"PWN::AI::Router.required_bins Usage"},{"role":"assistant","content":"`PWN::AI::Router.required_bins`: "}]}
1471
1472
  {"messages":[{"role":"user","content":"PWN::AI::Router.reset_usage Usage"},{"role":"assistant","content":"`PWN::AI::Router.reset_usage`: "}]}
1472
1473
  {"messages":[{"role":"user","content":"PWN::AI::Router.resolve Usage"},{"role":"assistant","content":"`PWN::AI::Router.resolve`: "}]}
1474
+ {"messages":[{"role":"user","content":"PWN::AI::Router.response_text Usage"},{"role":"assistant","content":"`PWN::AI::Router.response_text`: "}]}
1473
1475
  {"messages":[{"role":"user","content":"PWN::AI::Router.session_endpoint? Usage"},{"role":"assistant","content":"`PWN::AI::Router.session_endpoint?`: "}]}
1474
1476
  {"messages":[{"role":"user","content":"PWN::AI::Router.session_value? Usage"},{"role":"assistant","content":"`PWN::AI::Router.session_value?`: "}]}
1475
1477
  {"messages":[{"role":"user","content":"PWN::AI::Router.summarize Usage"},{"role":"assistant","content":"`PWN::AI::Router.summarize`: "}]}
@@ -2067,6 +2069,7 @@
2067
2069
  {"messages":[{"role":"user","content":"PWN::Cron.enable_linger Usage"},{"role":"assistant","content":"`PWN::Cron.enable_linger`: "}]}
2068
2070
  {"messages":[{"role":"user","content":"PWN::Cron.ensure_worker Usage"},{"role":"assistant","content":"`PWN::Cron.ensure_worker`: "}]}
2069
2071
  {"messages":[{"role":"user","content":"PWN::Cron.help Usage"},{"role":"assistant","content":"`PWN::Cron.help`: "}]}
2072
+ {"messages":[{"role":"user","content":"PWN::Cron.housekeeping_job? Usage"},{"role":"assistant","content":"`PWN::Cron.housekeeping_job?`: "}]}
2070
2073
  {"messages":[{"role":"user","content":"PWN::Cron.install_crontab_entry Usage"},{"role":"assistant","content":"`PWN::Cron.install_crontab_entry`: "}]}
2071
2074
  {"messages":[{"role":"user","content":"PWN::Cron.install_crontab_job Usage"},{"role":"assistant","content":"`PWN::Cron.install_crontab_job`: "}]}
2072
2075
  {"messages":[{"role":"user","content":"PWN::Cron.install_crontab_worker Usage"},{"role":"assistant","content":"`PWN::Cron.install_crontab_worker`: "}]}
@@ -2089,6 +2092,7 @@
2089
2092
  {"messages":[{"role":"user","content":"PWN::Cron.launchd_plist Usage"},{"role":"assistant","content":"`PWN::Cron.launchd_plist`: "}]}
2090
2093
  {"messages":[{"role":"user","content":"PWN::Cron.list Usage"},{"role":"assistant","content":"`PWN::Cron.list`: Supported Method Parameters\n\njobs = PWN::Cron.list\n"}]}
2091
2094
  {"messages":[{"role":"user","content":"PWN::Cron.load_jobs Usage"},{"role":"assistant","content":"`PWN::Cron.load_jobs`: "}]}
2095
+ {"messages":[{"role":"user","content":"PWN::Cron.native_execution? Usage"},{"role":"assistant","content":"`PWN::Cron.native_execution?`: "}]}
2092
2096
  {"messages":[{"role":"user","content":"PWN::Cron.native_unit_dir Usage"},{"role":"assistant","content":"`PWN::Cron.native_unit_dir`: "}]}
2093
2097
  {"messages":[{"role":"user","content":"PWN::Cron.os_type Usage"},{"role":"assistant","content":"`PWN::Cron.os_type`: "}]}
2094
2098
  {"messages":[{"role":"user","content":"PWN::Cron.parse_time Usage"},{"role":"assistant","content":"`PWN::Cron.parse_time`: "}]}
@@ -2096,8 +2100,9 @@
2096
2100
  {"messages":[{"role":"user","content":"PWN::Cron.pid_file Usage"},{"role":"assistant","content":"`PWN::Cron.pid_file`: "}]}
2097
2101
  {"messages":[{"role":"user","content":"PWN::Cron.process_alive? Usage"},{"role":"assistant","content":"`PWN::Cron.process_alive?`: "}]}
2098
2102
  {"messages":[{"role":"user","content":"PWN::Cron.read_pid Usage"},{"role":"assistant","content":"`PWN::Cron.read_pid`: "}]}
2103
+ {"messages":[{"role":"user","content":"PWN::Cron.registry_owned? Usage"},{"role":"assistant","content":"`PWN::Cron.registry_owned?`: "}]}
2099
2104
  {"messages":[{"role":"user","content":"PWN::Cron.relative_seconds Usage"},{"role":"assistant","content":"`PWN::Cron.relative_seconds`: "}]}
2100
- {"messages":[{"role":"user","content":"PWN::Cron.remove Usage"},{"role":"assistant","content":"`PWN::Cron.remove`: Supported Method Parameters\n\nPWN::Cron.remove(id:)\n"}]}
2105
+ {"messages":[{"role":"user","content":"PWN::Cron.remove Usage"},{"role":"assistant","content":"`PWN::Cron.remove`: Supported Method Parameters\n\nPWN::Cron.remove(id:, sync_native: false)\n"}]}
2101
2106
  {"messages":[{"role":"user","content":"PWN::Cron.remove_native_job Usage"},{"role":"assistant","content":"`PWN::Cron.remove_native_job`: "}]}
2102
2107
  {"messages":[{"role":"user","content":"PWN::Cron.rm_unit_file Usage"},{"role":"assistant","content":"`PWN::Cron.rm_unit_file`: "}]}
2103
2108
  {"messages":[{"role":"user","content":"PWN::Cron.ruby_eval_argv Usage"},{"role":"assistant","content":"`PWN::Cron.ruby_eval_argv`: "}]}
@@ -2141,6 +2146,7 @@
2141
2146
  {"messages":[{"role":"user","content":"PWN::Cron.which_bin Usage"},{"role":"assistant","content":"`PWN::Cron.which_bin`: "}]}
2142
2147
  {"messages":[{"role":"user","content":"PWN::Cron.windows? Usage"},{"role":"assistant","content":"`PWN::Cron.windows?`: "}]}
2143
2148
  {"messages":[{"role":"user","content":"PWN::Cron.windows_taskkill Usage"},{"role":"assistant","content":"`PWN::Cron.windows_taskkill`: "}]}
2149
+ {"messages":[{"role":"user","content":"PWN::Cron.with_registry_lock Usage"},{"role":"assistant","content":"`PWN::Cron.with_registry_lock`: "}]}
2144
2150
  {"messages":[{"role":"user","content":"PWN::Cron.worker_log Usage"},{"role":"assistant","content":"`PWN::Cron.worker_log`: "}]}
2145
2151
  {"messages":[{"role":"user","content":"PWN::Cron.worker_loop Usage"},{"role":"assistant","content":"`PWN::Cron.worker_loop`: "}]}
2146
2152
  {"messages":[{"role":"user","content":"PWN::Cron.worker_ruby_cmd Usage"},{"role":"assistant","content":"`PWN::Cron.worker_ruby_cmd`: "}]}
@@ -2315,16 +2321,23 @@
2315
2321
  {"messages":[{"role":"user","content":"PWN::Migrate.authors Usage"},{"role":"assistant","content":"`PWN::Migrate.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
2316
2322
  {"messages":[{"role":"user","content":"PWN::Migrate.backfill_vault Usage"},{"role":"assistant","content":"`PWN::Migrate.backfill_vault`: Supported Method Parameters\n\nr = PWN::Migrate.backfill_vault(\n\nkey: 'optional', iv: 'optional', dry_run: false, io: $stdout\n\n)\n\nDecrypt → deep-merge template UNDER user (never overwrites) →re-encrypt with the SAME key/iv. This is the fix for the #1 upgrade break: ‘NoMethodError: undefined method ’[]‘ for nil` when a release added `env[:new_engine]` and the user’s vault predates it.\n"}]}
2317
2323
  {"messages":[{"role":"user","content":"PWN::Migrate.backup! Usage"},{"role":"assistant","content":"`PWN::Migrate.backup!`: "}]}
2324
+ {"messages":[{"role":"user","content":"PWN::Migrate.backup_input_names Usage"},{"role":"assistant","content":"`PWN::Migrate.backup_input_names`: "}]}
2325
+ {"messages":[{"role":"user","content":"PWN::Migrate.backup_inventory Usage"},{"role":"assistant","content":"`PWN::Migrate.backup_inventory`: "}]}
2326
+ {"messages":[{"role":"user","content":"PWN::Migrate.backup_reference_pins Usage"},{"role":"assistant","content":"`PWN::Migrate.backup_reference_pins`: "}]}
2327
+ {"messages":[{"role":"user","content":"PWN::Migrate.backup_retention_policy Usage"},{"role":"assistant","content":"`PWN::Migrate.backup_retention_policy`: "}]}
2318
2328
  {"messages":[{"role":"user","content":"PWN::Migrate.check Usage"},{"role":"assistant","content":"`PWN::Migrate.check`: Supported Method Parameters\n\nPWN::Migrate.check(\n\nio: 'optional - IO to write the report to (default $stdout)'\n\n)\n\nHuman-readable ~/.pwn state doctor. Read-only. Called from PWN::Setup.check so ‘pwn setup` shows this alongside the native-gem / toolchain report.\n"}]}
2319
2329
  {"messages":[{"role":"user","content":"PWN::Migrate.decryptor Usage"},{"role":"assistant","content":"`PWN::Migrate.decryptor`: "}]}
2320
2330
  {"messages":[{"role":"user","content":"PWN::Migrate.deep_defaults Usage"},{"role":"assistant","content":"`PWN::Migrate.deep_defaults`: "}]}
2321
2331
  {"messages":[{"role":"user","content":"PWN::Migrate.env_template Usage"},{"role":"assistant","content":"`PWN::Migrate.env_template`: Supported Method Parameters\n\ntmpl = PWN::Migrate.env_template\n\nThe canonical current-release pwn.yaml shape, WITHOUT the I/O side-effects of PWN::Config.default_env. Prefers PWN::Config.env_template when that refactor is present.\n"}]}
2332
+ {"messages":[{"role":"user","content":"PWN::Migrate.expire_backup_generations Usage"},{"role":"assistant","content":"`PWN::Migrate.expire_backup_generations`: "}]}
2322
2333
  {"messages":[{"role":"user","content":"PWN::Migrate.help Usage"},{"role":"assistant","content":"`PWN::Migrate.help`: "}]}
2323
2334
  {"messages":[{"role":"user","content":"PWN::Migrate.human_size Usage"},{"role":"assistant","content":"`PWN::Migrate.human_size`: "}]}
2324
2335
  {"messages":[{"role":"user","content":"PWN::Migrate.installed_schema Usage"},{"role":"assistant","content":"`PWN::Migrate.installed_schema`: Supported Method Parameters\n\nschema = PWN::Migrate.installed_schema\n\n→ Integer schema number stamped in ~/.pwn/.schema (0 when absent).\n"}]}
2325
2336
  {"messages":[{"role":"user","content":"PWN::Migrate.jsonl_verify Usage"},{"role":"assistant","content":"`PWN::Migrate.jsonl_verify`: "}]}
2326
2337
  {"messages":[{"role":"user","content":"PWN::Migrate.missing_paths Usage"},{"role":"assistant","content":"`PWN::Migrate.missing_paths`: "}]}
2327
2338
  {"messages":[{"role":"user","content":"PWN::Migrate.needed? Usage"},{"role":"assistant","content":"`PWN::Migrate.needed?`: Supported Method Parameters\n\nbool = PWN::Migrate.needed?\n\nCheap predicate for PWN::Config.refresh_env — schema stamp only, no per-file probes, so it adds ~0 to launch time.\n"}]}
2339
+ {"messages":[{"role":"user","content":"PWN::Migrate.prune_backups Usage"},{"role":"assistant","content":"`PWN::Migrate.prune_backups`: Supported Method Parameters\n\nPWN::Migrate.prune_backups(dry_run: true, keep: 3, limit: 10, admission: nil) Default duplicate-only pruning is nondestructive to unique history. Explicit expire_history policy bounds recovery generations instead.\n"}]}
2340
+ {"messages":[{"role":"user","content":"PWN::Migrate.publish_backup_retention Usage"},{"role":"assistant","content":"`PWN::Migrate.publish_backup_retention`: "}]}
2328
2341
  {"messages":[{"role":"user","content":"PWN::Migrate.quarantine! Usage"},{"role":"assistant","content":"`PWN::Migrate.quarantine!`: "}]}
2329
2342
  {"messages":[{"role":"user","content":"PWN::Migrate.run Usage"},{"role":"assistant","content":"`PWN::Migrate.run`: Supported Method Parameters\n\nreport = PWN::Migrate.run(\n\nfix: 'optional - also autofix incompatible files (default: schema-migrations only)',\nbackup: 'optional - take timestamped backup of ~/.pwn first (default true)',\ndry_run: 'optional - report what WOULD happen, write nothing (default false)',\nkey: 'optional - vault key (default: read ~/.pwn/pwn.yaml.decryptor)',\niv: 'optional - vault iv (default: read ~/.pwn/pwn.yaml.decryptor)',\nio: 'optional - IO to write to (default $stdout)'\n\n)\n\nbackup 2. schema migrations installed→current 3. per-file\n\n\nautofix (when fix:true) 4. pwn.yaml key backfill (when fix:true and decryptor available) 5. stamp .schema.\n"}]}
2330
2343
  {"messages":[{"role":"user","content":"PWN::Migrate.safe_read Usage"},{"role":"assistant","content":"`PWN::Migrate.safe_read`: "}]}
@@ -3560,6 +3573,7 @@
3560
3573
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL::AIConsole::Control.checkpoint Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::AIConsole::Control.checkpoint`: "}]}
3561
3574
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL::AIConsole::Control.phase Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::AIConsole::Control.phase`: "}]}
3562
3575
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL::AIConsole::Control.stop Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::AIConsole::Control.stop`: "}]}
3576
+ {"messages":[{"role":"user","content":"PWN::Plugins::REPL::AIConsole::Control.stopping? Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::AIConsole::Control.stopping?`: "}]}
3563
3577
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL::AIConsole::Editor.new Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::AIConsole::Editor.new`: "}]}
3564
3578
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL::AIConsole::Editor.edit Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::AIConsole::Editor.edit`: "}]}
3565
3579
  {"messages":[{"role":"user","content":"PWN::Plugins::REPL::AIConsole::Editor.finish_search Usage"},{"role":"assistant","content":"`PWN::Plugins::REPL::AIConsole::Editor.finish_search`: "}]}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pwn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.783
4
+ version: 0.5.784
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.
@@ -169,14 +169,14 @@ dependencies:
169
169
  requirements:
170
170
  - - '='
171
171
  - !ruby/object:Gem::Version
172
- version: 3.4.0
172
+ version: 3.5.0
173
173
  type: :runtime
174
174
  prerelease: false
175
175
  version_requirements: !ruby/object:Gem::Requirement
176
176
  requirements:
177
177
  - - '='
178
178
  - !ruby/object:Gem::Version
179
- version: 3.4.0
179
+ version: 3.5.0
180
180
  - !ruby/object:Gem::Dependency
181
181
  name: colorize
182
182
  requirement: !ruby/object:Gem::Requirement
@@ -505,14 +505,14 @@ dependencies:
505
505
  requirements:
506
506
  - - '='
507
507
  - !ruby/object:Gem::Version
508
- version: 1.8.1
508
+ version: 1.8.2
509
509
  type: :runtime
510
510
  prerelease: false
511
511
  version_requirements: !ruby/object:Gem::Requirement
512
512
  requirements:
513
513
  - - '='
514
514
  - !ruby/object:Gem::Version
515
- version: 1.8.1
515
+ version: 1.8.2
516
516
  - !ruby/object:Gem::Dependency
517
517
  name: meshtastic
518
518
  requirement: !ruby/object:Gem::Requirement
@@ -1121,14 +1121,14 @@ dependencies:
1121
1121
  requirements:
1122
1122
  - - '='
1123
1123
  - !ruby/object:Gem::Version
1124
- version: 2.10.1
1124
+ version: 2.10.2
1125
1125
  type: :development
1126
1126
  prerelease: false
1127
1127
  version_requirements: !ruby/object:Gem::Requirement
1128
1128
  requirements:
1129
1129
  - - '='
1130
1130
  - !ruby/object:Gem::Version
1131
- version: 2.10.1
1131
+ version: 2.10.2
1132
1132
  - !ruby/object:Gem::Dependency
1133
1133
  name: thin
1134
1134
  requirement: !ruby/object:Gem::Requirement
@@ -1423,6 +1423,7 @@ files:
1423
1423
  - documentation/AI-Integration.md
1424
1424
  - documentation/AWS.md
1425
1425
  - documentation/Agent-Tool-Registry.md
1426
+ - documentation/Backup-Retention.md
1426
1427
  - documentation/Banner.md
1427
1428
  - documentation/Blockchain.md
1428
1429
  - documentation/Bounty.md
@@ -6575,6 +6576,7 @@ files:
6575
6576
  - pwn.gemspec
6576
6577
  - reinstall_gemset.sh
6577
6578
  - scripts/benchmark_policy.rb
6579
+ - scripts/build_gate.rb
6578
6580
  - spec/conventions_spec.rb
6579
6581
  - spec/documentation/installation_md_spec.rb
6580
6582
  - spec/documentation/prompt_version_placeholder_spec.rb
@@ -6651,6 +6653,7 @@ files:
6651
6653
  - spec/fixtures/sdr/rtl433/wh31.cu8
6652
6654
  - spec/fixtures/sdr/rtl433/wh31.json
6653
6655
  - spec/integration/bin_drivers_spec.rb
6656
+ - spec/integration/build_gate_spec.rb
6654
6657
  - spec/integration/config_spec.rb
6655
6658
  - spec/integration/dispatch_spec.rb
6656
6659
  - spec/integration/documentation_sync_spec.rb
@@ -7184,8 +7187,11 @@ files:
7184
7187
  - spec/lib/pwn/sdr/rfidler_spec.rb
7185
7188
  - spec/lib/pwn/sdr/son_micro_rfid_spec.rb
7186
7189
  - spec/lib/pwn/sdr_spec.rb
7190
+ - spec/lib/pwn/session_cleanup_concurrency_spec.rb
7187
7191
  - spec/lib/pwn/session_cleanup_default_spec.rb
7192
+ - spec/lib/pwn/session_cleanup_legacy_spec.rb
7188
7193
  - spec/lib/pwn/session_cleanup_payload_spec.rb
7194
+ - spec/lib/pwn/session_cleanup_recovery_spec.rb
7189
7195
  - spec/lib/pwn/session_trace_spec.rb
7190
7196
  - spec/lib/pwn/sessions_spec.rb
7191
7197
  - spec/lib/pwn/setup_spec.rb
@@ -7216,6 +7222,7 @@ files:
7216
7222
  - spec/lib/pwn_spec.rb
7217
7223
  - spec/smoke/lifecycle_authz_replay_smoke_test.rb
7218
7224
  - spec/spec_helper.rb
7225
+ - spec/support/gate_failure_formatter.rb
7219
7226
  - spec/support/harness/cli_faults.rb
7220
7227
  - spec/support/harness/evaluate.rb
7221
7228
  - spec/support/harness/experiment_preload.rb