Repository navigation
v0.4.0 - MCP registry listings, systemd deployment, overlord autonomy, MCP tool surface hygiene
What's new in 0.4.0
Added
MCP registry listings
- Added
server.jsonfor the official MCP registry
(io.github.motock/fagan) and a Dockerfile for Glama's build/
introspection check, plus a Glama badge and dashboard screenshots in the
README (#811, #812).
Linux systemd deployment
- Added systemd user-unit templates for the advance-scheduler daemon and
the usage-poller, a service+timer pair, a logrotate template, a
scripts/generate_systemd_units.shgenerator, and README documentation
for the Linux setup path (#822, #824, #825, #831, #838).
Dashboard plan-ingest picker & Comms polish
- A new backend endpoint lists plans available to ingest, backing a
dynamic select in the ingest picker in place of free-text plan-name
entry; the Comms panel shows a typing indicator while a reply is
pending (#820, #821, #823, #828, #830).
Local-dispatch observability (LD90-W0)
- Every escalation, fallback, park and rework notice across
story_status,triage,escalation,review_orchestrator,
dispatchandadvancenow carriesevent,story_keyand
correlation_id. Afirst_pass_clean/disqualifying_eventsrollup and
a new purelocal_successclassifier feed alocal_success_reportCLI:
rolling first-pass-clean rate by dispatch tier, with a reason breakdown,
read from the plan notification sidecars (#850-#858, #865).
Reviewer & scheduler hardening (LD90-W5, MFR, SWH)
- The reviewer now recognizes and classifies transport failures (502/503/
504, timeouts) and defers the review like a rate limit instead of
charging them againstreview_inconclusive_count; a diff file-inventory
criterion was added to the review checklist. The reviewer's bash tool
and the notification-outbox drain phase are now bounded by a hard
timeout so a runaway command or a wedged drain can no longer hold a
scheduler tick open. The scheduler now publishes the checkout revision
it's actually running, and preflight reports it too (#861, #863,
#866-#873, #906, #907, #909).
Rework & done-bar correctness (FSU, TGE, SST, SU, HRG, ASB, RFW)
- A red full suite gets one retry before the done-gate rejects it.
Pre-existing baseline failures are now exempted from the tick-side
detached grade and both agent-side full-suite gates, with the baseline's
failing node ids recorded in the worktree for the agent to read. A
rework round that carries an acceptance block is graded on the same
done-bar the agent was originally held to; a rework transcript that
already claims done is never resumed; a reviewer-feedback rework round
can no longer be marked done on oracle-green alone. The agent scratchpad
is untracked before grading, and the planner/dispatch prompts now state
it must never be committed (#874-#885).
Overlord autonomy round 2 (OA2)
- Triage now recovers born-broken-oracle stories (
blocked_oracle),
resets its own attempt counter after a successful recovery, and skips
stories with an unresolved infra-transport failure instead of ruling on
them. Watchdog kills converge via a streak counter so repeated hangs
escalate.request_decisionfails open - parking the story for a human- when the overlord backend errors. Agent
give_upnow routes through
the existing rebrief diagnosis path instead of notify-only. Merge-park
re-adjudication was widened to the risk-threshold reasons the gate
actually emits, andPIPELINE_AUTO_TRIAGEnow ships enabled in the
shipped launchd template (#834, #886-#893).
- when the overlord backend errors. Agent
Resume-rebase remote sync (SRB)
- A resumed agent's story branch is force-pushed after the resume rebase
so the resumed agent's own push is a fast-forward, and the seed prompt
is now forbidden from pulling, merging, or rebasing the branch from
origin itself (#894, #895).
Post-LD90 priorities: file-size discipline & plan-conflict handling
(PLD90)
dispatch.py,story_status.pyandadvance.pywere each split to
bring their line counts under 1000, extractingdispatch_routing,
dispatch_attempt,dispatch_baseline,dispatch_worktree,
detached_gradeandadvance_mergeas their own modules. A new
plan-conflict classifier and overlord-ruling module distinguish a red
suite caused entirely by pre-existing, branch-untouched tests from a
real regression, routing the former to an overlord ruling instead of
burning a rework cycle. A scope gate sends a branch with out-of-scope
production changes back before review, naming the exact offending
paths.ingest_plangained an optionalfilesfield to scope and size
stories, with an ingest-time warning when a local/cloud-open-source
story's file scope exceeds the documented dispatch-sizing caps. The
reviewer prompt now receives the story's brief, sibling status and
Deferred lines (#833, #841, #896-#920).
MCP tool surface hygiene (MCPHYG)
- Prompted by an external tool-quality review:
check_story_statusis now
actually registered as an MCP tool - it was fully implemented and
documented but never decorated, making it unreachable via MCP.
mark_story_in_progressandmark_story_donenow serialize their
manifest writes under the same plan lock every other write path uses,
closing a race with the scheduler's tick. The duplicated
_VALID_STORY_STATUSESallowlist (each copy listing"done"twice) is
now a single source of truth. A newpatch_plantool edits plan-level
fields (currentlyrole_config) under the same locked, allowlisted
pattern aspatch_story.checkpointis renamed tocheckpoint_story
for naming consistency with the rest of the tool surface, with
checkpointkept as a working alias (#922-#926).
Changed
get_role_configremoved. It was a strict subset of
get_effective_config(5 roles vs. 9, fewer fields, same underlying
resolver) - useget_effective_config(plan_name=None)instead. This is
a breaking change for any external caller of the MCP tool surface
(#924).resource_statusnow uses a provider-aware default free-memory floor
(2048MB for MLX, 512MB generic default for Ollama/LM Studio), and local
model context sizing (num_ctx) is now driven by an empirically-tuned
per-model table and sized per parallel slot, in place of a single static
override (#818, #844-#846, #849).
Fixed
Merge & dispatch correctness
- Merge now pushes from the plan's own worktree instead of the pipeline's
REPO_ROOT; dirty worktree state is committed before the merge-gate
rebase instead of retrying the same unstaged-changes failure verbatim;
the merge gate persists its own fresh test result onto the story instead
of leavinglast_test_checkstale; the squash-merge commit gets an
explicit, stable title instead of trusting GitHub's single-commit
default, and no longer repeats the story key in the PR title; two
dispatch/decision-log bugs found while live-diagnosing a parked plan
were fixed (#819, #829, #835, #839, #840, #879).
Circular imports
- Broke a
pipeline.ci<->pipeline.build_detect<->pipeline.server
circular import that failed wheneverpipeline.ciwas imported first
(#843).
Scratchpad tracking
- A checkpoint commit no longer tracks
.agent_scratchpad.md, even if an
earlier commit already had (#836).
Rebrief & triage prompts
- The rework diagnosis prompt now receives the story's original brief so
it can't invent a fix that contradicts an already pre-authorized edit;
triage skips stories with an unresolved infra-transport failure instead
of misclassifying them, and keeps the real exception once the
escalation ladder is exhausted (#834, #837).
[no-new-tests] anchoring
- The opt-out token is now anchored to the start of the brief, so a
sentence elsewhere in the brief that merely mentions the token can no
longer accidentally trigger it (#833).
Dashboard/UI polish
- The Comms typing indicator now anchors after the thread with tighter
panel spacing, and the stale plan-board progress bar is hidden once the
executor signals completion (#830, #905).
Docs accuracy
- Fixed a stale
gpt-oss:20b32768num_ctxclaim and documented the
gpt-oss-20b-highoverride; documented the launchd install+reload
requirement and added a reload helper so a plist edit actually reaches
the running daemon; fixed the "Both routes" wording in the patch review
& apply section (#827, #846, #847).