Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.1.0.dev12] - 2026-09-10

### Changed

- The demo now ends with a copyable read-only readiness check for its generated
source, CLI help and demo output link directly to support, and Markdown report
validation leads with a plain-language result before the evidence table.
- The one-off `uvx` demo no longer prints follow-up commands that disappear
with its temporary environment. It directs users to the persistent-install
quick start and support, while Markdown report validation leads with a
plain-language result before the evidence table.
- Community intake now has six distinct routes instead of eight: workflow
feedback shares the Show and tell path, benchmark proposals use the general
improvement path, and Q&A, results, and pull requests ask fewer but more
Expand Down
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ published release without installing anything into your project or system
Python:

```sh
uvx --from https://github.com/fly1d/repomin/releases/download/v0.1.0.dev11/repomin-0.1.0.dev11-py3-none-any.whl \
uvx --from https://github.com/fly1d/repomin/releases/download/v0.1.0.dev12/repomin-0.1.0.dev12-py3-none-any.whl \
repomin demo ./repomin-demo
```

Expand All @@ -33,16 +33,16 @@ ReproMin demo completed.
Reduced: 3 files / 855 bytes -> 2 files / 276 bytes in 14 attempts.
Removed: unused.txt and two unrelated input lines.
Validated: exact payload fingerprint.
Next: run `repomin doctor --help` before trying your own repository.
Next: install ReproMin persistently, then check your repository with `repomin doctor SOURCE`.
```

Have a public, licensed repository with a repeatable failure? [Offer it for a
bounded pilot](https://github.com/fly1d/repomin/issues/11) with the revision,
exact reproduction command, target exit code or failure signature, and the
help you want. No ReproMin installation is required.

The demo leaves the reduced payload and evidence report available for
inspection and prints a copyable validation command. Continue with the
The demo validates the reduced payload and leaves it with an evidence report
for inspection. Continue with the
[five-minute quick start](https://github.com/fly1d/repomin/blob/main/docs/QUICKSTART.md),
the [PowerShell guide](https://github.com/fly1d/repomin/blob/main/docs/QUICKSTART.windows.md),
or the [Chinese guide](https://github.com/fly1d/repomin/blob/main/docs/QUICKSTART.zh-CN.md).
Expand Down Expand Up @@ -92,7 +92,7 @@ exported evidence:

```sh
python -m pip install \
"https://github.com/fly1d/repomin/releases/download/v0.1.0.dev11/repomin-0.1.0.dev11-py3-none-any.whl"
"https://github.com/fly1d/repomin/releases/download/v0.1.0.dev12/repomin-0.1.0.dev12-py3-none-any.whl"

repomin doctor . \
--command 'python -m pytest -q tests/test_checkout.py' \
Expand Down Expand Up @@ -129,7 +129,7 @@ can reduce a repeatable CI failure and
upload the payload and validated report as an artifact:

```yaml
- uses: fly1d/repomin@v0.1.0.dev11
- uses: fly1d/repomin@v0.1.0.dev12
with:
command: python -m pytest -q tests/test_checkout.py
match: FAILED tests/test_checkout.py
Expand Down
12 changes: 6 additions & 6 deletions docs/GITHUB_ACTION.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ job's failure-handling step:
```yaml
- name: Minimize failure
if: ${{ failure() }}
uses: fly1d/repomin@v0.1.0.dev11
uses: fly1d/repomin@v0.1.0.dev12
with:
command: python -m pytest -q
match: "FAILED tests/test_regression.py"
Expand Down Expand Up @@ -185,7 +185,7 @@ result through `holdout-status`:
```yaml
- name: Certify minimized failure
if: ${{ failure() }}
uses: fly1d/repomin@v0.1.0.dev11
uses: fly1d/repomin@v0.1.0.dev12
with:
command: python -m pytest -q
match: "FAILED tests/test_regression.py"
Expand All @@ -199,7 +199,7 @@ For a command with a stable exit code but unstable output:
```yaml
- name: Minimize failure
if: ${{ failure() }}
uses: fly1d/repomin@v0.1.0.dev11
uses: fly1d/repomin@v0.1.0.dev12
with:
command: python -m pytest -q
exit-code: "1"
Expand All @@ -211,7 +211,7 @@ For a Python failure where the match text may also appear in unrelated output:
```yaml
- name: Minimize Python exception
if: ${{ failure() }}
uses: fly1d/repomin@v0.1.0.dev11
uses: fly1d/repomin@v0.1.0.dev12
with:
command: python -m pytest -q tests/test_checkout.py
match: "ValueError"
Expand All @@ -226,7 +226,7 @@ existing local image:
```yaml
- name: Minimize Docker failure
if: ${{ failure() }}
uses: fly1d/repomin@v0.1.0.dev11
uses: fly1d/repomin@v0.1.0.dev12
with:
command: python3 reproduce.py
match: "ORIGINAL_FAILURE"
Expand All @@ -253,7 +253,7 @@ environment names or values.
- name: Minimize failure
if: ${{ failure() }}
id: minimize
uses: fly1d/repomin@v0.1.0.dev11
uses: fly1d/repomin@v0.1.0.dev12
with:
command: python -m pytest -q
match: "FAILED tests/test_regression.py"
Expand Down
8 changes: 4 additions & 4 deletions docs/QUICKSTART.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ available, run the published release without installing it into your project
or system Python:

```sh
uvx --from https://github.com/fly1d/repomin/releases/download/v0.1.0.dev11/repomin-0.1.0.dev11-py3-none-any.whl \
uvx --from https://github.com/fly1d/repomin/releases/download/v0.1.0.dev12/repomin-0.1.0.dev12-py3-none-any.whl \
repomin demo ./repomin-demo
```

Expand All @@ -31,15 +31,15 @@ python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip

REPOMIN_VERSION=0.1.0.dev11
REPOMIN_VERSION=0.1.0.dev12
python -m pip install \
"https://github.com/fly1d/repomin/releases/download/v${REPOMIN_VERSION}/repomin-${REPOMIN_VERSION}-py3-none-any.whl"

repomin --version
```

The final command should print `repomin 0.1.0.dev11`. The
[release page](https://github.com/fly1d/repomin/releases/tag/v0.1.0.dev11)
The final command should print `repomin 0.1.0.dev12`. The
[release page](https://github.com/fly1d/repomin/releases/tag/v0.1.0.dev12)
publishes SHA-256 digests for users who need to verify the downloaded wheel.

For the shortest tour, run `repomin demo ./repomin-demo`. It creates a new
Expand Down
6 changes: 3 additions & 3 deletions docs/QUICKSTART.windows.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,13 @@ $env:PATH = (Split-Path -Parent $Python) + `
[System.IO.Path]::PathSeparator + $env:PATH

& $Python -m pip install --upgrade pip
$env:REPOMIN_VERSION = "0.1.0.dev11"
$env:REPOMIN_VERSION = "0.1.0.dev12"
& $Python -m pip install "https://github.com/fly1d/repomin/releases/download/v${env:REPOMIN_VERSION}/repomin-${env:REPOMIN_VERSION}-py3-none-any.whl"
& $Python -m repomin --version
```

The final command should print `repomin 0.1.0.dev11`. The
[release page](https://github.com/fly1d/repomin/releases/tag/v0.1.0.dev11)
The final command should print `repomin 0.1.0.dev12`. The
[release page](https://github.com/fly1d/repomin/releases/tag/v0.1.0.dev12)
publishes SHA-256 digests for users who need to verify the downloaded wheel.

For the shortest tour, run `repomin demo .\repomin-demo`. It creates a new
Expand Down
10 changes: 5 additions & 5 deletions docs/QUICKSTART.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ ReproMin 会在每次候选修改后重新执行失败命令,只保留仍能
如果已经安装了 [`uv`](https://docs.astral.sh/uv/getting-started/installation/),可以用一条命令体验发布版本,无需把 ReproMin 安装到项目或系统 Python:

```sh
uvx --from https://github.com/fly1d/repomin/releases/download/v0.1.0.dev11/repomin-0.1.0.dev11-py3-none-any.whl \
uvx --from https://github.com/fly1d/repomin/releases/download/v0.1.0.dev12/repomin-0.1.0.dev12-py3-none-any.whl \
repomin demo ./repomin-demo
```

Expand All @@ -20,19 +20,19 @@ PyPI。建议先使用虚拟环境,避免修改系统 Python:
python3 -m venv .venv
. .venv/bin/activate
python -m pip install --upgrade pip
REPOMIN_VERSION=0.1.0.dev11
REPOMIN_VERSION=0.1.0.dev12
python -m pip install \
"https://github.com/fly1d/repomin/releases/download/v${REPOMIN_VERSION}/repomin-${REPOMIN_VERSION}-py3-none-any.whl"
python -m repomin --version
```

当前版本应显示 `repomin 0.1.0.dev11`。发布页同时提供 wheel 和源码归档,以及对应的
当前版本应显示 `repomin 0.1.0.dev12`。发布页同时提供 wheel 和源码归档,以及对应的
SHA-256 校验值;需要供应链校验时,请先核对
[发布页](https://github.com/fly1d/repomin/releases/tag/v0.1.0.dev11)再安装。wheel 不需要
[发布页](https://github.com/fly1d/repomin/releases/tag/v0.1.0.dev12)再安装。wheel 不需要
本地构建,首次使用更快。

本页后面的 `report replay`、传输 fingerprint 和 Markdown 摘要功能已包含在
`v0.1.0.dev11` 发布包中。
`v0.1.0.dev12` 发布包中。
参与 pilot 前仍请阅读[真实失败 pilot 指南](REAL_FAILURE_PILOT.md),并按其中的隐私和
安全边界检查报告与 payload。

Expand Down
4 changes: 2 additions & 2 deletions docs/REAL_FAILURE_PILOT.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,13 @@ project until a human has reviewed the artifact and that project's policies.
## Install the pilot build

The replay and transport-fingerprint workflow described below is included in
the `v0.1.0.dev11` pre-release. Install that wheel in an isolated environment
the `v0.1.0.dev12` pre-release. Install that wheel in an isolated environment
when you want a reproducible versioned pilot run:

```sh
python3 -m venv .venv
. .venv/bin/activate
REPOMIN_VERSION=0.1.0.dev11
REPOMIN_VERSION=0.1.0.dev12
python -m pip install \
"https://github.com/fly1d/repomin/releases/download/v${REPOMIN_VERSION}/repomin-${REPOMIN_VERSION}-py3-none-any.whl"
python -m repomin --version
Expand Down
2 changes: 1 addition & 1 deletion docs/REPLAY.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ found.
The command stored in a report is executable input. Review the report and the
payload before acknowledging execution with `--yes`.

This command is included in the `v0.1.0.dev11` pre-release. For a pilot report,
This command is included in the `v0.1.0.dev12` pre-release. For a pilot report,
record the installed version and (when installing from source) the Git SHA as
described in the [pilot guide](REAL_FAILURE_PILOT.md).

Expand Down
2 changes: 1 addition & 1 deletion src/repomin/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
"""Repository-level failure reducer."""

__version__ = "0.1.0.dev11"
__version__ = "0.1.0.dev12"
8 changes: 4 additions & 4 deletions src/repomin/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@
HOST_WORKING_DIRECTORY_POLICY = "host-output-basename-v1"
DOCKER_WORKING_DIRECTORY_POLICY = "docker-workspace-v1"
_SUPPORT_URL = "https://github.com/fly1d/repomin/blob/main/SUPPORT.md"
_QUICKSTART_URL = "https://github.com/fly1d/repomin/blob/main/docs/QUICKSTART.md"
_BYTE_SIZE = re.compile(r"^(?P<number>[1-9][0-9]*)(?P<suffix>[kmgt]i?b?|b)?$")
_BYTE_MULTIPLIERS = {
"": 1,
Expand Down Expand Up @@ -925,12 +926,11 @@ def _demo_command(argv: Sequence[str]) -> int:
print("Workspace: %s" % workspace)
print("Payload: %s" % payload)
print("Report: %s" % report_path)
print("Repeat validation:")
print(" %s" % _validation_command(report_path, payload))
print(
"Next: run `repomin doctor %s` for a read-only readiness check."
% _quote_cli_argument(source)
"Next: install ReproMin persistently, then check your repository "
"with `repomin doctor SOURCE`."
)
print("Quick start: %s" % _QUICKSTART_URL)
print("Help or feedback: %s" % _SUPPORT_URL)
return 0
except KeyboardInterrupt:
Expand Down
12 changes: 6 additions & 6 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
_parse_ignore_path,
_load_gitignore,
_parse_rate,
_quote_cli_argument,
_run_fixed_point,
_working_directory_configuration,
build_parser,
Expand Down Expand Up @@ -446,14 +445,15 @@ def test_demo_runs_real_reducer_and_validates_payload(self) -> None:
self.assertIn("Removed: unused.txt", stdout.getvalue())
self.assertIn("Validated: exact payload fingerprint.", stdout.getvalue())
self.assertIn("only NEEDLE remains", stdout.getvalue())
self.assertIn("Repeat validation:", stdout.getvalue())
self.assertIn("--format markdown", stdout.getvalue())
self.assertNotIn("Repeat validation:", stdout.getvalue())
self.assertNotIn("repomin report validate", stdout.getvalue())
self.assertIn("install ReproMin persistently", stdout.getvalue())
self.assertIn("repomin doctor SOURCE", stdout.getvalue())
self.assertIn(
"repomin doctor %s"
% _quote_cli_argument((workspace / "source").resolve()),
"Quick start: "
"https://github.com/fly1d/repomin/blob/main/docs/QUICKSTART.md",
stdout.getvalue(),
)
self.assertIn("for a read-only readiness check", stdout.getvalue())
self.assertIn(
"Help or feedback: "
"https://github.com/fly1d/repomin/blob/main/SUPPORT.md",
Expand Down