Repository navigation
v0.4.3
·
42 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
factory watchfiles engine/runtime failures only into[watch].engine_repo(defaultmikeroySoft/factory) from every install, never into the repository it runs in (#311: 46 engine bugs filed into rocm-cli, rocm-app, district and gpuflo between Oct 16 and 19 that those repos could not fix). Before filing it lists the engine repo's openbugissues; when another install already filed the fingerprint it comments its newest evidence there, at most once per 24 h per install, and adds itself to the issue'sObserved bylist. Unit fingerprints no longer include the install's unit name. Only the opening install closes a filing, and not while another install commented within 24 h. The runtime reader addsfailures: the failure-severity entries oferrors(runtime_events.FAILURES: journal-writer defects only) with an evidence pointer (byteoffset,execution_id, OSerror); every other code, including any future one, is coverage and never filed.STEADY_CODESis gone. Runtime filings quote the offending journal line, the conflicting execution's rows, or the broken reader's stderr. Triage bypasses the model for watch filings written by its own account (routed from another install), and with[install].dispatch_envset it refuses to post (identity_mismatch) unlessghauthenticates as the dispatcher: on Oct 18 a pass whose unit lackedGH_CONFIG_DIRtriaged #264–#297 and escalated #238 as the owner account. The dashboard's "Run LLM triage" decision runs triage withdispatch_envapplied, so it posts as the dispatcher instead of being refused.- Runtime projection no longer reports
filesystem/resourceslock_unavailablefor a lock file that does not exist (#315): ticket cleanup unlinks.factory/locks/N.lockafter landing while the journal still names it, andmerge.lockdoes not exist before the first merge, so every live journal tripped the error andfactory watchfiled it. The resource still reports stateunknown; other stat failures still reportlock_unavailable. factory statson the runner (#313): per-ticket GitHub reads (issue, PR comments, timeline) run 8 at a time withstats: N/M ticketsprogress on stderr (--quiethides it), instead of ~430 serialghcalls and minutes of silence. Every mode reads the dispatcher's root (host[repo."owner/name"].pathfor--repo owner/nameor the checkout's repository), so--by-worker/--by-brieffrom a dev checkout no longer print empty rows; a root without.factory/events.jsonlfails naming that path.--escapesfetches a fix commit missing from the clone (git fetch origin <sha>) and otherwise skips it with a warning and aSkipped fixes: Nfooter instead of crashing (skippedper JSON row). OMP workers' token usage is now recorded from their session transcript when the log reports none, shown per row and summed in aWorker tokens:footer (n/a (not reported)where missing). Dollar columns are dropped when no ticket has a cost, with onePrices: none configurednote; the README documents[prices."<model>"]keys, units and an example.- Triage posts at most one comment per issue state (#288): a
needs-triageissue whose last comment is its own triage comment and whoseupdatedAtis within a minute of it (no comment, body or title edit, or label change since) is skipped without asking the model, journaled asnot_admitted/unchanged_since_triage. A failed label swap after the comment used to leaveneeds-triageand repost every pass; a new comment or any label change, including puttingneeds-triageback, still gets a fresh triage. - Managers can
RESOLVEa no-change escalation when evidence shows the requested outcome is already on main or the ticket is a duplicate. Factory records the evidence before closing the issue as completed and removingready-for-human; it closes an empty open agent PR too, but refuses if that PR contains commits. - Watch-filed runtime failures bypass model triage for a fixed agent investigation, and
factory watchcloses open filings after their fingerprint has been absent for 24 hours. - Watch-filed runtime failures bypass model triage for a fixed agent investigation, and
factory watchcloses open, unassigned filings whose newest evidence is at least 24 hours old. - Watch-filed runtime failures bypass model triage for a fixed agent investigation, and
factory watchcloses open, unassigned filings still atneeds-triageorready-for-agentwhose newest evidence is at least 24 hours old; filings a fix or a human already closed are journaled and no longer re-checked. - Accepted-priority scheduling (#102):
factory dispatchadmits frontier tickets by policy instead of issue-list order (factory/schedule.py). Existing eligibility (open,ready-for-agent, not an initiative, unassigned, no openBlocked by), capacity and locks come first; a ticket whose Plan binding admission would refuse (ambiguous or malformed, or linked without a baseline) isheldwith that reason and never ranked. At most oneexperiment-labelled ticket (new label, created byfactory init) is active at a time and production delivery has the remaining capacity. Priority is read only from the ticket's pinned Plan baseline (the accepted scope binding):NOW>NEXT>THEN>LATER, then unknown priority, oldest ticket first within a class; after three consecutive explicit-priority claims the oldest eligible unknown-priority ticket is admitted. Triage briefs, manager recommendations and experiment results never set priority. Each pass with eligible work logsselected/deferred/heldwith a reason per ticket and journals aschedulingrow;claimedrows gainpriority,priority_sourceandexperiment.--dry-runlogs the plan and writes nothing;--ticket Nis unchanged.