revrem 0.3.2__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.
Files changed (57) hide show
  1. revrem-0.3.2/LICENSE +201 -0
  2. revrem-0.3.2/NOTICE +10 -0
  3. revrem-0.3.2/PKG-INFO +309 -0
  4. revrem-0.3.2/README.md +263 -0
  5. revrem-0.3.2/pyproject.toml +86 -0
  6. revrem-0.3.2/setup.cfg +4 -0
  7. revrem-0.3.2/src/code_review_loop/__init__.py +5 -0
  8. revrem-0.3.2/src/code_review_loop/__main__.py +6 -0
  9. revrem-0.3.2/src/code_review_loop/_compat_jsonschema.py +113 -0
  10. revrem-0.3.2/src/code_review_loop/_compat_tomli_w.py +97 -0
  11. revrem-0.3.2/src/code_review_loop/artifacts.py +87 -0
  12. revrem-0.3.2/src/code_review_loop/budgets.py +129 -0
  13. revrem-0.3.2/src/code_review_loop/bug_bundle.py +205 -0
  14. revrem-0.3.2/src/code_review_loop/cli.py +4170 -0
  15. revrem-0.3.2/src/code_review_loop/diagnostics.py +387 -0
  16. revrem-0.3.2/src/code_review_loop/events.py +362 -0
  17. revrem-0.3.2/src/code_review_loop/fingerprints.py +61 -0
  18. revrem-0.3.2/src/code_review_loop/harnesses.py +318 -0
  19. revrem-0.3.2/src/code_review_loop/profiles.py +1093 -0
  20. revrem-0.3.2/src/code_review_loop/progress.py +156 -0
  21. revrem-0.3.2/src/code_review_loop/prompts/triage_v1.txt +35 -0
  22. revrem-0.3.2/src/code_review_loop/redaction.py +147 -0
  23. revrem-0.3.2/src/code_review_loop/run_history.py +85 -0
  24. revrem-0.3.2/src/code_review_loop/schemas/triage-v1.schema.json +266 -0
  25. revrem-0.3.2/src/code_review_loop/suppressions.py +392 -0
  26. revrem-0.3.2/src/code_review_loop/triage.py +93 -0
  27. revrem-0.3.2/src/code_review_loop/tui.py +316 -0
  28. revrem-0.3.2/src/code_review_loop/tui_state.py +537 -0
  29. revrem-0.3.2/src/revrem.egg-info/PKG-INFO +309 -0
  30. revrem-0.3.2/src/revrem.egg-info/SOURCES.txt +55 -0
  31. revrem-0.3.2/src/revrem.egg-info/dependency_links.txt +1 -0
  32. revrem-0.3.2/src/revrem.egg-info/entry_points.txt +3 -0
  33. revrem-0.3.2/src/revrem.egg-info/requires.txt +24 -0
  34. revrem-0.3.2/src/revrem.egg-info/top_level.txt +1 -0
  35. revrem-0.3.2/tests/test_artifact_schema.py +133 -0
  36. revrem-0.3.2/tests/test_artifacts.py +81 -0
  37. revrem-0.3.2/tests/test_budgets.py +60 -0
  38. revrem-0.3.2/tests/test_bug_bundle.py +219 -0
  39. revrem-0.3.2/tests/test_cli.py +5933 -0
  40. revrem-0.3.2/tests/test_devex_doc.py +32 -0
  41. revrem-0.3.2/tests/test_diagnostics.py +318 -0
  42. revrem-0.3.2/tests/test_events.py +180 -0
  43. revrem-0.3.2/tests/test_fingerprints.py +68 -0
  44. revrem-0.3.2/tests/test_fixtures.py +28 -0
  45. revrem-0.3.2/tests/test_harnesses.py +205 -0
  46. revrem-0.3.2/tests/test_local_compat.py +55 -0
  47. revrem-0.3.2/tests/test_packaging.py +578 -0
  48. revrem-0.3.2/tests/test_profiles.py +950 -0
  49. revrem-0.3.2/tests/test_progress.py +134 -0
  50. revrem-0.3.2/tests/test_redaction.py +89 -0
  51. revrem-0.3.2/tests/test_replay.py +47 -0
  52. revrem-0.3.2/tests/test_resume.py +160 -0
  53. revrem-0.3.2/tests/test_run_history.py +81 -0
  54. revrem-0.3.2/tests/test_suppressions.py +250 -0
  55. revrem-0.3.2/tests/test_triage.py +123 -0
  56. revrem-0.3.2/tests/test_tui.py +343 -0
  57. revrem-0.3.2/tests/test_tui_state.py +509 -0
revrem-0.3.2/LICENSE ADDED
@@ -0,0 +1,201 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ https://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including the
49
+ original version of the Work and any modifications or additions to
50
+ that Work or Derivative Works thereof, that is intentionally submitted
51
+ to Licensor for inclusion in the Work by the copyright owner or by an
52
+ individual or Legal Entity authorized to submit on behalf of the
53
+ copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. Do not include
183
+ the brackets. The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ https://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
revrem-0.3.2/NOTICE ADDED
@@ -0,0 +1,10 @@
1
+ code-review-loop
2
+ Copyright 2026 Colin Farmer
3
+
4
+ This product includes software developed by Colin Farmer.
5
+
6
+ Third-party notices:
7
+
8
+ No third-party NOTICE obligations have been identified for the current runtime
9
+ dependency set. Optional development dependencies must be rechecked before
10
+ publishing packaged artifacts or adding generated assets.
revrem-0.3.2/PKG-INFO ADDED
@@ -0,0 +1,309 @@
1
+ Metadata-Version: 2.4
2
+ Name: revrem
3
+ Version: 0.3.2
4
+ Summary: Bounded AI review, remediation, and re-review automation for local repositories.
5
+ Author: Colin Farmer
6
+ License-Expression: Apache-2.0
7
+ Project-URL: Homepage, https://github.com/GitCmurf/revrem
8
+ Project-URL: Source, https://github.com/GitCmurf/revrem
9
+ Project-URL: Issues, https://github.com/GitCmurf/revrem/issues
10
+ Project-URL: Changelog, https://github.com/GitCmurf/revrem/blob/main/CHANGELOG.md
11
+ Keywords: ai,code-review,automation,devex,cli,remediation
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Operating System :: POSIX :: Linux
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3 :: Only
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Topic :: Software Development :: Quality Assurance
21
+ Requires-Python: >=3.11
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+ License-File: NOTICE
25
+ Requires-Dist: jsonschema>=4.22
26
+ Requires-Dist: tomli-w>=1.0
27
+ Provides-Extra: dev
28
+ Requires-Dist: build>=1.2; extra == "dev"
29
+ Requires-Dist: detect-secrets>=1.5; extra == "dev"
30
+ Requires-Dist: mypy>=1.8; extra == "dev"
31
+ Requires-Dist: pip-licenses>=5; extra == "dev"
32
+ Requires-Dist: pre-commit>=4; extra == "dev"
33
+ Requires-Dist: pytest>=8; extra == "dev"
34
+ Requires-Dist: rich>=13.7; extra == "dev"
35
+ Requires-Dist: ruff>=0.5; extra == "dev"
36
+ Requires-Dist: textual>=0.80; extra == "dev"
37
+ Requires-Dist: twine>=6; extra == "dev"
38
+ Provides-Extra: progress
39
+ Requires-Dist: rich>=13.7; extra == "progress"
40
+ Provides-Extra: redaction
41
+ Requires-Dist: detect-secrets>=1.5; extra == "redaction"
42
+ Provides-Extra: tui
43
+ Requires-Dist: rich>=13.7; extra == "tui"
44
+ Requires-Dist: textual>=0.80; extra == "tui"
45
+ Dynamic: license-file
46
+
47
+ # revrem
48
+
49
+ [![CI](https://github.com/GitCmurf/revrem/actions/workflows/ci.yml/badge.svg)](https://github.com/GitCmurf/revrem/actions/workflows/ci.yml)
50
+ [![Release](https://img.shields.io/github/v/release/GitCmurf/revrem)](https://github.com/GitCmurf/revrem/releases)
51
+ [![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
52
+ [![Python: 3.11 | 3.12](https://img.shields.io/badge/python-3.11%20%7C%203.12-3776ab.svg)](pyproject.toml)
53
+
54
+ RevRem runs an automated review -> fix -> verify loop on your local branch before you open a pull request.
55
+
56
+ It asks Codex to review a branch against a base, applies valid actionable
57
+ findings through a bounded remediation pass, reruns your verification commands,
58
+ and leaves an artifact trail you can inspect before committing or merging.
59
+
60
+ The repository and Python package use the public name `revrem`. The legacy
61
+ `code-review-loop` command remains available as a compatibility alias for
62
+ existing local scripts.
63
+
64
+ ## Demo
65
+
66
+ ```text
67
+ $ revrem --base main --max-iterations 2 --check "pytest -q"
68
+ 12:08:23|rev|1 |start: codex review --base main
69
+ 12:10:14|rev|1 |[P1] Preserve failure artifacts when review startup fails
70
+ 12:10:15|rem|1 |start: codex exec --full-auto --sandbox workspace-write ...
71
+ 12:13:41|rem|1 |done
72
+ 12:13:42|chk|1.1 |start: pytest -q
73
+ 12:14:18|chk|1.1 |passed
74
+ 12:14:19|rev|2 |clear
75
+
76
+ Review-remediation loop: clear (review_clear)
77
+ Artifacts: .revrem/runs/20260509T120823Z
78
+ JSON summary: .revrem/runs/20260509T120823Z/summary.json
79
+ ```
80
+
81
+ ## Install
82
+
83
+ RevRem is not published on PyPI yet. Install it from a checkout:
84
+
85
+ ```bash
86
+ git clone https://github.com/GitCmurf/revrem.git
87
+ cd revrem
88
+ ./scripts/install-dev
89
+ ./.venv/bin/revrem --version
90
+ ```
91
+
92
+ For a stable `revrem` command that is available from other local repositories:
93
+
94
+ ```bash
95
+ ./scripts/promote-stable
96
+ revrem --version
97
+ ```
98
+
99
+ `./scripts/promote-stable` runs the local verification gate, copies the current
100
+ source snapshot under `~/.local/share/revrem/releases/`, builds an isolated
101
+ stable virtualenv under `~/.local/share/revrem/`, and updates these launchers:
102
+
103
+ ```text
104
+ ~/.local/bin/revrem
105
+ ~/.local/bin/code-review-loop
106
+ ```
107
+
108
+ Use `./.venv/bin/revrem` while developing this repository. Use the promoted
109
+ `revrem` command when reviewing other repositories.
110
+
111
+ ## Quick Start
112
+
113
+ From the repository you want to review:
114
+
115
+ ```bash
116
+ revrem --base main --max-iterations 2 --check "pytest -q"
117
+ ```
118
+
119
+ Add checks that match the target repository:
120
+
121
+ ```bash
122
+ revrem \
123
+ --base main \
124
+ --max-iterations 2 \
125
+ --check "pytest -q" \
126
+ --check "git diff --check"
127
+ ```
128
+
129
+ Expected behavior:
130
+
131
+ - exit `0` when the final loop status is clear;
132
+ - exit `2` when findings or check failures remain after the bounded loop;
133
+ - write artifacts to `.revrem/runs/<timestamp>/`;
134
+ - append run metadata to `~/.local/share/revrem/runs.jsonl` unless
135
+ `--no-run-history` is used.
136
+
137
+ Use repository-native checks. Python repositories can use `pytest`; TypeScript
138
+ repositories should usually use commands such as `pnpm test`,
139
+ `pnpm run typecheck`, and `pnpm run lint`.
140
+
141
+ Machine-readable artifact contracts are documented under
142
+ [`docs/52-api/`](docs/52-api/).
143
+
144
+ Before a live model-backed loop, run local setup diagnostics:
145
+
146
+ ```bash
147
+ revrem doctor --base main --check "pytest -q"
148
+ ```
149
+
150
+ `revrem doctor` validates the local Git base, writable artifact path, Codex
151
+ executable, and configured check executables without invoking a model. Relative
152
+ `--artifact-dir` values are resolved against the doctor `cwd`, not the process
153
+ working directory. It warns when profile timeouts explicitly disable a phase
154
+ timeout and when the current locale is not UTF-8 capable. Use `--format json`
155
+ for automation.
156
+
157
+ To share a failed run safely, create a redacted bundle:
158
+
159
+ ```bash
160
+ revrem bundle-bug-report .revrem/runs/<run-id> --output revrem-bug.tar.gz
161
+ ```
162
+
163
+ If `--output` is omitted, RevRem writes `revrem-bug-<safe-run-id>.tar.gz` in
164
+ the current working directory, using a basename-derived component from the run
165
+ metadata and falling back to the run directory name when needed.
166
+
167
+ The bundle command ignores symlinked artifacts so the archive cannot follow
168
+ links out of the run directory. It includes `summary.json`, diagnostics/event
169
+ JSON, status diagnostics, check output, and sanitized profile/preflight snapshots
170
+ when those files are present in the run directory.
171
+
172
+ Raw review/remediation transcripts are excluded by default. Use
173
+ `--include-raw-transcripts` only when the extra context is necessary; contents
174
+ are still redacted unless `--no-redact --i-understand-the-risks` is explicitly
175
+ passed.
176
+
177
+ ## How It Works
178
+
179
+ RevRem is intentionally local, watched, and bounded:
180
+
181
+ 1. Runs `codex review` against a chosen base branch.
182
+ 2. Detects whether the review is clear or has findings.
183
+ 3. Runs a bounded Codex remediation pass for valid actionable findings.
184
+ 4. Runs your configured verification commands.
185
+ 5. Repeats until the review is clear or `--max-iterations` is reached.
186
+ 6. Writes review, remediation, check, and summary artifacts for inspection.
187
+
188
+ Optional features include finding triage, JSON summaries, automatic remediation
189
+ commits after passing checks, Rich progress rendering, and a dependency-gated
190
+ Textual TUI.
191
+
192
+ When triage output is structured JSON, RevRem validates it against
193
+ `triage-v1.schema.json`, writes `triage-N.json`, and forwards the structured
194
+ handoff plus the original review context to remediation. Invalid structured
195
+ triage writes `diagnostics-N.json` and fails safe by continuing with the original
196
+ review context. The bug-report bundle includes both `diagnostics.json` and
197
+ numbered `diagnostics-N.json` artifacts so triage failures stay diagnosable.
198
+ Structured triage also supports explicit suppressions via `revrem suppress`:
199
+ matching confirmed findings are moved to
200
+ `suppressed_findings`, remain visible in `triage-N.json`, and do not trigger
201
+ remediation when no unsuppressed findings remain.
202
+
203
+ ## Profiles
204
+
205
+ Profiles keep long commands repeatable:
206
+
207
+ ```bash
208
+ revrem config new final-pr --description "Full PR readiness check"
209
+ revrem config edit final-pr
210
+ revrem config show final-pr
211
+ revrem --profile final-pr
212
+ ```
213
+
214
+ Project-local profiles can be saved without running the loop:
215
+
216
+ ```bash
217
+ revrem --base main --max-iterations 2 --check "git diff --check" --save-profile final-pr
218
+ ```
219
+
220
+ `--save-profile` writes `.revrem.toml` at the repository root and refuses to
221
+ overwrite an existing project profile unless `--save-profile-force` is
222
+ supplied.
223
+
224
+ ## Safety Model
225
+
226
+ RevRem is a pre-merge confidence tool, not a substitute for review or tests.
227
+ Its safety posture is built around local operator control:
228
+
229
+ - iteration count is bounded by default;
230
+ - generated run artifacts are kept out of normal commits;
231
+ - auto-commit requires a clean worktree before the loop starts;
232
+ - remediation commits are made only after configured checks pass;
233
+ - machine-readable output is opt-in with `--summary-format json` or
234
+ `--summary-format both`;
235
+ - local run history can be disabled with `--no-run-history`;
236
+ - no hosted service or telemetry is part of RevRem itself.
237
+
238
+ Use `--commit-after-remediation` only when each verified remediation pass should
239
+ become a git commit. RevRem stages with `git add -A` after checks pass, excludes
240
+ the configured artifact directory, skips empty commits, and runs `git commit`
241
+ itself. If commit hooks fail, the default policy is to preserve the staged
242
+ changes, write the hook output to the commit artifact, and feed that output into
243
+ the next bounded remediation pass. Use `--commit-on-hook-failure stop` to fail
244
+ gracefully instead, or `--commit-on-hook-failure no-verify` only when bypassing
245
+ hooks is an intentional operator decision.
246
+
247
+ ## Optional Progress And TUI
248
+
249
+ For richer watched-terminal output:
250
+
251
+ ```bash
252
+ ./.venv/bin/pip install -e ".[progress]"
253
+ revrem --profile final-pr --progress-style rich
254
+ ```
255
+
256
+ The optional TUI is dependency-gated so the default CLI remains lightweight:
257
+
258
+ ```bash
259
+ ./.venv/bin/pip install -e ".[tui]"
260
+ ./.venv/bin/revrem ui
261
+ ./.venv/bin/revrem ui --profile final-pr
262
+ ```
263
+
264
+ The TUI renders Home, Profiles, Pipeline, Run Monitor, and Controls views. It
265
+ shells through the same CLI command plans as normal terminal usage.
266
+
267
+ ## Limitations
268
+
269
+ - Codex must be installed and authenticated locally.
270
+ - The current directory must be the repository under review.
271
+ - The selected `--base` branch must share history with the current branch.
272
+ - Review/remediation quality depends on the model and the checks you provide.
273
+ - Human review, security review, and release approval still matter.
274
+ - Avoid dirty worktrees unless the local edits are intentional and understood.
275
+ - Do not use unbounded iteration counts for unattended automation.
276
+ - Do not paste raw model transcripts or local run artifacts into public issues;
277
+ use the redacted bug-report workflow instead.
278
+
279
+ ## Development
280
+
281
+ ```bash
282
+ ./scripts/install-dev
283
+ pre-commit install
284
+ ./scripts/dev-check
285
+ pre-commit run --all-files
286
+ ```
287
+
288
+ The development extra installs `ruff`, `mypy`, `pytest`, Rich, Textual, build
289
+ tooling, `pre-commit`, `detect-secrets`, and license-review helpers. Ruff,
290
+ mypy, pytest, DocOps checks, and `git diff --check` are required local and CI
291
+ gates.
292
+
293
+ Optional runtime extras stay narrow: `.[progress]` installs Rich, `.[tui]`
294
+ installs Textual and Rich, and `.[redaction]` installs optional
295
+ `detect-secrets` support for workflows that want an additional scanner alongside
296
+ RevRem's built-in redaction regexes.
297
+
298
+ The repository also carries tiny local compatibility shims for `tomli_w` and
299
+ `jsonschema` so the test suite can collect in minimal environments. The
300
+ published dependency declarations remain the supported install path.
301
+
302
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution expectations, governed
303
+ documentation, and release process details.
304
+
305
+ ## License
306
+
307
+ This project is licensed under the Apache License 2.0; see [LICENSE](LICENSE)
308
+ for details. [NOTICE](NOTICE) contains project attribution and must be preserved
309
+ where Apache-2.0 notice requirements apply.