ithrl 0.2.0__tar.gz → 0.3.0__tar.gz
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.
- ithrl-0.3.0/CHANGELOG.md +70 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/CONTRIBUTING.md +32 -14
- {ithrl-0.2.0 → ithrl-0.3.0}/PKG-INFO +21 -7
- {ithrl-0.2.0 → ithrl-0.3.0}/README.md +20 -6
- {ithrl-0.2.0 → ithrl-0.3.0}/ROADMAP.md +26 -10
- {ithrl-0.2.0 → ithrl-0.3.0}/docs/architecture.md +93 -8
- ithrl-0.3.0/docs/branding/branding.css +39 -0
- ithrl-0.3.0/docs/branding/ithrl-favicon.svg +16 -0
- ithrl-0.3.0/docs/branding/ithrl-icon.svg +12 -0
- ithrl-0.3.0/docs/branding/ithrl-logo-dark.svg +21 -0
- ithrl-0.3.0/docs/branding/ithrl-logo-light.svg +21 -0
- ithrl-0.3.0/docs/branding/ithrl-logo.png +0 -0
- ithrl-0.3.0/docs/branding/ithrl-social.png +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/docs/cli.md +42 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/docs/index.md +23 -8
- {ithrl-0.2.0 → ithrl-0.3.0}/docs/measurements.md +107 -7
- {ithrl-0.2.0 → ithrl-0.3.0}/docs/native-runs.md +89 -1
- {ithrl-0.2.0 → ithrl-0.3.0}/docs/research/index.md +1 -0
- ithrl-0.3.0/docs/research/ordinary-session-investigation.md +112 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/docs/research/reduction-design.md +120 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/docs/results.md +86 -1
- {ithrl-0.2.0 → ithrl-0.3.0}/docs/third-party-notices.txt +5 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/pyproject.toml +24 -6
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/adapters/codex/context.py +16 -34
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/adapters/contracts.py +39 -2
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/adapters/copilot/context.py +31 -39
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/adapters/registry.py +35 -1
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/case/evidence.py +114 -15
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/cli/__init__.py +4 -2
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/cli/fuzz_output.py +3 -10
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/cli/fuzz_run.py +5 -1
- ithrl-0.3.0/src/ithrl/cli/inspect.py +179 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/cli/output.py +11 -7
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/cli/sampled_output.py +58 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/cli/sampled_reduction.py +95 -35
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/cli/sampled_session.py +22 -69
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/cli/shrink.py +2 -30
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/execution/contracts.py +6 -2
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/experiment.py +68 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/fuzz/contracts.py +10 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/fuzz/deterministic.py +2 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/fuzz/sampling.py +2 -1
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/fuzz/simplify.py +3 -3
- ithrl-0.3.0/src/ithrl/inspection.py +778 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/mutation.py +29 -8
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/observations.py +18 -15
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/reduce/__init__.py +2 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/reduce/contracts.py +362 -29
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/reduce/engine.py +243 -23
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/reduce/search.py +52 -50
- ithrl-0.3.0/src/ithrl/results/inspection.py +382 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/results/models.py +2 -2
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/results/storage.py +22 -36
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/results/summary.py +3 -9
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/results/validation.py +31 -1
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/run_state.py +14 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/codex/capability.py +7 -46
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/codex/configuration.py +23 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/codex/isolation.py +9 -53
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/codex/materialize.py +122 -55
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/codex/policy.py +2 -2
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/codex/protocol.py +10 -4
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/codex/runner.py +4 -1
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/codex/runtime_configuration.py +24 -11
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/codex/schema.py +1 -13
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/contracts.py +16 -6
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/copilot/capability.py +7 -44
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/copilot/isolation.py +8 -51
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/copilot/materialize.py +64 -34
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/copilot/policy.py +1 -1
- ithrl-0.3.0/src/ithrl/runner/runtime/probes.py +49 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/runtime/process.py +4 -13
- ithrl-0.3.0/src/ithrl/runner/runtime/programs.py +75 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/validation.py +14 -21
- ithrl-0.3.0/src/ithrl/sampled_run_metadata.py +87 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/sampling.py +23 -1
- ithrl-0.3.0/src/ithrl/text_sections.py +218 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/workflow.py +55 -2
- ithrl-0.2.0/CHANGELOG.md +0 -128
- {ithrl-0.2.0 → ithrl-0.3.0}/.gitignore +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/LICENSE +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/docs/decisions/0001-native-evidence-and-controlled-runners.md +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/docs/decisions/0002-fixed-samples-and-durable-dispatch.md +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/docs/decisions/0003-strict-fresh-baselines.md +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/docs/decisions/0004-single-finding-fuzz-confirmation.md +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/docs/decisions/index.md +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/docs/research/context-fuzzing.md +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/docs/research/feasibility.md +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/docs/troubleshooting.md +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/examples/fuzz/campaign.toml +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/examples/fuzz/codex.jsonl +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/examples/fuzz/copilot.jsonl +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/__init__.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/__main__.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/adapters/__init__.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/adapters/_jsonl.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/adapters/codex/__init__.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/adapters/codex/decisions.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/adapters/codex/discovery.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/adapters/codex/parser.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/adapters/copilot/__init__.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/adapters/copilot/decisions.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/adapters/copilot/discovery.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/adapters/copilot/parser.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/adapters/discovery.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/adapters/errors.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/behavior.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/calibration.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/case/__init__.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/case/contracts.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/case/filesystem.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/case/source.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/case/source_context.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/case/source_storage.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/case/storage.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/cli/extract.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/cli/fuzz.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/cli/fuzz_session.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/cli/native.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/cli/paths.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/cli/progress.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/cli/sampled.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/context.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/decisions.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/examples/synthetic-trace.json +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/execution/__init__.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/execution/budget.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/execution/preflight.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/extraction.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/fuzz/__init__.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/fuzz/campaign.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/fuzz/configuration.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/fuzz/generation.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/fuzz/progress.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/fuzz/statistics.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/measurement.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/path_safety.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/results/__init__.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/__init__.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/codex/__init__.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/codex/protocol_contracts.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/codex/relay.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/codex/transcript.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/codex/worker.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/copilot/__init__.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/copilot/configuration.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/copilot/protocol/__init__.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/copilot/protocol/contracts.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/copilot/protocol/decoding.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/copilot/protocol/parser.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/copilot/protocol/state.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/copilot/runner.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/copilot/sdk_runtime.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/copilot/worker.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/evidence.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/fake.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/registry.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/runtime/__init__.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/runtime/certificates.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/runtime/contracts.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/runtime/output.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/runtime/protection.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/runner/runtime/state.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/statistics.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/synthetic.py +0 -0
- {ithrl-0.2.0 → ithrl-0.3.0}/src/ithrl/timestamps.py +0 -0
ithrl-0.3.0/CHANGELOG.md
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# CHANGELOG
|
|
2
|
+
|
|
3
|
+
## v0.3.0 (2026-11-10)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- Add finer final-response reduction ([#52](https://github.com/eberkut/ithrl/pull/52), [`562124a`](https://github.com/eberkut/ithrl/commit/562124ab071788a52e0d50dd538048ee67de464b))
|
|
8
|
+
- Define source-bound text-section removal ([#51](https://github.com/eberkut/ithrl/pull/51), [`56c9e6c`](https://github.com/eberkut/ithrl/commit/56c9e6cfb24a83dc32573232b447e574cb0f616f))
|
|
9
|
+
- Inspect retained context without provider calls ([#49](https://github.com/eberkut/ithrl/pull/49), [`5604688`](https://github.com/eberkut/ithrl/commit/5604688e269543305fe4b7b253a703dc404c1139))
|
|
10
|
+
- **reduce**: Qualify paragraph removal on ordinary sessions ([#58](https://github.com/eberkut/ithrl/pull/58), [`5c6ae26`](https://github.com/eberkut/ithrl/commit/5c6ae26760ea7bd94b406ebf9ba3214e5c4ce64c))
|
|
11
|
+
|
|
12
|
+
### Refactoring
|
|
13
|
+
|
|
14
|
+
- Simplify experiment workflows and test fixtures ([#50](https://github.com/eberkut/ithrl/pull/50), [`782bfa2`](https://github.com/eberkut/ithrl/commit/782bfa2692a49a5bb2a4f555801abda23cde6fda))
|
|
15
|
+
|
|
16
|
+
## v0.2.0 (2026-11-02)
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
- **codex**: Bound and account for physical provider requests ([#33](https://github.com/eberkut/ithrl/pull/33), [`88529d6`](https://github.com/eberkut/ithrl/commit/88529d6f8b930dbcc546a0011f085c67d0bef1ac))
|
|
21
|
+
- **copilot**: Recover catalogue connections and qualify fuzzing ([#37](https://github.com/eberkut/ithrl/pull/37), [`ff6cf63`](https://github.com/eberkut/ithrl/commit/ff6cf6324325f7f6dad8f8c9c80ea58bfe4e249a))
|
|
22
|
+
- **copilot**: Restore native session prefixes through the CLI ([#34](https://github.com/eberkut/ithrl/pull/34), [`36845dd`](https://github.com/eberkut/ithrl/commit/36845ddb8239c0a488552297aaa70e6211979e59))
|
|
23
|
+
- **fuzz**: Preserve accounting and validate campaign recovery ([#25](https://github.com/eberkut/ithrl/pull/25), [`f1f4793`](https://github.com/eberkut/ithrl/commit/f1f479318fe914f3033667b65381f7101bd3aaea))
|
|
24
|
+
- **sampling**: Enforce calibration budgets and report durable progress ([#32](https://github.com/eberkut/ithrl/pull/32), [`bd40577`](https://github.com/eberkut/ithrl/commit/bd40577c734d70b36e59a9e6d3babafa1502bfd3))
|
|
25
|
+
|
|
26
|
+
### Features
|
|
27
|
+
|
|
28
|
+
- **extract**: Support literal predicates for native decisions ([#31](https://github.com/eberkut/ithrl/pull/31), [`3b18c2b`](https://github.com/eberkut/ithrl/commit/3b18c2bdd814c4e4c3bf79825a8cab77eb433661))
|
|
29
|
+
- **fuzz**: Add mutation and sampled comparison services ([`56ee8b8`](https://github.com/eberkut/ithrl/commit/56ee8b8c5e1370b91db6c9c952eb8ceec19c95ae))
|
|
30
|
+
- **fuzz**: Expose inspectable campaigns and saved results ([#24](https://github.com/eberkut/ithrl/pull/24), [`e60e472`](https://github.com/eberkut/ithrl/commit/e60e47230b99e50ff42de7cd8fb89b3769e6d6e2))
|
|
31
|
+
- **fuzz**: Persist campaigns and recover interrupted execution ([#22](https://github.com/eberkut/ithrl/pull/22), [`806667f`](https://github.com/eberkut/ithrl/commit/806667f47e8bae1ccbf9b32fadc511ca559675d0))
|
|
32
|
+
- **fuzz**: Qualify native Codex text appends ([#28](https://github.com/eberkut/ithrl/pull/28), [`a5b880b`](https://github.com/eberkut/ithrl/commit/a5b880b60ef9834bb57b2c4950e18cd17ff0b275))
|
|
33
|
+
|
|
34
|
+
### Performance Improvements
|
|
35
|
+
|
|
36
|
+
- Streamline local workflows and harden result publication ([#36](https://github.com/eberkut/ithrl/pull/36), [`43b9d81`](https://github.com/eberkut/ithrl/commit/43b9d81d0dcff85708da5c914986a68bbe8141db))
|
|
37
|
+
|
|
38
|
+
## v0.1.0 (2026-10-23)
|
|
39
|
+
|
|
40
|
+
### Bug Fixes
|
|
41
|
+
|
|
42
|
+
- **adapters**: Detect saved session formats structurally ([`c8256b9`](https://github.com/eberkut/ithrl/commit/c8256b93ce79fb9c3f025e2b92a970f336497218))
|
|
43
|
+
- **reduce**: Validate native candidates before sampled dispatch ([`90d4c0d`](https://github.com/eberkut/ithrl/commit/90d4c0d11a206389d44c6a59991df53c19802514))
|
|
44
|
+
- **runner**: Clarify Codex isolation prerequisites ([`4a409c1`](https://github.com/eberkut/ithrl/commit/4a409c1f37caf301a00cfbd20d3a95cf15844eb9))
|
|
45
|
+
|
|
46
|
+
### Features
|
|
47
|
+
|
|
48
|
+
- Establish credential-free context reduction core ([`c517409`](https://github.com/eberkut/ithrl/commit/c517409c06e40c92b24a8b990685abd4acc9a9ba))
|
|
49
|
+
- **adapters**: Parse Codex and Copilot session evidence ([`3b81c26`](https://github.com/eberkut/ithrl/commit/3b81c2607397d884bcfb1b19dbf995f66ccb0107))
|
|
50
|
+
- **calibration**: Add bounded sampled runner calibration ([`f9db180`](https://github.com/eberkut/ithrl/commit/f9db18012565badc2cf2a3a4a6158487d4c5fb70))
|
|
51
|
+
- **case**: Preserve immutable native source evidence ([`d108b96`](https://github.com/eberkut/ithrl/commit/d108b96487ccb69f6b36642ae331d36272038722))
|
|
52
|
+
- **cli**: Add an installed example and focused public guides ([`1efc2ff`](https://github.com/eberkut/ithrl/commit/1efc2ffb03c734b666b1d1da9b5610ad62970267))
|
|
53
|
+
- **cli**: Add guarded native calibration ([`06d2bfb`](https://github.com/eberkut/ithrl/commit/06d2bfb3f4d34f4dc845d9d6877257e4e79f9120))
|
|
54
|
+
- **cli**: Integrate sampled reduction and exact resume ([`40be766`](https://github.com/eberkut/ithrl/commit/40be7664ba90ac5341d93fb5a725dbfa0efd48d3))
|
|
55
|
+
- **extract**: Support ordinary Codex and Copilot sessions ([`3cd0c10`](https://github.com/eberkut/ithrl/commit/3cd0c1092aeb3669b86fdae07e887d28ba9d685f))
|
|
56
|
+
- **reduce**: Add sampled contracts and durable progress ([`650252d`](https://github.com/eberkut/ithrl/commit/650252d76e8d7d72f3f5715ecaf488e752dc18b1))
|
|
57
|
+
- **reduce**: Integrate sampled candidate search ([`72958d8`](https://github.com/eberkut/ithrl/commit/72958d8d6ae0307ca2d090a2a10d02606bafdea6))
|
|
58
|
+
- **runner**: Add Codex final-response execution ([`ad30a9a`](https://github.com/eberkut/ithrl/commit/ad30a9a17b0e665056eca9b415cbf4e2770a7bf7))
|
|
59
|
+
- **runner**: Add controlled Copilot execution ([`c9d1bb2`](https://github.com/eberkut/ithrl/commit/c9d1bb23bfdd98bb022fd0b62ca9b8a81021fe4b))
|
|
60
|
+
- **runner**: Add isolated execution runtime ([`17d2224`](https://github.com/eberkut/ithrl/commit/17d22240414cdb32d4464f16e7b2621d99729ca0))
|
|
61
|
+
- **runner**: Add shared execution foundation ([`89536e9`](https://github.com/eberkut/ithrl/commit/89536e919730fc0abf680a2928a89761c78339f5))
|
|
62
|
+
- **runner**: Validate isolated native calibration ([`b0cd438`](https://github.com/eberkut/ithrl/commit/b0cd438d1fa280f0ddafa39d23653a7ac926da1b))
|
|
63
|
+
- **sampling**: Collect bounded fresh-baseline blocks ([`16abf30`](https://github.com/eberkut/ithrl/commit/16abf30b964eae299177d1e1dade6f545ffbda31))
|
|
64
|
+
- **sampling**: Support paced execution and safe overload replacement ([`5d70fbd`](https://github.com/eberkut/ithrl/commit/5d70fbd26901a0574883e07fd4055644c8515e80))
|
|
65
|
+
- **statistics**: Add fixed-sample candidate classification ([`fb26fca`](https://github.com/eberkut/ithrl/commit/fb26fcaf7c064f49ac7d63b4e2ceb1ab3d6dcdb5))
|
|
66
|
+
- **workflow**: Confirm sampled reductions with fresh evidence ([`ee291e4`](https://github.com/eberkut/ithrl/commit/ee291e4d906394452da61640989cef594f62caf7))
|
|
67
|
+
|
|
68
|
+
### Refactoring
|
|
69
|
+
|
|
70
|
+
- Simplify execution paths and avoid redundant context copies ([`34ab361`](https://github.com/eberkut/ithrl/commit/34ab36165fed08678a80679b3f1753e6f26f63f8))
|
|
@@ -26,8 +26,9 @@ For task-specific instructions, see [documentation](#documentation),
|
|
|
26
26
|
|
|
27
27
|
## Development setup
|
|
28
28
|
|
|
29
|
-
Use [uv](https://docs.astral.sh/uv/)
|
|
30
|
-
|
|
29
|
+
Use [uv](https://docs.astral.sh/uv/) at the version required by `tool.uv.required-version` in
|
|
30
|
+
`pyproject.toml`, and Python 3.12, 3.13 or 3.14. CI reads the same uv pin through `setup-uv`'s
|
|
31
|
+
`version-file` input. Python 3.14 is the primary development version. From the repository root:
|
|
31
32
|
|
|
32
33
|
```bash
|
|
33
34
|
uv sync --locked --all-groups --all-extras
|
|
@@ -82,6 +83,8 @@ The required `Python tests` check summarizes the test matrix. It accepts a skipp
|
|
|
82
83
|
after successful Markdown-only classification. Failed classification, missing decisions, test
|
|
83
84
|
failures and unexpected skips fail this check.
|
|
84
85
|
|
|
86
|
+
The logo sources, usage rules and regeneration commands are in [branding](docs/branding/README.md).
|
|
87
|
+
|
|
85
88
|
## Workflow and dependency checks
|
|
86
89
|
|
|
87
90
|
For GitHub Actions or Dependabot changes, use the jactionlint release pinned in
|
|
@@ -128,13 +131,21 @@ Use `uv run rumdl fmt .` to format Markdown, then `uv run rumdl check .` to lint
|
|
|
128
131
|
version and `pyproject.toml` configuration apply to pre-commit and CI. Prose wraps at 100
|
|
129
132
|
characters; commands and tables retain their layout. MkDocs syntax is recognized within `docs/`. The
|
|
130
133
|
generated CLI reference has narrow exceptions for Typer's prompts, option alignment and wrapping;
|
|
131
|
-
its byte-for-byte generation check remains enforced. The generated changelog
|
|
132
|
-
|
|
134
|
+
its byte-for-byte generation check remains enforced. The generated changelog keeps each entry on
|
|
135
|
+
one source line, with a line-length exception.
|
|
133
136
|
|
|
134
137
|
Keep installation and first-use instructions in README, and detailed user guides and reference in
|
|
135
138
|
`docs/`. Support, security and conduct policies live at the repository root. Keep private sessions,
|
|
136
139
|
cases and credentials out of documentation and generated output.
|
|
137
140
|
|
|
141
|
+
Use [Diátaxis](https://diataxis.fr/) to match a section to the reader's need. A tutorial guides
|
|
142
|
+
learning through a reproducible example with expected results. A how-to gives prerequisites,
|
|
143
|
+
actions and a success check for a specific task. Reference describes commands and contracts;
|
|
144
|
+
explanation covers rationale, evidence and limits. Link between these when the reader needs more
|
|
145
|
+
detail. Apply the distinction within existing pages; add a page when it has a separate purpose.
|
|
146
|
+
Use concrete instructions and claims supported by evidence. Remove filler, promotional language
|
|
147
|
+
and repeated explanations.
|
|
148
|
+
|
|
138
149
|
[ROADMAP.md](ROADMAP.md) describes future direction. GitHub issues own actionable scope,
|
|
139
150
|
dependencies, acceptance criteria and status; release milestones group scope and the public
|
|
140
151
|
[Project](https://github.com/users/eberkut/projects/1/views/4) provides views of those same issues.
|
|
@@ -300,8 +311,13 @@ justified and documented before release.
|
|
|
300
311
|
Python Semantic Release, pinned in the `release` dependency group, calculates versions from
|
|
301
312
|
Conventional Commits. `pyproject.toml` is the version source; installed CLI and Codex client
|
|
302
313
|
metadata read that distribution version. The tool generates `CHANGELOG.md` from the full release
|
|
303
|
-
history, omitting routine build, CI, documentation, style and test commits.
|
|
304
|
-
|
|
314
|
+
history, omitting routine build, CI, documentation, style and test commits. Its
|
|
315
|
+
[template](.github/changelog/CHANGELOG.md.j2) keeps lists compact, with one entry per source line.
|
|
316
|
+
Change the template to adjust formatting; do not edit generated entries by hand.
|
|
317
|
+
|
|
318
|
+
A maintainer starts preparation; Semantic Release chooses the version and writes the notes.
|
|
319
|
+
Review and merge the generated files through a PR so CI tests the prepared version before the
|
|
320
|
+
publication workflow builds it. The publication workflow uses that committed version.
|
|
305
321
|
|
|
306
322
|
Use `main` with complete history and all existing release tags available. Preview the next version
|
|
307
323
|
without changing files, the index, commits, tags or remote state:
|
|
@@ -339,9 +355,9 @@ ownership and the following repository/index settings:
|
|
|
339
355
|
|
|
340
356
|
- PyPI and TestPyPI Trusted Publishers bind `eberkut/ithrl`, `release.yml` and their respective
|
|
341
357
|
`pypi` / `testpypi` environments. Publishing uses OIDC, without a stored PyPI API token.
|
|
342
|
-
- Both environments admit only `main
|
|
343
|
-
|
|
344
|
-
|
|
358
|
+
- Both environments admit only `main`, require the maintainer's approval, permit self-review and
|
|
359
|
+
disallow administrative approval bypass. Environment declarations in YAML do not configure these
|
|
360
|
+
protections; verify the actual settings before dispatch.
|
|
345
361
|
- Release-tag rules permit the maintainer's signed-tag creation and prevent unapproved tag
|
|
346
362
|
replacement or deletion. The workflow never creates a tag.
|
|
347
363
|
|
|
@@ -353,10 +369,12 @@ gh workflow run release.yml --repo eberkut/ithrl --ref main \
|
|
|
353
369
|
-f version=X.Y.Z -f source-sha=FULL_APPROVED_COMMIT_SHA
|
|
354
370
|
```
|
|
355
371
|
|
|
356
|
-
1.
|
|
372
|
+
1. After source verification and validation pass, approve the `testpypi` deployment on the run's
|
|
373
|
+
GitHub page. This authorizes the public TestPyPI upload.
|
|
374
|
+
2. Inspect the successful **Publish TestPyPI rehearsal** job. Its summary records
|
|
357
375
|
the source, version, immutable artifact ID and checksum-manifest digest. The production job
|
|
358
376
|
waits at the `pypi` environment. TestPyPI files, logs and artifacts are public.
|
|
359
|
-
|
|
377
|
+
3. Download that run's `release-distributions` artifact into a new review directory. For example:
|
|
360
378
|
|
|
361
379
|
```bash
|
|
362
380
|
gh run download RUN_ID --repo eberkut/ithrl \
|
|
@@ -367,7 +385,7 @@ gh workflow run release.yml --repo eberkut/ithrl --ref main \
|
|
|
367
385
|
from the review directory. Inspect the release notes and confirm TestPyPI serves the same
|
|
368
386
|
distribution hashes. Complete a clean TestPyPI installation/example rehearsal before approval;
|
|
369
387
|
resolve dependencies only from the normal PyPI index, without mixing indexes.
|
|
370
|
-
|
|
388
|
+
4. After the rehearsal passes and tag creation is approved, create and verify the signed tag at
|
|
371
389
|
the frozen source commit, then push only that tag through the permitted tag-rules path:
|
|
372
390
|
|
|
373
391
|
```bash
|
|
@@ -376,12 +394,12 @@ gh workflow run release.yml --repo eberkut/ithrl --ref main \
|
|
|
376
394
|
git push origin refs/tags/vX.Y.Z
|
|
377
395
|
```
|
|
378
396
|
|
|
379
|
-
|
|
397
|
+
5. Review and approve the `pypi` deployment on the run's GitHub page. The job verifies the existing
|
|
380
398
|
annotated tag targets the frozen source, rechecks the files, and uploads to PyPI. The final job
|
|
381
399
|
rechecks the tag/files and creates the GitHub Release with those distributions, notes and
|
|
382
400
|
checksums. Signature verification belongs to the preceding maintainer tag check; the workflow
|
|
383
401
|
checks the tag object and target commit.
|
|
384
|
-
|
|
402
|
+
6. Verify the published versions, hashes, attestations and installed example. A successful upload
|
|
385
403
|
alone does not complete release acceptance.
|
|
386
404
|
|
|
387
405
|
Complete review within 30 days: release artifacts are retained for 30 days, and GitHub limits the
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: ithrl
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Find smaller agent contexts that preserve a selected model behavior
|
|
5
5
|
Project-URL: Source, https://github.com/eberkut/ithrl
|
|
6
6
|
Project-URL: Issues, https://github.com/eberkut/ithrl/issues
|
|
@@ -31,7 +31,15 @@ Provides-Extra: fuzz
|
|
|
31
31
|
Requires-Dist: scipy>=1.18; extra == 'fuzz'
|
|
32
32
|
Description-Content-Type: text/markdown
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
<!-- rumdl-disable MD033 -->
|
|
35
|
+
<h1>
|
|
36
|
+
<picture>
|
|
37
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/eberkut/ithrl/main/docs/branding/ithrl-logo-dark.svg">
|
|
38
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/eberkut/ithrl/main/docs/branding/ithrl-logo-light.svg">
|
|
39
|
+
<img src="https://raw.githubusercontent.com/eberkut/ithrl/main/docs/branding/ithrl-logo.png" alt="ithrl" width="320" height="158">
|
|
40
|
+
</picture>
|
|
41
|
+
</h1>
|
|
42
|
+
<!-- rumdl-enable MD033 -->
|
|
35
43
|
|
|
36
44
|
[](https://pypi.org/project/ithrl/)
|
|
37
45
|
[](https://github.com/eberkut/ithrl/actions/workflows/ci.yml)
|
|
@@ -88,6 +96,9 @@ Use a new directory to repeat the example; extraction refuses to overwrite an ex
|
|
|
88
96
|
|
|
89
97
|
- `ithrl extract` browses saved sessions and creates a case from a selected decision.
|
|
90
98
|
- `ithrl shrink CASE` searches for context removals that preserve the selected behavior.
|
|
99
|
+
- `ithrl inspect retained CASE --result RESULT` explains retained units and recorded removal trials
|
|
100
|
+
from a saved reduction without model access. See
|
|
101
|
+
[results and privacy](https://github.com/eberkut/ithrl/blob/main/docs/results.md#inspect-retained-context).
|
|
91
102
|
- `ithrl fuzz CASE --config PRIVATE_TOML` searches for and simplifies text appends that decrease how
|
|
92
103
|
often the selected behavior occurs, with independent confirmation.
|
|
93
104
|
|
|
@@ -107,8 +118,8 @@ Returned actions are observed and denied. Cases contain copied session content;
|
|
|
107
118
|
| Input | Extracted decisions | Reduction | Fuzzing |
|
|
108
119
|
| --- | --- | --- | --- |
|
|
109
120
|
| Bundled synthetic example | Synthetic tool request | Deterministic local runner | Local fake runner |
|
|
110
|
-
| Codex CLI rollouts | Final responses | Experimental native runner | Experimental prior-user text appends |
|
|
111
|
-
| Copilot CLI session events | Final responses and shell requests | Experimental final-response and denied `bash` runner | Experimental prior-user text appends for final-response targets |
|
|
121
|
+
| Codex CLI rollouts | Final responses | Experimental native runner; [paragraph-removal measurements](https://github.com/eberkut/ithrl/blob/main/docs/measurements.md#ordinary-session-paragraph-removal) | Experimental prior-user text appends |
|
|
122
|
+
| Copilot CLI session events | Final responses and shell requests | Experimental final-response paragraph removal and denied `bash` runner | Experimental prior-user text appends for final-response targets |
|
|
112
123
|
|
|
113
124
|
Native Codex and Copilot final-response fuzzing supports appending text to eligible prior user
|
|
114
125
|
input while preserving the fixed triggering input. The
|
|
@@ -116,9 +127,12 @@ input while preserving the fixed triggering input. The
|
|
|
116
127
|
starts with a local example and covers native execution.
|
|
117
128
|
|
|
118
129
|
[Saved-session measurements](https://github.com/eberkut/ithrl/blob/main/docs/measurements.md#saved-session-experiments)
|
|
119
|
-
include
|
|
120
|
-
|
|
121
|
-
|
|
130
|
+
include ordinary Codex and Copilot final-response experiments that removed paragraphs from retained
|
|
131
|
+
prior-user text and passed fresh confirmation at a 20-percentage-point preservation margin. The
|
|
132
|
+
[worked investigation](https://github.com/eberkut/ithrl/blob/main/docs/research/ordinary-session-investigation.md)
|
|
133
|
+
explains what the smaller Codex context helped a developer inspect and what remains unresolved.
|
|
134
|
+
The measurements distinguish private runtime qualification from integrated support and report
|
|
135
|
+
resource usage and unsuccessful outcomes alongside completed runs. Check
|
|
122
136
|
[native compatibility](https://github.com/eberkut/ithrl/blob/main/docs/native-runs.md#compatibility-and-measurements)
|
|
123
137
|
for the installed harness's requirements.
|
|
124
138
|
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
<!-- rumdl-disable MD033 -->
|
|
2
|
+
<h1>
|
|
3
|
+
<picture>
|
|
4
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/eberkut/ithrl/main/docs/branding/ithrl-logo-dark.svg">
|
|
5
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/eberkut/ithrl/main/docs/branding/ithrl-logo-light.svg">
|
|
6
|
+
<img src="https://raw.githubusercontent.com/eberkut/ithrl/main/docs/branding/ithrl-logo.png" alt="ithrl" width="320" height="158">
|
|
7
|
+
</picture>
|
|
8
|
+
</h1>
|
|
9
|
+
<!-- rumdl-enable MD033 -->
|
|
2
10
|
|
|
3
11
|
[](https://pypi.org/project/ithrl/)
|
|
4
12
|
[](https://github.com/eberkut/ithrl/actions/workflows/ci.yml)
|
|
@@ -55,6 +63,9 @@ Use a new directory to repeat the example; extraction refuses to overwrite an ex
|
|
|
55
63
|
|
|
56
64
|
- `ithrl extract` browses saved sessions and creates a case from a selected decision.
|
|
57
65
|
- `ithrl shrink CASE` searches for context removals that preserve the selected behavior.
|
|
66
|
+
- `ithrl inspect retained CASE --result RESULT` explains retained units and recorded removal trials
|
|
67
|
+
from a saved reduction without model access. See
|
|
68
|
+
[results and privacy](https://github.com/eberkut/ithrl/blob/main/docs/results.md#inspect-retained-context).
|
|
58
69
|
- `ithrl fuzz CASE --config PRIVATE_TOML` searches for and simplifies text appends that decrease how
|
|
59
70
|
often the selected behavior occurs, with independent confirmation.
|
|
60
71
|
|
|
@@ -74,8 +85,8 @@ Returned actions are observed and denied. Cases contain copied session content;
|
|
|
74
85
|
| Input | Extracted decisions | Reduction | Fuzzing |
|
|
75
86
|
| --- | --- | --- | --- |
|
|
76
87
|
| Bundled synthetic example | Synthetic tool request | Deterministic local runner | Local fake runner |
|
|
77
|
-
| Codex CLI rollouts | Final responses | Experimental native runner | Experimental prior-user text appends |
|
|
78
|
-
| Copilot CLI session events | Final responses and shell requests | Experimental final-response and denied `bash` runner | Experimental prior-user text appends for final-response targets |
|
|
88
|
+
| Codex CLI rollouts | Final responses | Experimental native runner; [paragraph-removal measurements](https://github.com/eberkut/ithrl/blob/main/docs/measurements.md#ordinary-session-paragraph-removal) | Experimental prior-user text appends |
|
|
89
|
+
| Copilot CLI session events | Final responses and shell requests | Experimental final-response paragraph removal and denied `bash` runner | Experimental prior-user text appends for final-response targets |
|
|
79
90
|
|
|
80
91
|
Native Codex and Copilot final-response fuzzing supports appending text to eligible prior user
|
|
81
92
|
input while preserving the fixed triggering input. The
|
|
@@ -83,9 +94,12 @@ input while preserving the fixed triggering input. The
|
|
|
83
94
|
starts with a local example and covers native execution.
|
|
84
95
|
|
|
85
96
|
[Saved-session measurements](https://github.com/eberkut/ithrl/blob/main/docs/measurements.md#saved-session-experiments)
|
|
86
|
-
include
|
|
87
|
-
|
|
88
|
-
|
|
97
|
+
include ordinary Codex and Copilot final-response experiments that removed paragraphs from retained
|
|
98
|
+
prior-user text and passed fresh confirmation at a 20-percentage-point preservation margin. The
|
|
99
|
+
[worked investigation](https://github.com/eberkut/ithrl/blob/main/docs/research/ordinary-session-investigation.md)
|
|
100
|
+
explains what the smaller Codex context helped a developer inspect and what remains unresolved.
|
|
101
|
+
The measurements distinguish private runtime qualification from integrated support and report
|
|
102
|
+
resource usage and unsuccessful outcomes alongside completed runs. Check
|
|
89
103
|
[native compatibility](https://github.com/eberkut/ithrl/blob/main/docs/native-runs.md#compatibility-and-measurements)
|
|
90
104
|
for the installed harness's requirements.
|
|
91
105
|
|
|
@@ -12,12 +12,12 @@ with scope and release dates decided from evidence.
|
|
|
12
12
|
Codex and GitHub Copilot are the primary harness integrations. Closing feature gaps between them
|
|
13
13
|
is the current priority.
|
|
14
14
|
|
|
15
|
-
##
|
|
15
|
+
## Completed: v0.2 context fuzzing
|
|
16
16
|
|
|
17
17
|
The `ithrl fuzz` command explores bounded context changes, simplifies interventions and
|
|
18
18
|
independently confirms their effects.
|
|
19
19
|
|
|
20
|
-
The
|
|
20
|
+
The released fuzzing capability supports **one confirmed finding per campaign**: a declared decrease
|
|
21
21
|
in the existing target's match probability among valid observations. A finding describes the
|
|
22
22
|
selected experiment, including execution reliability and assumptions. It does not establish a
|
|
23
23
|
model defect, a unique cause or semantic equivalence of the original and changed context.
|
|
@@ -36,27 +36,43 @@ See the [fuzzing capability issue](https://github.com/eberkut/ithrl/issues/5) an
|
|
|
36
36
|
[`v0.2.0` milestone](https://github.com/eberkut/ithrl/milestone/1) for scope and acceptance
|
|
37
37
|
criteria.
|
|
38
38
|
|
|
39
|
-
[
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
[Version 0.2.0](https://github.com/eberkut/ithrl/releases/tag/v0.2.0) is published, with
|
|
40
|
+
[release preparation and publication](https://github.com/eberkut/ithrl/issues/11) complete.
|
|
41
|
+
Broader mutation families and multiple-finding campaigns need their own evidence and prospective
|
|
42
|
+
error allocation.
|
|
43
|
+
|
|
44
|
+
## Current work: v0.3 deeper reduction
|
|
45
|
+
|
|
46
|
+
Provider-free retained-context inspection and finer removal within supported prior-user text are
|
|
47
|
+
implemented, with Codex and Copilot final-response workflows. Ordinary saved-session qualification
|
|
48
|
+
and a [worked investigation](docs/research/ordinary-session-investigation.md) are complete; the
|
|
49
|
+
[measurements](docs/measurements.md#ordinary-session-paragraph-removal) record outcomes, costs and
|
|
50
|
+
limits. Version 0.3 is not yet released.
|
|
51
|
+
[Issue #12](https://github.com/eberkut/ithrl/issues/12) owns the milestone's acceptance and scope.
|
|
52
|
+
|
|
53
|
+
Choose section boundaries, workload-specific usefulness criteria and execution budgets before
|
|
54
|
+
provider-backed evaluation. Finer native removal needs its own reconstruction, safety and live-use
|
|
55
|
+
evidence. Ablation, alternative reproducers, interaction analysis and statistically confirmed
|
|
56
|
+
single-removal minimality are deferred; they are not v0.3 release requirements.
|
|
43
57
|
|
|
44
58
|
## Direction by version
|
|
45
59
|
|
|
46
60
|
| Stage | Outcome | Candidate features |
|
|
47
61
|
| --- | --- | --- |
|
|
48
62
|
| **[v0.2: context fuzzing](https://github.com/eberkut/ithrl/issues/5)** | Find small context changes that alter a selected behavior | Bounded seeded mutations, discovery and mutation simplification, one fresh confirmed finding, exact recovery and explicit cost/reliability reporting |
|
|
49
|
-
| **[v0.3: deeper reduction](https://github.com/eberkut/ithrl/issues/12)** |
|
|
63
|
+
| **[v0.3: deeper reduction](https://github.com/eberkut/ithrl/issues/12)** | Inspect retained context and reduce within supported prior-user text | Provider-free inspection, text-section removal and qualified Codex/Copilot final-response workflows |
|
|
50
64
|
| **[v0.4: comparative debugging](https://github.com/eberkut/ithrl/issues/13)** | Isolate behavior-changing differences between compatible cases | `compare`, context-version delta debugging and another qualified harness integration |
|
|
51
65
|
| **[v0.5: trace forensics](https://github.com/eberkut/ithrl/issues/15)** | Explain what information was acquired again | Passive reacquisition analysis around compaction, resume, forks and handoffs |
|
|
52
66
|
|
|
53
67
|
### Deeper reduction
|
|
54
68
|
|
|
55
69
|
Reduction within a message must preserve its native structure and protocol dependencies. Retained
|
|
56
|
-
context inspection should distinguish
|
|
57
|
-
|
|
70
|
+
context inspection should distinguish protected or frozen material, dependency constraints,
|
|
71
|
+
rejected removal trials, incomplete evidence and untested work. Trial explanations must identify
|
|
72
|
+
the tested context; a rejected sampled screen does not establish behavioral necessity.
|
|
58
73
|
|
|
59
|
-
|
|
74
|
+
Deferred retained-item and full-original ablation answer different questions and must report their
|
|
75
|
+
baseline.
|
|
60
76
|
Alternative reproducer search can expose several preserving contexts and interactions; none is
|
|
61
77
|
automatically a unique explanation. Deterministic single-removal minimality and statistically
|
|
62
78
|
confirmed minimality are distinct claims. The latter requires additional complete comparisons,
|
|
@@ -8,7 +8,9 @@ runtime.
|
|
|
8
8
|
|
|
9
9
|
The
|
|
10
10
|
[README supported-inputs table](https://github.com/eberkut/ithrl/blob/main/README.md#supported-inputs)
|
|
11
|
-
defines the public capability claim. The public commands are `extract`, `shrink`
|
|
11
|
+
defines the public capability claim. The public commands are `extract`, `shrink`, `inspect retained`
|
|
12
|
+
and `fuzz`. Retained-context inspection reads saved evidence without resolving runners or opening
|
|
13
|
+
an observation store. Fuzzing
|
|
12
14
|
has a credential-free local walkthrough and qualified Codex and Copilot append-text profiles for
|
|
13
15
|
eligible prior user input. See [native runs](native-runs.md) for the operator
|
|
14
16
|
procedure, [measurements](measurements.md#native-context-fuzzing) for qualification evidence and
|
|
@@ -79,6 +81,82 @@ run allowance leaves sample targets, freshness, effective policy and per-attempt
|
|
|
79
81
|
Observation reuse requires compatible identities and roles; a matching candidate digest alone
|
|
80
82
|
is insufficient.
|
|
81
83
|
|
|
84
|
+
## Source-bound text sections
|
|
85
|
+
|
|
86
|
+
The shared `text_sections.py` contract describes removal from one eligible prior-user text field.
|
|
87
|
+
It is separate from native reconstruction and from search. Field discovery uses the existing
|
|
88
|
+
adapter-owned editable-text surface: fixed decision input, instructions, protected nodes and opaque
|
|
89
|
+
records remain outside it. A content block is a field; sections never cross block boundaries.
|
|
90
|
+
|
|
91
|
+
`paragraph-v1` partitions the original string using physical LF, CRLF or CR line endings. A blank
|
|
92
|
+
line contains only ASCII spaces or tabs before its ending. Each run of nonblank lines owns its
|
|
93
|
+
following blank lines; leading blank lines form their own section. A whitespace-only field has one
|
|
94
|
+
section, and an empty field has none. Other Unicode line separators are ordinary text. Offsets are
|
|
95
|
+
half-open Python Unicode code-point positions; UTF-8 byte counts are reported separately. No
|
|
96
|
+
trimming, newline conversion, separator insertion or Markdown interpretation occurs. Removing all
|
|
97
|
+
sections leaves the existing field empty and preserves its enclosing record and content block.
|
|
98
|
+
|
|
99
|
+
Catalogs contain metadata, not the original text. Section identities bind the immutable case,
|
|
100
|
+
context node, content-block index, original-text digest, policy and exact range. A removal stores
|
|
101
|
+
ordered section IDs rather than caller-supplied ranges. Validation re-derives the catalog from the
|
|
102
|
+
immutable eligible field, refusing stale or foreign IDs, duplicates and noncanonical order. Fields
|
|
103
|
+
are limited to 1 MiB of UTF-8 text and 1,024 sections; a field exceeding either limit is unavailable
|
|
104
|
+
under this policy rather than partially catalogued.
|
|
105
|
+
Case-level discovery omits fields beyond these limits while preserving complete catalogs for
|
|
106
|
+
other eligible fields. Explicit validation still refuses an edit to an unavailable field.
|
|
107
|
+
|
|
108
|
+
The candidate's existing mutation envelope distinguishes `append-text` from `remove-text-sections`.
|
|
109
|
+
Empty and append-only candidates retain their existing serialization and identities. A section edit
|
|
110
|
+
can accompany dependency-closed whole-record removal only when its parent survives; removing the
|
|
111
|
+
same field through its parent or dependencies is refused. Appending still requires unchanged
|
|
112
|
+
context. Exact-request materialization addresses the immutable original message before accounting
|
|
113
|
+
for removed input positions and changes a defensive copy. A combined section edit refuses any
|
|
114
|
+
dependency-closed removal intersecting the original last input, including a nested field, even
|
|
115
|
+
when graph flags would allow coarse removal. The fixed input remains unchanged.
|
|
116
|
+
Loading `Candidate` JSON validates its shape. Binding it to a `PreparedAttempt` invokes
|
|
117
|
+
`prepare_candidate`, which re-derives its source bindings against immutable case evidence;
|
|
118
|
+
well-formed JSON and digests alone do not authorize an edit. Project-owned schema tags remain `1`
|
|
119
|
+
during pre-1.0 development.
|
|
120
|
+
|
|
121
|
+
Retained-context inspection exposes metadata-only catalogs with a 4,096-unit report allowance;
|
|
122
|
+
over-budget fields have no partial catalog. [Results](results.md#inspect-retained-context) explains
|
|
123
|
+
availability, byte measures and interpretation. Original text remains behind the existing bounded
|
|
124
|
+
opt-in.
|
|
125
|
+
|
|
126
|
+
Codex and Copilot final-response materializers apply section removals to copied native input.
|
|
127
|
+
Codex changes only the selected prior-user text block. Copilot changes the effective
|
|
128
|
+
`transformedContent` when present, otherwise `content`, preserving the surrounding event and
|
|
129
|
+
unedited prefix records. Copilot shell targets and fuzzing refuse section removal.
|
|
130
|
+
|
|
131
|
+
Sampled reduction opts in through `reduction.section_search`. Its ordered field descriptors list
|
|
132
|
+
eligible original section IDs; omitted sections remain protected during fine search. Separate coarse
|
|
133
|
+
and fine comparison ceilings do not transfer unused capacity. The checkpoint freezes the exact
|
|
134
|
+
coarse candidate and stopping state before independent per-field searches. Each fine candidate
|
|
135
|
+
combines that same coarse removal with one field's cumulative section selection. It never combines
|
|
136
|
+
edits across fields. The largest admitted editable-byte removal wins, with the first candidate
|
|
137
|
+
retained on a tie; the usefulness threshold is reported separately from selection and confirmation.
|
|
138
|
+
Fine search first tests removal of all declared eligible sections in a field. If that candidate
|
|
139
|
+
is refused or rejected, search partitions that same selection into smaller removals. Protected
|
|
140
|
+
sections remain untouched, and whole-record candidate order is unchanged.
|
|
141
|
+
An optional frozen `require_criterion_for_confirmation` gate stops before durable selection and
|
|
142
|
+
confirmation when the additional-byte criterion is unmet. Run-state validation also rejects a
|
|
143
|
+
selection that violates that gate; disabling it preserves independent threshold reporting.
|
|
144
|
+
The frozen `stop_when_no_retained_fields` setting additionally ends coarse search at a completed
|
|
145
|
+
comparison boundary if all selected fields have been removed. It requires the confirmation gate,
|
|
146
|
+
preserves the accepted coarse edit and makes no new sampling reservation.
|
|
147
|
+
|
|
148
|
+
Candidate, experiment and algorithm identities bind the source, policy and traversal. Resume
|
|
149
|
+
reconstructs the recorded coarse and fine decisions without executing attempts. One final durable
|
|
150
|
+
selection precedes fresh confirmation against the full immutable original, including when either
|
|
151
|
+
search stage has incomplete coverage. Results retain both stages and the selected mutation;
|
|
152
|
+
inspection revalidates its source bindings without loading a runner or observation database.
|
|
153
|
+
|
|
154
|
+
Provider-free tests cover these implementation contracts. The
|
|
155
|
+
[ordinary-session measurements](measurements.md#ordinary-session-paragraph-removal) record completed
|
|
156
|
+
qualification for the tested native profiles and their integration limits. The
|
|
157
|
+
[workload criteria](research/reduction-design.md#text-section-workload-preparation) preserve the
|
|
158
|
+
original preparation proposal separately from those measurements.
|
|
159
|
+
|
|
82
160
|
## Measurement, search and confirmation
|
|
83
161
|
|
|
84
162
|
`measurement.py` invokes one prepared attempt, validates its returned evidence, evaluates the
|
|
@@ -141,13 +219,19 @@ before sampling resources are committed. An original reconstruction refusal is t
|
|
|
141
219
|
candidate-local refusal during search consumes no provider calls. Admission starts no process or
|
|
142
220
|
provider request; execution still validates the reconstructed candidate.
|
|
143
221
|
|
|
144
|
-
Codex reconstructs copied history through the installed CLI's app-server protocol. A
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
222
|
+
Codex reconstructs copied history through the installed CLI's app-server protocol. A tool-output
|
|
223
|
+
checkpoint includes the original output record and its captured call identity in the injected
|
|
224
|
+
history, then continues with empty new input. User-message triggers remain new user input. The
|
|
225
|
+
`codex-app-server-inject-checkpoint-v1` method binds this reconstruction contract; older
|
|
226
|
+
reconstruction identities cannot resume under it. Compacted source prefixes remain unsupported. An
|
|
227
|
+
explicit configuration-bound tool-output limit and conservative text-output admission prevent
|
|
228
|
+
reliance on a model-specific truncation default. Non-text tool-output content remains unsupported. A
|
|
229
|
+
bounded Responses relay forwards to the fixed configured destination and records physical request
|
|
230
|
+
counts. Native request and stream retries are disabled; a completed turn can still require several
|
|
231
|
+
Responses requests. The caller selects a per-attempt cap from 1 to 16 (default 16). Capability, plan
|
|
232
|
+
and saved-run identities retain this administrative limit. The relay rejects requests beyond the cap
|
|
233
|
+
and records a `provider-call-limit` error. A completed HTTP response alone does not establish model
|
|
234
|
+
acceptance or a completed native turn.
|
|
151
235
|
|
|
152
236
|
Copilot's Python SDK drives the installed CLI over stdio. It resumes the copied native prefix at
|
|
153
237
|
the selected model-turn boundary without injecting a user message, including decisions after tool
|
|
@@ -212,6 +296,7 @@ Python module names are not public API commitments.
|
|
|
212
296
|
| `fuzz/configuration.py` | Private operator policy and command limits, bound to an immutable original |
|
|
213
297
|
| `fuzz/progress.py`, `fuzz/campaign.py` | Frozen mutation order, authoritative traversal recovery, durable selection and terminal campaign evidence over shared sampled state |
|
|
214
298
|
| `workflow.py`, `results/` | Application phase composition and validated result models, summaries and snapshots |
|
|
299
|
+
| `inspection.py`, `results/inspection.py`, `cli/inspect.py` | Offline result/case binding, retained-context interpretation and CLI presentation |
|
|
215
300
|
| `cli/` | Public command selection, native setup, progress, continuation and presentation |
|
|
216
301
|
| `path_safety.py`, `timestamps.py` | Shared private-path/lock primitives and timestamp validation |
|
|
217
302
|
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
.ithrl-mark {
|
|
2
|
+
width: 2rem;
|
|
3
|
+
height: 2rem;
|
|
4
|
+
flex-shrink: 0;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.ithrl-mark .ink {
|
|
8
|
+
fill: #202427;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.ithrl-mark .accent {
|
|
12
|
+
fill: #00a58f;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.dark .ithrl-mark .ink {
|
|
16
|
+
fill: #fff;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.dark .ithrl-mark .accent {
|
|
20
|
+
fill: #24cdb5;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.ithrl-wordmark {
|
|
24
|
+
margin: 1rem 0 1.5rem;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.ithrl-wordmark img {
|
|
28
|
+
max-width: 100%;
|
|
29
|
+
height: auto;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.ithrl-logo-dark,
|
|
33
|
+
.dark .ithrl-logo-light {
|
|
34
|
+
display: none;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.dark .ithrl-logo-dark {
|
|
38
|
+
display: block;
|
|
39
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512" role="img" aria-labelledby="title description">
|
|
3
|
+
<title id="title">ithrl</title>
|
|
4
|
+
<desc id="description">ithrl spear; adapts to light and dark themes.</desc>
|
|
5
|
+
<metadata>ithrl logo 1.0. Hand-refined spear geometry; Geist Bold outlined wordmark with ss08 i and ss03 l. See source/OFL-Geist.txt for font provenance.</metadata>
|
|
6
|
+
<style>
|
|
7
|
+
.ink{fill:#202427}.accent{fill:#00A58F}
|
|
8
|
+
@media (prefers-color-scheme:dark){.ink{fill:#FFFFFF}.accent{fill:#24CDB5}}
|
|
9
|
+
</style>
|
|
10
|
+
<path id="context-upper-left" class="ink" fill="#202427" d="M136 184H286L225.62 256H75.62Z"/>
|
|
11
|
+
<path id="context-upper-right" class="ink" fill="#202427" d="M356.06 214H470L412.94 282H299Z"/>
|
|
12
|
+
<path id="context-lower-left-and-tail" class="ink" fill="#202427" d="M119 290H220L240 310L72.23 487L152 362H58.58Z"/>
|
|
13
|
+
<path id="context-lower-right" class="ink" fill="#202427" d="M264 312H414L361.98 374H211.98Z"/>
|
|
14
|
+
<path id="spear-tip" class="ink" fill="#202427" d="M266.60 227.32L294.18 250.46L456 29.65Z"/>
|
|
15
|
+
<path id="revealed-diamond" class="accent" fill="#00A58F" d="M256 237L287 268L256 299L225 268Z"/>
|
|
16
|
+
</svg>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" class="ithrl-mark size-8" viewBox="0 0 512 512" aria-hidden="true" focusable="false">
|
|
3
|
+
<title id="title">ithrl</title>
|
|
4
|
+
<desc id="description">ithrl spear.</desc>
|
|
5
|
+
<metadata>ithrl logo 1.0. Hand-refined spear geometry; Geist Bold outlined wordmark with ss08 i and ss03 l. See source/OFL-Geist.txt for font provenance.</metadata>
|
|
6
|
+
<path id="context-upper-left" class="ink" fill="#202427" d="M136 184H286L225.62 256H75.62Z"/>
|
|
7
|
+
<path id="context-upper-right" class="ink" fill="#202427" d="M356.06 214H470L412.94 282H299Z"/>
|
|
8
|
+
<path id="context-lower-left-and-tail" class="ink" fill="#202427" d="M119 290H220L240 310L72.23 487L152 362H58.58Z"/>
|
|
9
|
+
<path id="context-lower-right" class="ink" fill="#202427" d="M264 312H414L361.98 374H211.98Z"/>
|
|
10
|
+
<path id="spear-tip" class="ink" fill="#202427" d="M266.60 227.32L294.18 250.46L456 29.65Z"/>
|
|
11
|
+
<path id="revealed-diamond" class="accent" fill="#00A58F" d="M256 237L287 268L256 299L225 268Z"/>
|
|
12
|
+
</svg>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1040" height="512" viewBox="0 0 1040 512" role="img" aria-labelledby="title description">
|
|
3
|
+
<title id="title">ithrl</title>
|
|
4
|
+
<desc id="description">ithrl spear and lowercase wordmark for dark backgrounds.</desc>
|
|
5
|
+
<metadata>ithrl logo 1.0. Hand-refined spear geometry; Geist Bold outlined wordmark with ss08 i and ss03 l. See source/OFL-Geist.txt for font provenance.</metadata>
|
|
6
|
+
<g id="emblem">
|
|
7
|
+
<path id="context-upper-left" fill="#FFFFFF" d="M136 184H286L225.62 256H75.62Z"/>
|
|
8
|
+
<path id="context-upper-right" fill="#FFFFFF" d="M356.06 214H470L412.94 282H299Z"/>
|
|
9
|
+
<path id="context-lower-left-and-tail" fill="#FFFFFF" d="M119 290H220L240 310L72.23 487L152 362H58.58Z"/>
|
|
10
|
+
<path id="context-lower-right" fill="#FFFFFF" d="M264 312H414L361.98 374H211.98Z"/>
|
|
11
|
+
<path id="spear-tip" fill="#FFFFFF" d="M266.60 227.32L294.18 250.46L456 29.65Z"/>
|
|
12
|
+
<path id="revealed-diamond" fill="#24CDB5" d="M256 237L287 268L256 299L225 268Z"/>
|
|
13
|
+
</g>
|
|
14
|
+
<g id="wordmark" fill="#FFFFFF" aria-hidden="true">
|
|
15
|
+
<path id="letter-i" d="M534 375V228.951H574.872V375ZM554.436 213.965Q545.444 213.965 539.722 208.787Q534 203.61 534 194.619Q534 185.627 539.722 180.313Q545.444 175 554.436 175Q563.7 175 569.422 180.313Q575.144 185.627 575.144 194.619Q575.144 203.61 569.422 208.787Q563.7 213.965 554.436 213.965Z"/>
|
|
16
|
+
<path id="letter-t" d="M657.447 375Q634.831 375 624.204 364.51Q613.578 354.019 613.578 331.131V259.469H590.144V228.951H613.578V194.619H654.45V228.951H692.869V259.469H654.45V326.226Q654.45 336.853 658.946 340.668Q663.441 344.482 672.433 344.482H692.869V375Z"/>
|
|
17
|
+
<path id="letter-h" d="M714.869 375V181.54H755.741V246.935Q761.736 236.035 772.362 230.858Q782.989 225.681 796.068 225.681Q820.591 225.681 832.989 241.213Q845.387 256.744 845.387 280.995V375H804.515V290.804Q804.515 274.455 799.338 266.281Q794.161 258.106 782.444 258.106Q769.91 258.106 762.826 266.689Q755.741 275.272 755.741 291.894V375Z"/>
|
|
18
|
+
<path id="letter-r" d="M861.387 375V228.951H900.079L901.169 258.106Q905.529 242.847 913.975 235.899Q922.422 228.951 935.774 228.951H949.125V262.738H935.774Q918.608 262.738 910.433 269.687Q902.259 276.635 902.259 292.984V375Z"/>
|
|
19
|
+
<path id="letter-l" d="M965.125 375V181.54H1005.997V375Z"/>
|
|
20
|
+
</g>
|
|
21
|
+
</svg>
|