Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
419aaf3
chore(security): clear npm audit moderate vulns where possible
omsherikar May 14, 2026
1e9bdc8
docs(security): add SECURITY.md with disclosure policy and threat model
omsherikar May 14, 2026
1e01c94
docs(site): add safety-model page with 3-gate diagram
omsherikar May 14, 2026
a8c8667
docs(site): add transform catalog (10 pages + index)
omsherikar May 14, 2026
94a65cf
docs(site): add CLI reference, configuration, FAQ, why-no-llm pages +…
omsherikar May 14, 2026
63117f4
docs(readme): drop alpha disclaimers, restructure for v0.2.0 launch
omsherikar May 14, 2026
91ead84
chore(demo): add vhs tape script for the README demo GIF
omsherikar May 14, 2026
20da6ce
docs(launch): defer demo GIF generation to user (requires vhs install)
omsherikar May 14, 2026
8e92f49
chore(pkg): add author and publishConfig metadata for npm publish
omsherikar May 14, 2026
8d4c63b
chore(release): bump to 0.2.0 + CHANGELOG entry
omsherikar May 14, 2026
4b7b40e
chore(pkg): include SECURITY.md in published tarball
omsherikar May 14, 2026
2bfb18d
feat(refactron-py): add Python wrapper for npm CLI (v0.2.0)
omsherikar May 14, 2026
39f458d
chore(refactron-py): ignore build artifacts
omsherikar May 14, 2026
f84fd66
docs(launch): pre-bake Show HN response templates
omsherikar May 14, 2026
61f96d4
docs(decisions): add ADR-010 for Week 8 launch decisions + ship check…
omsherikar May 14, 2026
874429b
fix(pkg): move typescript to dependencies — verify checks import it a…
omsherikar May 14, 2026
025a924
docs: point everything at the canonical docs URL — docs.refactron.dev
omsherikar May 14, 2026
b518999
ci(release): publish PyPI wrapper alongside npm via Trusted Publishing
omsherikar May 14, 2026
ed5e4d7
docs(readme): add 30-second demo GIF
omsherikar May 14, 2026
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
30 changes: 29 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,15 @@ jobs:
run: |
TAG=${GITHUB_REF#refs/tags/v}
PKG=$(node -p "require('./package.json').version")
PY=$(grep -m1 '^version' refactron-py/pyproject.toml | sed -E 's/version\s*=\s*"([^"]+)"/\1/')
if [ "$TAG" != "$PKG" ]; then
echo "Tag $TAG does not match package.json version $PKG"
exit 1
fi
if [ "$TAG" != "$PY" ]; then
echo "Tag $TAG does not match refactron-py/pyproject.toml version $PY"
exit 1
fi
echo "version=$TAG" >> $GITHUB_OUTPUT

test-before-release:
Expand Down Expand Up @@ -65,9 +70,32 @@ jobs:
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

publish-pypi:
name: Publish to PyPI
needs: test-before-release
runs-on: ubuntu-latest
environment:
name: pypi-production
url: https://pypi.org/p/refactron
permissions:
id-token: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Build wrapper
working-directory: refactron-py
run: |
python -m pip install --upgrade build
python -m build
- uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: refactron-py/dist

github-release:
name: Create GitHub Release
needs: publish-npm
needs: [publish-npm, publish-pypi]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,8 @@ __pycache__/
*.pyc
.pytest_cache/
bench/*-loc/

# Python wrapper build artifacts (refactron-py)
refactron-py/dist/
refactron-py/build/
refactron-py/**/*.egg-info/
1 change: 1 addition & 0 deletions .npmignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ vitest.config*
coverage/
.nyc_output/
node_modules/
tape/

# Env & secrets
.env
Expand Down
45 changes: 45 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,51 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

---

## [0.2.0] — 2026-05-15

First public release of the v2.0 deterministic-refactoring rebuild.

### Added
- **Engine** — 10 deterministic AST transforms (5 Python via LibCST, 5 TypeScript via ts-morph) with cross-file preconditions
- **3-gate verification** — syntax + imports + tests on a shadow tree, atomic batch write or rollback (PRs #7, #8, #11, #13, #15)
- **Documentation engine** — Step 4 of the pipeline; the only LLM-touching component, runs only on already-verified diffs (PR #15)
- **5 LLM providers** for `document`: Ollama (local default — for the trust-conscious), Groq (BYOK fast), OpenAI, Anthropic, Backend (managed via api.refactron.dev for Pro users) (PR #22)
- **CLI output redesign** — by-file findings with code excerpts (analyze), per-file unified diffs (run --dry-run), gate-by-gate progress + structured failure surface (run --apply) (PR #19)
- **Authentication** — OAuth device flow with `REFACTRON_TOKEN` env var support; long-lived API keys for stay-logged-in semantics (PRs #13, #25)
- **`.refactronrc.json` config** — cosmiconfig + ajv schema validation; `transforms`, `exclude`, `testCmd`, `confidence`, `dryRun`, `documentation` (PRs #13, #20, #22)
- **Performance** — per-file parallelization in plan step, 3× speedup on python-legacy-mini (PR #23)
- **Mintlify documentation site** with full transform catalog, safety model diagram, FAQ, citations
- **Reproducible perf bench** infrastructure at `bench/`

### Changed
- REPL output history rendered via Ink `<Static>` to eliminate whole-screen flicker (PR #24)
- Spinner reduced from 80ms tick + per-char shimmer to 250ms tick + single brand color (~50 → ~4 ANSI escapes/sec) (PR #24)
- `RefactronRc.documentation.provider` defaults to `'backend'` so authenticated Pro users get LLM docs out-of-the-box (PR #22)

### Fixed
- REPL `clear` now wipes the terminal viewport, not just React state (PR #24)
- REPL `document` defaults to the active session's analyze target (was reading stale `last-apply.json` from cwd) (PR #22)
- `RefactronRc.exclude` field is now wired into discovery (was dead code since Week 5) (PR #20)
- Run `--apply <file>` parser stops eating the path argument (PR #17)
- REPL `document` output no longer vanishes into Ink's render buffer (PR #18)
- Verify failure surface no longer drops vitest's FAIL section (was front-slicing 4000 chars) (PR #19)
- Findings rendered in source order within each file, not detector-emission order (PR #20)
- CHANGELOG written next to the changed files' project marker, not to cwd (PR #22)
- Cross-platform: Windows path separators normalized in formatters; Node 18 execa.timedOut wall-clock derivation (PR #19, #20)

### Documentation
- SECURITY.md with disclosure policy + threat model
- 30-second demo GIF in README
- 13 docs site pages (Safety Model, 10 transform pages, CLI Reference, Configuration, FAQ, Why No LLM)
- ADRs 1–10 covering every weekly architecture decision

### Honest limitations
- No Ruby / Go / Rust adapters in 0.2; multi-language is post-launch
- Documentation engine requires a reachable LLM provider (graceful skip otherwise)
- Self-analysis on Refactron's own repo fails the test gate by design (mutating fixtures breaks meta-tests) — see `docs/known-limitations`

---

## [0.1.0-beta.2] — 2026-04-05

### Added
Expand Down
Loading
Loading