0.5.0
20 added11 changed14 fixedThe release where Wayari reviews the code it wrote: a reviewer seat that is never the author, findings pinned to file and line, asked versus found, a behaviour diff, findings on the pull request, and a merge grant for the hours you sleep. The gate that checks all of it now runs in minutes rather than hours.
added20
A reviewer reads every channel after its gate goes green. It is a read-only shift, staffed from outside the channel's authors, working at the sha the gate passed. It writes each finding with
wayari finding <path>:<line> "<headline>" --scenario "..." --severity blocking|should-fix|note.wayari reviewprints them under What the reviewer found, orfound nothing, orNo review ran:and the reason. It never prints a verdict. A reviewer that goes silent is stopped once and never restarted, and the pull request still opens ready.The reviewer runs on the lead's model, bounded by 30 minutes and $2 on API auth. A repository names its own in package.json as
wayari.reviewer: { "agent", "model" }. A model the registry does not know is a staffing stop, never a quiet fall back.An adversarial review, when the repository asks for one. A trunk whose package.json names
wayari.review.proofasks the reviewer to prove a finding with a new test. Wayari reruns that test twice and prints it as proof only when it breaks the same way both times.A fixed finding becomes a review rule. It is promoted to
.claude/skills/on-review-<name>/SKILL.md, and the next reviewer on that repository runs it.Findings land on the pull request as inline comments.
blockingandshould-fixfindings with a line are posted asWayari review:comments by the gh account that opened the pull request. Anotestays in the body. A fixed finding gets one reply naming the commit, and its thread is resolved."wayari": { "review": { "comments": false } }turns posting off. A gh failure is one line in the channel and never holds a ship.Asked for, not found. Every sentence of the goal is checked against the diff, on the pull request and in
wayari review. Only a path or a filename counts as checkable. Every other sentence is listed as needing a look. The section stays withheld until the diff is settled, so a builder cannot read which of its own claims are unanswered before it says done.
14 more addedall 20 shown
The behaviour diff: what changed that nobody had to read for.
wayari reviewand the pull request compare the help text, the--jsonshapes, the declared checks, the skills and the MCP tools at the channel's base and at its head.wayari.surfacesin package.json narrows the five. A base that cannot be checked out printscannot compare, never a clean diff.The morning stack.
wayari review --allis one page for every ready pull request, grouped by the map its ticket came from, inwayari graph's merge order.The merge grant.
wayari grant merge <channel>... --hours <n>(or--all) lets Wayari merge those channels for up to 8 hours. It merges one ready pull request a minute, and only when GitHub would, the gate is green at GitHub's head, a non-author reviewed that same sha, no blocking finding stands, nothing the goal named is missing, the behaviour diff is clean and every channel it stacks on has merged. A channel opened after the grant is never covered. Grants survive a daemon restart.wayari grant revokeends one, and barewayari grantis the morning page: merged, left for you, never reached.npm run wires, the wire-check as a gate for this repository. It joins the IPC channels, the CLI verbs, their usage lines and the MCP tools, and prints one line per missing link naming both sides with file and line. It is declared inwayari.gatesbesideorphans, so another repository never meets it.Skills served to agents.
wayari skillslists the library andwayari skill <name>prints one whole, also aswayari_skillsandwayari_skillover MCP, so a Codex or Gemini agent reads the same skills Claude does. A red check pullson-red-<check>into the next builder's task file, with what fixed that check the last time.wayari promote <channel> --as <name>drafts a skill from what a channel taught.The persistent thread and standing orders.
wayari threadis one record per repository of what happened, andwayari notewrites a line to it.wayari standing add "<order>"keeps what you say to every agent in.wayari/standing.md, and every shift and every MCP client receives it. The app has a Thread tab beside Findings.An agent's first contact orients it. Bare
wayari,wayari statusandwayari_statusopen with a Here block per repository: its maps and their open frontier, open findings, who is on shift, and what to run next.Maps.
wayari mapreads a plan written as a network of markdown questions under.wayari/maps/<name>/, with--ticket,--claimand--close.wayari start --map <name>/<stem>opens a channel on one ticket.Findings from anyone.
wayari finding <path> "<what you saw>"writes one from your own terminal, and refuses a path the trunk does not carry.wayari findingsand the app's Findings tab show them channel by channel.wayari propose --from-findingsgroups them into one channel per check.The page before the night.
wayari proposewrites one channel per goal, with seats, model, order and likely cost, and opens nothing untilwayari propose --approve.wayari atlas <path>: what is pinned to a path, which check reaches it, what breaks if you change it, who touched it last and what command works there.Loops that stop.
wayari loop start,wayari loop passandwayari loopsrecord a hunt pass by pass and stop it after two passes in a row with nothing new. A hunt is a channel whose output is findings.wayari replay <channel> --without atlasre-runs a finished channel's goal from its own base with the atlas withheld, and--reviewer <agent>/<model>swaps the reviewer instead. Neither opens a pull request.npm run evidence --arm <field>groups the routing rows by any field, so each arm is readable beside the other.wayari start --after <channel>waits for the blocker's pull request. A follower whose blocker has not opened one is armed and left unstaffed, and starts itself when it does.
changed11
The gate runs in minutes. A change to docs, skills or
.wayari/records typecheck, build and tests asunchangedand still runs every declared check. A code change runs only the test files it can reach, and the tests line says how many: "214 of 4,166 test files ran, reached from 6 changed paths".The whole suite runs once on the trunk after every merge. A red trunk says
trunk gate failedin that channel andtrunk is redinwayari statusand first inwayari review --all, until the next green.Two gates run at once when the machine is quiet, never three. Behind a running gate,
wayari shipanswersqueuedat once and says which gate it waits for.A stack gates once. A follower's green gate at a sha carrying all of its blocker's commits proves the blocker, whose pull request is marked ready. Merge order is unchanged.
A single test that hangs fails by name after fifteen minutes (
WAYARI_TEST_TIMEOUT_MSto change it).A clock is said, never defaulted.
wayari startandwayari dowithout--hoursrun until the work is done.
5 more changedall 11 shown
wayari sayto a member in the middle of a command is queued for its next prompt instead of refused.wayari statusshows live channels only, counts the archived ones on its last line, and shows them with--all.A member's role reaches its shift through a section of the task file.
grantjoinsserve,attachandstopas verbs that are never MCP tools.wayari grantrefuses inside an agent's session. No agent's word is enough for eight hours of merges nobody watches.Not done: GitHub Actions never ran on this repository during this release. A billing block stops every job before it starts, so every merge stood on the factory's own gate.
wayari merge --on-local-gaterecords that, names the checks that never ran, and never gets past a check that ran and failed.
fixed14
The daemon ended sessions it did not own. The test suite, run inside a shift, ran
wayari cleanagainst the machine's one tmux server and killed live shifts. The suite runs on its own tmux server now. The daemon reaps a shift session nobody owns and never touches a session whose channel it does not know.Eight fixes from a stranger's first run of the published command (#199):
wayari status --jsonthrough a pipe was cut at 65,536 bytes.--filewas held to the 8,000-character cap for typed goals. A file or a pipe carries 60,000.The long-goal refusal said "leave the rest in the issue". It says to use
--file.wayari statusprinted every archived channel.Five skill docs said
.skribbl/where they meant.wayari/.A finished builder was recorded as three stalls, because nothing durable told it how to finish. The task file now says "run
wayari done. Committing is not finishing".wayari shipfailed on a fresh checkout of a workspace repository, which linked only the rootnode_modules.wayari reviewprinted the brief twice.
A ship whose caller died held the channel. Every later ship refused until
wayari stop. A latch older than any gate could run is taken again.A killed channel could not be restarted once its worktree was swept. A member's surviving branch is checked out, commits and all, reported as reused, and never deleted by a rollback.
A channel that ran out of clock while queued at the gate was archived minutes before its gate passed. The out-of-clock verdict waits for the gate. Running out of money still lands at once.
A stuck
wayari stopwedged the owner lock.
8 more fixedall 14 shown
wayari shipcould not find the checkoutwayari takemade. It also refused a person's ship after the clock ran out, and ran a queued ship for a channel already archived or merged.A finding's headline could be npm's banner or the echoed command line.
A tool line in
wayari openshowed thecd, not the command.wayari status --jsoncarried a whole failure block. It keeps the first line.The graph kept a merged pull request as open.
The findings read missed a shipped channel's gates.
wayari start --afterrefused a blocker that ran out of clock and shipped.A replay's task named the arm it was testing. It does not now.