Repository navigation
Releases: light338/unmix
Release list
v0.1.9 — Browser and account conditions for manual checks
Unmix v0.1.9 — manual browser and account conditions
Record the conditions behind each manual interaction, not only its Git tree.
This extends the feedback about separate “Like saved” and “scroll position
preserved” checks with explicit browser/account/environment evidence.
- New
unmix_manual_contextMCP tool andmanual-contextCLI command declare
browser/version, environment, test-account/authentication, session and data
labels independently for original and candidate phases. - Inspect the context revision before interacting, then submit
expectedContext
alongsideexpectedTree. A changed declaration refuses a racing submission
and invalidates previous phase observations even if code stays unchanged. - Reports separate file freshness from declared-condition freshness, retain the
observed context per record and compare original/candidate conditions by field. - Contextual manual passports block missing/unknown conditions and mismatches.
Separate server URLs are displayed but allowed when the other labels match. - Older observations remain explicitly without external context. File-only
verification stays compatible until context declarations opt the plan into
enforcement; no old record is silently promoted.
Validation: all 70 tests pass, including actual stdio MCP/CLI, account changes,
login/logout, browser/data/environment differences, revision races, per-ID
rechecking, legacy records, input rejection and the updated authored example.
All 27 JavaScript modules pass syntax checks. Tests also run from the extracted ZIP.
This is caller-declared evidence, not browser monitoring or proof a human acted.
Do not submit cookies, passwords, tokens or private account details. Undeclared
external changes remain undetected. No new live model or human/browser test is
claimed; examples and observations in tests are synthetic.
See workflow and limits.
v0.1.8 — Replay fidelity and verification audit fixes
Unmix v0.1.8 — audit fixes
A full source audit found cases that the original 45 tests did not cover. This
release fixes silent patch corruption and false removal evidence, along with
recovery, reporting and interface defects.
- Preserve non-UTF8 text bytes during replay instead of decoding patches as UTF-8.
- Generate canonical raw patches independent of Git textconv, external diff,
forced color, custom/no prefixes and relative-path display settings. - Require an explicit expected-failure stdout marker for automated removal
criteria. A missing test module returning exit 1 no longer establishes a
behavioral failure on the original. See the migration note below. - Pin replay snapshots in Git refs so candidate amend and later GC preserve report
history. Expose lossless Base64 patches when UTF-8 display would replace bytes. - Save replay checkpoints and support restart from interrupted or between-task
states without blindly applying a partial patch twice. - Read literal task filenames from snapshots with NUL separation, including quotes,
spaces, tabs and newlines, rather than Git display-quoted paths. - Reject invalid requirement ID types, prototype-named unknown MCP arguments,
missing CLI option values and unreadable input files with concise errors. - Refresh the Russian getting-started guide and public release instructions.
Validation: all 63 tests pass, including regressions for each reproduced failure,
the existing integration suite, CLI and real stdio MCP. Syntax checks pass for all
25 JavaScript modules. The source archive is also tested after extraction. No new live model or independent human/browser run is claimed.
Removal-criterion migration
A kind:"remove" automated criterion now needs both exit 1 and the exact separate
stdout line UNMIX_EXPECTED_FAILURE:<requirementId> only when its intended
behavioral assertion fails on the original. Exit 0 is still required on the
candidate. Startup/import/timeout errors must not emit this marker.
v0.1.7 plans whose original evidence only contains exit 1 now fail closed with
error/missing_failure_marker. Record a corrected criterion and prepare a new
plan; do not weaken frozen requirements or protected tests in an existing plan.
The marker is an explicit assertion contract, not a security boundary or proof
that the test author chose the correct assertion.
See passport workflow and report/recovery details.
v0.1.7 — Preservation passports
Unmix v0.1.7 — preservation passports
Declare what must survive a removal, and require evidence for every obligation.
Passing automated commands alone no longer closes a configured passport while
manual requirements are missing or stale.
- Optional requirements in prepare with stable IDs, preserve/remove criteria,
automated commands or separate manual interaction IDs and procedures. - Baseline verification in a separate original worktree at the last recorded task
snapshot. Original files, branch and staged index are not used as a test workspace. - Preserve criteria must pass on both versions; removal criteria must fail on the
original and pass on the candidate. Existing original failures, already-passing
removal criteria, command errors and unperformed observations remain explicit. - Current readiness, evidence by requirement, Markdown table and repair requests
in inspect/report. Requirements stay fixed for that plan during adaptation. - Existing protected check inputs, per-snapshot freshness and backward-compatible
verification when no passport is configured.
Validation: 45 integration tests including stdio MCP, CLI, pre-existing failures,
missing/stale manual observations, changed procedures, protected inputs, launch
errors, baseline tampering, implementation repair and the reproducible example.
All tests also run from the extracted source archive.
The example uses authored repairs and synthetic observations. No new live model,
real browser/manual test or independent user validation is claimed. This is an
experimental workflow guard for declared scenarios, not proof of all behavior,
causality, or a security boundary against an agent that can edit the ledger/runtime.
See workflow and limits and generated example.
v0.1.6 — Preview removal impact before reconstruction
Unmix v0.1.6 — preview removal impact
Inspect the consequences recorded in your task history before creating a candidate
or spending a model run on adaptation.
- New read-only
unmix_previewMCP tool andpreviewCLI command, JSON or Markdown. - Show selected removals, direct/transitive dependency paths, shared-file evidence
and tasks with no declared link. These are signals, not a safety guarantee. - List retained check commands without executing them. No candidate, replay,
model, ledger write or Git-object write occurs during preview. - Optional
expectedTimelinein prepare refuses a stale reviewed task timeline
before creating a worktree; existing prepare calls remain compatible. - Expose unfinished recording separately; preserve literal file names and rename
endpoints in snapshot evidence. - Add a reproducible five-task fixture and generated impact table.
Validation: all 36 integration tests, including direct/transitive/multiple
removals, untouched source/index/ledger/Git objects, unknown conflicts, active
recording, stale refusal, literal file names, CLI, real stdio MCP and example output.
This remains an experimental local tool. Preview does not infer hidden semantic
or runtime dependencies and cannot establish behavior preservation. No new live
model adaptation or independent user test is claimed.
v0.1.5 — Protect recorded tests during adaptation
Unmix v0.1.5 — protect recorded test and check inputs
Previously the core verifier could run a weakened candidate test and return a
passing result. New reconstruction plans now freeze selected test/config file
versions from base and retained-task Git evidence before adaptation.
- Reject modified/deleted selected tests, file-mode changes, symlink replacements
and modified test/package configuration before running commands. - Optional
protectedFilesselects custom scripts and fixtures by literal path. - Show expected/actual object IDs and provenance in inspection and JSON/Markdown
reports; preserve candidate/original files and real indexes during review. - Stop subsequent commands when an earlier command changes candidate content.
- Keep new regression tests possible and manual observations separate.
- Label old plans
unavailable_legacy_plan; prepare a new plan for enforcement.
Validation: 30 integration tests, including negative tests for weakened assertions,
configuration edits, deletion, symlink/mode changes, retained updates/deletions,
custom checkers, retry, legacy behavior, CLI exit status and real stdio MCP calls.
The existing shop reconstruction demo remains covered. No new live model run or
external adoption is claimed.
This is a guard for selected recorded files, not a malicious-agent sandbox or
semantic proof. Heuristic discovery is incomplete; external oracles, ignored
files, runtime and installed dependencies are not frozen. See
protected-input workflow and limits.
v0.1.4 — Manual checks with snapshot freshness
Unmix v0.1.4 — manual checks with snapshot freshness
Implements the workflow gap raised by TheodorNEngoy: record separate interaction observations, then see whether later adaptations changed their candidate snapshot.
- New
unmix_manual_checkMCP tool andmanual-checkCLI command. - Record a stable check ID, procedure, outcome, observer, note and optional evidence references against
candidateTreeinspected before testing. Refuse a submission when that tree has changed. - Inspection and JSON/Markdown reports expose latest observations and append-only history, with
staleon content changes. Rechecking one check never refreshes another. Resume retains history. - Keep manual evidence separate from automated checks: a passing test run cannot refresh manual results, and a manual pass cannot replace executable checks.
- Support existing plans without migration. Inspection now includes
candidateTreeand nonignored untracked files in its aggregate diff.
Validation: 24 offline integration tests, including six manual-evidence scenarios and actual CLI/stdio MCP calls. The fixtures explicitly identify authored observations; no real human UI testing or new live model adaptation is claimed for this release. Existing v0.1.1 model evidence remains historical.
Freshness covers nonignored Git file content and modes, not browser/storage/database/runtime/deployment state. Recorded observer identity and evidence references are caller supplied and not authenticated. This remains an experimental local tool; passing checks and current observations do not prove all behavior.
See manual-check documentation for the workflow and limits. No dependencies, telemetry, hosted backend or automatic merge added.
Unmix v0.1.3 — task-by-task review reports
Unmix v0.1.3 — task-by-task review reports
Added specifically in response to bomtobe-hgkim's reviewability feedback.
New unmix_report MCP tool and report CLI command expose JSON or Markdown:
- Original and recorded resulting patches for each completed retained task.
- Replay outcome, intent, dependency IDs, adaptation note and blocker history.
- Intentionally removed tasks, pending tasks and the current blocker.
- Additional candidate changes outside completed task snapshots, including untracked files.
- Aggregate candidate diff, configured checks, recorded results and freshness.
Generate it before checks; it does not run check commands. Regenerate it after
verification to review outcomes. unmix_prepare exposes the report tool/plan ID,
and repair prompts recommend reviewing the report before checks.
Usage and evidence limits · Generated report
node bin/unmix.mjs report --repo /absolute/project --json '{"planId":"PLAN_ID","format":"markdown"}' > /outside/project/review.mdSnapshots are recorded for plans prepared with v0.1.3. Existing plans remain
readable but explicitly mark unavailable per-task result evidence; prepare a new
plan for the complete report. Later task edits can overwrite earlier results:
this is a historical replay review, not semantic ownership of final lines or
proof that every behavior survived. Blockers are discovered incrementally.
Validation: 18 tests cover existing behavior plus conflict/dependency history,
pending work, original/result attribution, overlapping tasks, stale checks,
untracked edits, legacy plans, binary patches, CLI Markdown and stdio MCP JSON /
Markdown discovery and calls. The generated checkout example uses explicitly
authored repairs; this update does not claim a new live model evaluation.
No npm dependencies or registry publication. Local CLI/MCP source release,
experimental; existing project checks remain trusted executable code.
Public-checkout validation: all 33 tracked files match the local source byte for byte, all 18 tests pass in a fresh clone, and the documented example generates both reports successfully. CI passed on Node.js 22 and 24: https://github.com/light338/unmix/actions/runs/38706299260
Unmix v0.1.2 — first public experimental release
Unmix is a local Git task ledger and MCP server for Codex. Record related development tasks, remove one decision, and let Codex adapt retained changes in a separate worktree.
Try it
Download the source ZIP below or clone this repository. Node.js 22+ and Git are required; there are no npm dependencies.
git clone https://github.com/light338/unmix.git
cd unmix
node bin/unmix.mjs help
node --test test/*.test.mjsFollow Your first project to connect MCP and try a recorded removal on your work.
Evidence
14 offline tests pass. GitHub Actions passes on Node.js 22 and 24. A real authenticated Codex CLI recorded four notebook tasks over MCP, removed mandatory authors and adapted tags, normalization and JSON export. Five check commands passed; original files, HEAD, index and status, retained tests and the external oracle were unchanged. Live validation.
The shop demo uses authored repairs; the separate notebook experiment uses actual model-written repairs. One synthetic scenario does not prove general semantic correctness. Core verification does not yet freeze arbitrary project tests. No external users are claimed.
First users wanted
Try one real change of direction in a small project and submit a First-use report: what you removed, what survived, what broke, and whether you would use it again. Reports from independent projects guide the next release.
MIT licensed. No npm registry publication. The full original pre-publication Git history is preserved in the attached unmix-history.bundle; the public branch starts with an import of that existing project.