Repository navigation
Releases: on-par/software-factory
Release list
0.9.26
The factory never merges onto a red base. It honors hosted base CI before it starts work or merges, waits while the base's CI is pending, and pauses a repo's merges while its base is red (#3856). Stack mode now sends a planner's request to split an oversized issue to the stack splitter instead of parking the issue; missing information and contradictions still park (#3855).
All seven published @on-par packages move to 0.9.26 in lockstep.
npm install -g @on-par/factory-cli@latestFixed
0.9.25
One stack engine for run-issue and run-brief (--size-gate takes off or stack, file and slice are deprecated aliases for stack, and --run-children is removed), PR bodies whose risk receipt no longer lists changed paths or internal plan names, and Codex running with no sandbox by default (#3832, #3817, #3824).
All seven published @on-par packages move to 0.9.25 in lockstep.
npm install -g @on-par/factory-cli@latest0.9.24
PR descriptions stop listing changed files and stop naming local briefs (#3792). This release also adds stacked run-brief (#3763) and removes the ship-it/ prefix (#3771) and the simulator (#3770).
All seven published @on-par packages move to 0.9.24 in lockstep.
npm install -g @on-par/factory-cli@latest0.9.23
0.9.22
run.branchPrefix lasting default, plus evidence/park fixes (#3748–#3751).
All seven published @on-par packages move to 0.9.22 in lockstep.
Install or update with npm install -g @on-par/factory-cli@latest.
Added
run.branchPrefixin.factory/config.*sets a lasting default branch-name prefix for the repo (#3747). Precedence:--branch-prefix>run.branchPrefix>factory. The value is slug-normalized like the flag, and a value with no letter or digit fails config validation.FACTORY_BRANCH_PREFIXis still ignored. Legacyship-it/branches are still recognized.factory status --kpisshows the prefix's source.
Changed
- A fail-to-pass evidence proof runs only the planner's named tests through the runner's own filter (vitest, jest, pytest), and SKIPs with "selector could not be used" instead of running the whole suite (#3750).
Fixed
- Evidence commands on macOS
sandbox-execcan reach loopback, so adotnet testfail-to-pass proof no longer aborts connecting to its testhost; other outbound stays denied (#3748). - A fail-to-pass proof that fails identically on base and head now gets one free CHECK re-run and parks
check-infrainstead of builder rework, and a test host it leaks is reported once inside the evidence failure rather than as a separateside_effectsfailure (#3749). - A parked
run-briefrun no longer tries to comment on a nonexistent GitHub issue (which 404'd and logged a misleading warning); its park reason is reported in the event log and the CLI output (#3751).
v0.9.21
v0.9.20
v0.9.17
What's Changed
- harness: Codex adapter for the provider error classifier (usage limit as usage_cap with try-again reset time) (#3227) by @patrob in #3605
- unpark queues at the back of the lane (max order + 1), never at an old or front order; keeping the old order needs --keep-order (#3554) by @patrob in #3606
- review rework 2/3: a queued review rework runs BUILD rework on the same PR branch with only that review's comments, then re-runs CHECK (#3564) by @patrob in #3607
- router: failover.triggers decides which non-cap failures fall back to another model at the same provider; a usage cap ends the call; drop the unread escalateAfterTierExhausted (#3228) by @patrob in #3608
- fix(test): drop removed escalateAfterTierExhausted from review-rework test by @patrob in #3612
- usage --json: add plan (subscription, api or unknown) detected from Claude Code auth (#3214) by @patrob in #3614
- review rework 3/3: cap review-rework runs per issue (configurable, default 2) and park with one comment naming the cap (#3565) by @patrob in #3613
- A recurring sweep closes factory drafts older than 24h with no active claim and requeues their issues (#3552) by @patrob in #3615
- evals: a
readinesseval suite gates the judge's contract in stub mode and tracks false-ready / false-not-ready against a baseline in real mode (#3468) by @patrob in #3616 - failover: Claude or Codex in
models.providerOrdersigned in with an API key instead of a subscription is refused, logged once asprovider_refused, and never run; OpenCode Go runs onlyopencode-go/models (#3335) by @patrob in #3617 - events: rotate events.ndjson by size (#1631) by @patrob in #3618
- check:
factory checkprints the readiness verdict with its questions or assumptions, and exits 1 only when the ticket isnot-ready(#3469) by @patrob in #3626 - router: automatic failover never moves onto a metered (API-key or unknown-plan) provider; no opt-in (#3234) by @patrob in #3627
- run: a capped or failing provider fails over to the next configured provider for the stage, and releases to factory:queued only when every provider for the stage is blocked (#3226) by @patrob in #3628
- Large-PR walkthrough artifact in the evidence pack (≥300 lines / ≥5 files) (#3623) by @patrob in #3630
- Per-lane agent memory file fed into PLAN prompts, updated via PR (#3624) by @patrob in #3631
- Rebase-or-refuse when a PR's base is stale: re-run checks on current main before merge (#3619) by @patrob in #3632
- run: when every provider for a stage is down and no reset time is known (untimed breakers or only metered providers left), park with all_providers_down and emit one event instead of spinning (#3235) by @patrob in #3633
- Base hold should wait for green CI on new main SHA, not only SHA change (#3620) by @patrob in #3634
- status --json: providers[] (plan, breaker state) and activeAlerts[] derived from breakers, plus a provider_restored event when any breaker closes (#3236) by @patrob in #3635
- Optional human checkpoint tier: pause after PLAN for issues labeled factory:needs-design (#3621) by @patrob in #3636
- PLAN output: vertical-slice outline with per-phase files, automated and manual checks (#3622) by @patrob in #3637
- /factory iterate PR comment reruns rework on the same branch (#3625) by @patrob in #3638
Full Changelog: v0.9.16...v0.9.17
v0.9.16
What's Changed
- factory status and kpis show the count of open factory draft PRs (#3553) by @patrob in #3597
- Baseline cache entries expire, are re-checked when GitHub CI disagrees, and can be cleared (#3540) by @patrob in #3598
- review rework 1/3: a trusted "changes requested" review on a factory PR queues its issue for review rework, once per review id (#3563) by @patrob in #3596
- CHECK runs declared checks when .factory/ is untracked: one-shot runs snapshot the source-checkout config (#3600) by @patrob in #3601
- Make the PR body footer configurable via pr.footer by @patrob in #3602
Full Changelog: v0.9.15...v0.9.16
v0.9.15
What's Changed
- CHECK: a compile, tests or lint checker that finds no command reports SKIP, not PASS, and the summary never reads "All checkers passed" when nothing was built or tested (#3566) by @patrob in #3587
- evals: weekly prompt eval authenticates with the Claude subscription token, judge moves to claude-sonnet-5-5 by @patrob in #3580
- run: a same-file lane hold parks the issue as
held(needs-a-human) instead of deferring it, so it never comes back and its dependents escalate (#3576) by @patrob in #3590 - checkers: a shared
summarizeCommandRunthat returns pass/fail counts and every failing test's lines within a 4,000-character cap, with CHECK's own output unchanged (#3328) by @patrob in #3591 - readiness:
judgeReadinessreturns a strict-JSONready/ready-with-assumptions/not-readyverdict on a newreadiness_judgeroute, cached per body hash (#3467) by @patrob in #3589 - breaker: a rejected or revoked credential (kind auth) fails over, holds that provider's breaker open until the credentials change or
factory breaker reset, and emits one provider_auth_rejected event (#3232) by @patrob in #3592 - CHECK: repo-declared build/test/lint commands (
checks) +factory init --detect-checks; verify runs 4 test workers by @patrob in #3594 - queue preflight + land: adopt a DIRTY or still-UNKNOWN open PR with
syncMain, so land merges origin/main into it (#1886's sync) with a plain push and re-runs CI (#3324) by @patrob in #3595
Full Changelog: v0.9.14...v0.9.15