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.
- revrem-0.3.2/LICENSE +201 -0
- revrem-0.3.2/NOTICE +10 -0
- revrem-0.3.2/PKG-INFO +309 -0
- revrem-0.3.2/README.md +263 -0
- revrem-0.3.2/pyproject.toml +86 -0
- revrem-0.3.2/setup.cfg +4 -0
- revrem-0.3.2/src/code_review_loop/__init__.py +5 -0
- revrem-0.3.2/src/code_review_loop/__main__.py +6 -0
- revrem-0.3.2/src/code_review_loop/_compat_jsonschema.py +113 -0
- revrem-0.3.2/src/code_review_loop/_compat_tomli_w.py +97 -0
- revrem-0.3.2/src/code_review_loop/artifacts.py +87 -0
- revrem-0.3.2/src/code_review_loop/budgets.py +129 -0
- revrem-0.3.2/src/code_review_loop/bug_bundle.py +205 -0
- revrem-0.3.2/src/code_review_loop/cli.py +4170 -0
- revrem-0.3.2/src/code_review_loop/diagnostics.py +387 -0
- revrem-0.3.2/src/code_review_loop/events.py +362 -0
- revrem-0.3.2/src/code_review_loop/fingerprints.py +61 -0
- revrem-0.3.2/src/code_review_loop/harnesses.py +318 -0
- revrem-0.3.2/src/code_review_loop/profiles.py +1093 -0
- revrem-0.3.2/src/code_review_loop/progress.py +156 -0
- revrem-0.3.2/src/code_review_loop/prompts/triage_v1.txt +35 -0
- revrem-0.3.2/src/code_review_loop/redaction.py +147 -0
- revrem-0.3.2/src/code_review_loop/run_history.py +85 -0
- revrem-0.3.2/src/code_review_loop/schemas/triage-v1.schema.json +266 -0
- revrem-0.3.2/src/code_review_loop/suppressions.py +392 -0
- revrem-0.3.2/src/code_review_loop/triage.py +93 -0
- revrem-0.3.2/src/code_review_loop/tui.py +316 -0
- revrem-0.3.2/src/code_review_loop/tui_state.py +537 -0
- revrem-0.3.2/src/revrem.egg-info/PKG-INFO +309 -0
- revrem-0.3.2/src/revrem.egg-info/SOURCES.txt +55 -0
- revrem-0.3.2/src/revrem.egg-info/dependency_links.txt +1 -0
- revrem-0.3.2/src/revrem.egg-info/entry_points.txt +3 -0
- revrem-0.3.2/src/revrem.egg-info/requires.txt +24 -0
- revrem-0.3.2/src/revrem.egg-info/top_level.txt +1 -0
- revrem-0.3.2/tests/test_artifact_schema.py +133 -0
- revrem-0.3.2/tests/test_artifacts.py +81 -0
- revrem-0.3.2/tests/test_budgets.py +60 -0
- revrem-0.3.2/tests/test_bug_bundle.py +219 -0
- revrem-0.3.2/tests/test_cli.py +5933 -0
- revrem-0.3.2/tests/test_devex_doc.py +32 -0
- revrem-0.3.2/tests/test_diagnostics.py +318 -0
- revrem-0.3.2/tests/test_events.py +180 -0
- revrem-0.3.2/tests/test_fingerprints.py +68 -0
- revrem-0.3.2/tests/test_fixtures.py +28 -0
- revrem-0.3.2/tests/test_harnesses.py +205 -0
- revrem-0.3.2/tests/test_local_compat.py +55 -0
- revrem-0.3.2/tests/test_packaging.py +578 -0
- revrem-0.3.2/tests/test_profiles.py +950 -0
- revrem-0.3.2/tests/test_progress.py +134 -0
- revrem-0.3.2/tests/test_redaction.py +89 -0
- revrem-0.3.2/tests/test_replay.py +47 -0
- revrem-0.3.2/tests/test_resume.py +160 -0
- revrem-0.3.2/tests/test_run_history.py +81 -0
- revrem-0.3.2/tests/test_suppressions.py +250 -0
- revrem-0.3.2/tests/test_triage.py +123 -0
- revrem-0.3.2/tests/test_tui.py +343 -0
- 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
|
+
[](https://github.com/GitCmurf/revrem/actions/workflows/ci.yml)
|
|
50
|
+
[](https://github.com/GitCmurf/revrem/releases)
|
|
51
|
+
[](LICENSE)
|
|
52
|
+
[](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.
|