Skip to content

Synchronize latest Public updates - #19

Merged
River Li (lbx154) merged 61 commits into
mainfrom
sync/public-20260822
Aug 22, 2026
Merged

Synchronize latest Public updates#19
River Li (lbx154) merged 61 commits into
mainfrom
sync/public-20260822

Conversation

@lbx154

Copy link
Copy Markdown
Contributor

Direct synchronization of the latest Public commits without additional modifications.

River Li (lbx154)and others added 30 commits August 22, 2026 09:41
A mission that pauses to ask something sits at paused_operator until the
question is answered, and the only channel that cleared that ran through
the web cockpit. So an unattended daemon could sit blocked for hours on
"may I create a venv and install torch?" — which is what two campaigns
did this morning — while --notify looked like the answer and was not: a
nudge is guidance the next round happens to read, and the round never
comes because nothing is running.
`--answer TEXT` clears the pause and starts a fresh attempt, recording
what was answered on the item. It refuses rather than guesses: no waiting
mission is an error, several waiting missions ask for --answer-item, and
an id that is not waiting is refused without touching the ones that are.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Went and read how reviewing actually works — the ICLR 2025 reviewer guide
with its two worked example reviews, the Outstanding Paper committee
citations, a working reviewer's own account, and meta-analyses of ICLR
2024/2025 criticism categories. The four questions a reviewer is asked
are whether the problem is real, whether the approach is placed in the
literature, whether the paper supports its claims, and whether the work
matters. Novelty and significance are assessed nearly every time.
Multiple seeds and error bars are moderate and context-specific, raised
when a margin is small; reproducibility-checklist compliance shows up
mostly in the thinner reviews.
The vertical had it backwards: 89 mentions of limitations, 85 of
reproducibility, 75 of seeds. So the drafting contract now says
limitations are one honest paragraph naming the real constraint. A page
of what the method cannot do reads as a weaker contribution and buys no
protection from a reviewer who wanted more anyway, and statistics belong
wherever a claim rests on a small margin rather than as the spine of the
paper.
The other half was missing entirely: what a strong review is actually
made of. Explaining something the field assumed it understood, joining
two areas nobody had joined, a principled method where the principle does
the work, a result that contradicts expectation — none of which is a
bigger number. And what loses a reviewer: a problem never shown to be
real, an increment with no new idea, and a claim the results do not
support.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Four, and only one of them was a test being wrong.
`--json` was unparseable because `import fitz` prints its deprecation
notice on stdout, so every machine consumer of format_facts got a line of
English above the payload. The modern import is quiet; the old name stays
as a fallback. A test now asserts stdout starts with `{`, because the
symptom looked like a parser bug and was a library saying hello.
The external-work wait checked the process stop flag before reading the
work, so a job that had finished during the sleep was reported as
`stop_requested` instead of its own outcome. That is mine, from this
morning. Reading the work first is both correct and the more informative
answer; a pending stop still ends the wait. The flag is process-wide by
design, which is what let one test leak into another, so the suite now
clears it around every test.
The deployment contract asserted `release_matches_source is True`, which
is only true on a release commit — between releases the working tree is
legitimately ahead of the manifest and the test was red by construction.
What the contract owes a client is the comparison itself, computed
against a source root the process could find, so that is what it checks.
The pairing tests needed the `qr` extra, which was simply not installed.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Eight module-level functions that no caller, no test, and no __all__
referenced: a planner ref parser, a role-context formatter, a readiness
profile dumper, two transcript predicates, a wiki validator, a legacy
ledger compactor, and a venue-profile writer. A hundred and two lines
that had to be read and kept working by anyone touching those modules,
for nobody.
`_env_int` was the same nine lines in the engineer's round config and in
the agent-cli adapter — reading an integer knob and falling back on
anything unusable, which is what knobs.py is for. It lives there now
under one name.
The quant factor helpers that also look unreferenced stay: they are the
public surface of a toolkit that user scripts call. The duplicated
`_emit_planner_verdict` bodies stay too — those are mixin protocol
declarations that raise NotImplementedError, and collapsing them would
delete the contract rather than the duplication.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Installed Argus into a clean venv and ran what the help tells a first-time
user to run. Doctor passed every blocking check and reported
`ARGUS-BACKEND-001 [backend/ready] codex 0.147.0 runnable`. The same
readiness probe, asked directly, says `codex authentication is not usable:
Not logged in`.
Doctor checked the binary and its version by default and left the login
behind `--deep`, so the one thing standing between a new user and their
first task was the one thing the green report omitted. It probes auth
every time now, and says `run codex login` instead of `ready`.
Four call sites build a report and one of them passed no probe_auth at
all, taking the argument default — found by the test asserting every
invocation opts in, which is why that test checks the call sites rather
than the flag.
Also from the same pass, working as intended and worth recording: the web
cockpit on loopback serves without a token by design, and a non-loopback
bind returns 401 and prints a pairing URL.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Tried the command I had just added on a campaign that was genuinely stuck
and got the cockpit's headless refusal instead: the launcher decides
between the TUI and the Python CLI from a list of admin flags, and
--answer was not on it, so a one-shot non-interactive command was treated
as a request to open an interactive cockpit.
That defeats the entire point — it exists to unblock an unattended box,
which is exactly where there is no tty. Registered alongside --notify,
with --answer-item as a value option, and the test asserts the routing
rather than the symptom.
Verified against the real thing: the campaign that had been waiting on
"How should the declared Gemma-2-2B checkpoint be made available?" took
the answer and went back to pending on attempt 3.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
An unquoted `description: <prefix>: <suffix>` frontmatter line is a valid
YAML mapping rather than a string. A caller that read one back and handed it
to `Skill.render()` serialized the mapping, producing a still-valid document
whose description was a JSON object. Nothing at run time parses Skill
documents, so no reader ever complained and the damage survived every later
round.
Four shipped Skills carried that corruption and six more were one colon away
from it.
- restore the four mangled descriptions to prose and quote every shipped
frontmatter scalar, which removes the ambiguity at its source
- refuse a non-string or empty name/description in `Skill.render()` so the
failure stops at the write that causes it
- add `tests/skills/test_skill_frontmatter_integrity.py` over the 158 Skill
documents the seeders actually install; the runtime stays parser-free and
the contract is enforced against the source tree instead
- compress two descriptions that had grown into pasted tables of contents
`test_software_reviewer_skill_ab` pinned the older unquoted rendering and now
expects the canonical `Skill.render()` form.
Also adds `docs/WHAT_ARGUS_GREW.md`, which documents the capabilities that
accumulated across campaigns — self-repair records, executable impossibility
witnesses, self-authored instruments, and the promotion gate that governs
which lessons become Skills — with the limits we cannot yet evidence.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep research, ambiguous, multi-artifact, network, install, git, publish, and review-sensitive work on the full team while avoiding Manager/Planner/Reviewer overhead for one local deliverable with an explicit check.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rebuild the shipped Web and TUI artifacts so their release identity covers both the latest upstream Skill correction and the compact microtask route.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
I told a stuck campaign to substitute Pythia-1.4B, Llama-3.2 and
Qwen2.5 — a 2023 model and two from 2024 — with the fluency of someone
who knew the field. Then I probed the registry: Qwen3-8B, gemma-3-4b-it,
Phi-4-mini and gpt-oss all answer 200 here, and two of the names I had
been confidently recommending elsewhere are gated 401.
That is the shape of the failure. Knowledge of what exists stops at
training time and decays, but it does not feel stale from the inside: a
superseded checkpoint arrives with the confidence it had when it was
current, so the mistake is never hesitation, it is a specific wrong name.
The skill starts from the stance rather than a lookup table — assume the
landscape moved, because you cannot miss what you do not know exists —
and then cashes it out: what are people using here now, what will this be
compared against, what changed recently enough that I would not know.
Probe the specific names before the plan hardens, since one HTTP call
costs less than a mission blocked on a dependency that moved. Something
unavailable is a substitution to record, not a reason to stop; unless
identity is the claim, which is the honest carve-out.
Naming a checkpoint from memory is not a research habit, so the rule
rides the shared mission path every vertical passes through rather than
one vertical's banner.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Putting the staleness rule in the engineer's per-turn prompt broke a
budget I had not noticed: that prompt is a hard 2500-character contract
and it was already 3121 before I touched it. Trimming my own text to 134
characters still left it over, and the remaining fat was pinned protocol
wording that other tests hold in place for good reasons.
So the rule comes back out of the fixed prompt. The skill was always
where the content lived; what it needed was a description that a task in
any field would match — checkpoints, library versions, endpoints,
benchmarks, baselines, prices, gated weights — rather than one that reads
as being about research. That is the mechanism the skill library already
has for reaching every vertical, and it costs no per-turn tokens.
The long-experiment rule keeps its pinned phrasing; the incidental
tightening I did while hunting for room is reverted with it.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The campaigns wrote down what they had learned, and it was this: "a
visually polished Stage 1 embedding/logit-lens diagnostic can be
certified as a release-ready ICLR final submission." That is not a bug
report, it is the system correctly identifying what it was being scored
on.
Submission had four checks. Three were packaging — final PDF, BibTeX,
supplementary material, anonymity mode, no placeholder metadata — and the
fourth asked a Reviewer whether the paper was ready. Nothing anywhere
asked whether the result held. So the cheapest path to a certified
submission was to scope the claim down until whatever survived could be
certified, and a campaign could deliver a paper without delivering a
result.
The gate now opens with the result: did this beat the baseline it was
chosen against, at the scale named at selection, and if not, which of
implementation, optimization, data, scale or evaluator the shortfall is
made of and what the next round buys.
The same item carries the other half. An idea gets discarded on a number
that was really a verdict on the engineering — the baseline never
reproduced here, or the method never did what it says — and an unfinished
implementation looks exactly like a wrong idea from the outside. Over-
confidence and under-confidence turn out to be one bug.
Kept out of the Reviewer banner deliberately: that is a hard 800-char
contract already carrying the gap-closing loop, and this belongs where
the campaign's own objective is decided.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
I fixed this once by replacing `"title":"title"` with `"title":"<question>"`
and this morning a campaign ran a mission titled `<question>` whose
objective was `<work+decisive check>`. Changing which string gets pasted
through does not stop it being pasted through.
So the example now holds a question and an objective a Planner could
plausibly mean. If the model copies it verbatim the campaign gets a
slightly silly mission about pruning rather than a mission named after a
JSON key, and the tell is visible immediately instead of looking like a
plan.
That cost fifty characters of a fixed-policy budget that was already
tight, and I raised the budget rather than shave the example back into
being a slot — twice burned. The comment on the constant says why, so the
next person to squeeze it knows what they are trading away.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
A campaign declared it needed "+8 absolute points" over its baseline.
Nothing produced that number. The policy asked for "the win that would
matter" and a round figure that sounds decisive is the obvious way to
answer, which yields a threshold no evidence can contradict and no run
can fail — the appearance of a preregistered bar with none of the
function. It now has to come from something observable: the spread the
benchmark already reports between seeds or methods, or the gap between
the last two published results on it.
The same campaigns kept reaching for checkpoints two generations old,
because that is what a training cutoff leaves behind and it does not feel
old from the inside. Probing the registry from this machine tonight:
Qwen3.8-27B, DeepSeek-V4-Flash, Llama-4-Scout and GLM-5.2 all answer;
Qwen3-8B, which a campaign had selected, is two releases back. So the
engineer policy now says what a reviewer will actually do with that
choice — read it as a claim about how current the work is — and to list
what the registry serves today rather than recall a family.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
I wrote "a miss says nothing about the idea" to stop campaigns discarding
ideas on bad experiments. It is false, and it bought the opposite
failure: a system that cannot learn from evidence at all. Once the
baseline reproduced, the method does what it says and the run could
resolve the effect, repeated misses are evidence against the claim, and
refusing to count them is not rigour.
Worse, it deadlocked with two other rules from today. A miss saying
nothing, retirement demanding a reason the next round would fail, and
submission demanding success leave exactly three lawful states: win,
cheat the gate, or grind forever. The first is not always available.
So the submission gate now separates the three decisions that were
collapsed into one: whether the claim is supported, whether this campaign
keeps spending, and whether anything is submitted. Closing a campaign
because the next round is worth less than another candidate is an
opportunity-cost call rather than a verdict that the idea was false —
which is the persistence the owner asked for without an infinite bill —
and no qualifying result inside the budget is an honest ending, because a
system that must always ship a paper will weaken its own contract until
it can.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Selection writes down the end task, the baseline to beat and the margin
that would count, and then nothing ever reopens the file: across a full
campaign `IDEA_SELECTION` appears zero times in a role session. The
campaign sets its own bar, takes its own exam and reports its own grade,
and the three never meet. A soft baseline costs nothing and a claim can
drift for days without anyone noticing it moved.
Render the promise into the block every role already receives, beside
the papers it said it would learn from. The file is Agent-authored, so
its shape differs every campaign -- the same promise has been filed as
meaningful_win_threshold, meaningful_win_size and claim_contract.end_task
-- so fields are matched by intent at any depth. A campaign made to
satisfy a schema would write to the schema. Two live campaigns named no
baseline and no margin at all; that absence is now visible too.
The host renders and stops. Whether the baseline was the strongest one
available and whether today's number clears the bar are the reading
Agent's calls; a harness that compared them itself would only teach the
next campaign to promise less.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
--answer cleared pending_question and resumed the same mission. That
looks right and is not: the mission runs again, re-reads the objective
that made it ask, and asks the identical question. One live campaign
spent five attempts on "how should the gated Gemma checkpoint be made
available?", answered every time, and asked again every time. The answer
was written to notes, which no round reads.
Route it through continue_with_operator_reply, the same path the web
cockpit uses. It enqueues a continuation whose objective carries the
answer as authority over the inherited one, so the next round reads what
it was told rather than the question it already asked, and answering a
second time is refused instead of enqueuing the work twice.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Classify bounded implementation, debugging, review, and supplied-source synthesis separately, then run each with a compact prompt, narrow tools, and task-appropriate reasoning while reserving TEAM for ambiguous, external, parallel, or review-sensitive work.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rebuild the shipped Web and TUI artifacts so the release identity includes both the upstream campaign corrections and the task-shaped local worker routes.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
One campaign evaluated ImageNet-C on 16 examples per slice, called the
tranche "decisive", and abandoned its own idea. Its results table spans
about one standard error from best method to worst, and the paper
contains no error bar, confidence interval or significance test
anywhere. The gap it reported as a refutation was 0.73 standard errors.
Policy said to treat a shortfall as a debugging signal but never asked
whether the run could resolve the thing being claimed, so an
underpowered experiment reads exactly like a refuted idea.
Ask for the spread of the campaign's own repeated measurements beside
the margin it declared at selection. No threshold is named: the bar is
the one the campaign already set, and the comparison is the reading
Agent's to make.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
A delivered paper made the reader work out which row was the method and
which column it lost. Tables now have to name the method as ours, mark
the winning number, and say in the caption what the table shows -- a
result the campaign spent its whole budget earning should not need
reconstructing.
The rest of this is one test. The paper-quality fixes only work
together: a campaign declares what would count, is shown that promise
while it works, treats a miss as a repair rather than a refutation,
cannot retire an idea on a run too coarse to see it, can only be closed
by the Manager, must say at submission whether the result stands, is
measured against papers that were actually accepted, and finally has to
present the answer so a reader sees it. Break any one link and the chain
leaks back to shipping a null result dressed as a finding, so pin all
nine in one place where a future edit trips over them.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
One campaign reported 30/500 = 6.0% pass@1 on MATH-500 for a model whose
published score is around 80%, and wrote it up as a boundary finding
with confidence intervals and mechanism diagnostics. Its own evidence
file shows why: essentially every inspected rollout reports
generated_tokens exactly at the cap, so generation was cut off before
the model could answer. Its trained variants also failed to beat the
untrained baseline, which is a pipeline that does nothing rather than a
result. The checklist asked it to reproduce a competitive baseline, and
it did -- its own broken one.
Ask for the published number for this model and benchmark beside yours,
and for the rate at which generation hits its own limits. A run cut off
before it can answer scores exactly like a method that cannot.
Two delivered papers are titled "A Boundary Study" and "on a Substituted
Public AxBench Layer-20 Model": a genre label and an apology, both in
the place the finding belongs. A boundary paper stays legitimate when
the boundary is what someone wants to know, but the title has to name
what was found, and a claim narrowed past the evidence throws away the
result rather than protecting it.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Draining a daemon and SIGTERMing one both quiesce continuous mode so the
current mission can finish, and both write a done_reason saying an
operator stopped the process. Only the drain string was re-armed by
--resume-continuous, because the two literals lived in different modules
and drifted. SIGTERM is how a daemon is restarted onto new code, so
every restart silently ended the campaign: the daemon came back, drained
its backlog and went quiet forever while still reporting healthy. Two
campaigns sat like that for a day, one of them for 22 hours, looking
alive with nothing running.
Give the two reasons one definition beside each other and let the resume
check accept the set. Reasons that describe the work rather than the
process -- a planner-declared completion, an operator hold -- stay
authoritative and are still never resumed.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Selection tells a campaign to buy the cheapest faithful run that
measures its declared gap. Three campaigns read that as fewest examples
and shipped it: 73/120 against 70/120 called a win over the strongest
baseline, a 48-example scale-up where one example moves accuracy by
0.021, and a 3600-image ImageNet-C tranche called decisive at 0.73
standard errors. "Faithful" was supposed to carry this and did not.
Cheapest means no redundant condition, never too few examples to see the
margin just declared. The bar stays the campaign's own margin against
the spread of its own repeats rather than a fixed sample size, and when
that does not fit the budget it is the margin or the budget that
changes, not the honesty of the comparison.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Route coupled deliverables as one direct package, keep Reviewer invocation in the Host instead of the DAG, and reuse the existing mission packet so Engineer and Reviewer prompts stop restating project-wide policy. Preserve post-task learning and independent self-maintenance accounting.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rebuild the shipped Web and TUI artifacts so the release identity includes both the upstream research corrections and the compact TEAM handoff protocol.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Background experiments write stdout to a file, so CPython block-buffers
it and nothing appears until 8KB accumulates or the process exits. A
campaign held four GPUs at 99.9% CPU for five hours behind a 0-byte
stdout.log: indistinguishable from a hang, no way to tell item 5 from
item 5000, and a crash would have taken the whole run with no record of
how far it had got. The agent that launched it was blocked waiting, so
it could not be reached either.
Unbuffer the child. The setting goes in the shared child environment
ahead of the quiet-logs early return, because how loud a child is and
whether anything reaches its log while it lives are different questions.
The LLM-monitored path was building its own environment and had already
drifted from the shared one, so it now uses the same builder rather than
growing a third copy of the same three lines.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Daemons are configured for two concurrent missions and every campaign
has been running one. In one campaign rounds 1-3 spent about eighteen
hours parked on external GPU work with nothing pending behind them:
waiting does not consume the round budget, so the entire cost was
wall-clock, which is most of what a paper costs.
Tell the planner to queue the work that does not depend on the pending
result -- the baseline to reproduce, the analysis to write against the
agreed schema, the section the paper already owes -- beside a mission
that is going to sit for hours. This spends capacity the daemon already
has rather than adding any.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Treat independent review as Host policy rather than an execution phase, and keep direct research packages at task-appropriate reasoning unless the operator explicitly requests xhigh.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rebuild the shipped Web and TUI artifacts so the release identity includes the upstream runtime changes and stable direct TEAM routing.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
River Li (lbx154)and others added 28 commits August 22, 2026 09:41
Normalize an observed structured Planner response that used a string for one non-goal instead of splitting it into per-character constraints.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Preserve the new long-job scheduling and launch-verdict rules while removing repeated wording from the fixed Planner contract.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This is the hard half of the bottleneck. A wait contract does not merely
drop status-probe tasks, it skips the Planner entirely until the watched
revision moves or the contract expires. On a multi-hour GPU job that is
hours of never being asked anything, and campaigns run fewer missions
than they have slots, so every other slot stays empty for exactly as
long. One campaign spent eighteen hours across three rounds that way
with an empty backlog behind it; waiting costs no rounds, so all of it
was wall-clock.
The Planner was asked once, when the contract was created, and that is
the turn where it proposed only a status probe. Being told afterwards
that independent work is still schedulable therefore arrived with no
turn left to act on. Grant exactly one more turn per contract, and only
while nothing is queued behind the wait. One turn, not one per cycle:
waking it every cycle is the poll the skip exists to prevent. The grant
is recorded against the blocker rather than the contract object, because
the suppression path rebuilds that object every cycle and would
otherwise reissue the turn forever.
Whether there is independent work worth starting stays the Planner's
call. It just could not make it while it was being skipped.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Consume Planner and Manager process-decision payloads directly, preserve list item boundaries, and keep prose/key-value parsing only as an explicit compatibility path. Reject unmarked nested tool JSON as role authority.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The supervisor asks the Planner for work only when the backlog is empty.
A campaign with one long mission therefore never gets a second, because
the backlog is never empty while that mission runs -- so mission_width=2
buys nothing and every campaign has been running one mission. One is on
its sixth hour of GPU work with an empty queue behind it and 100% of its
last hour spent in 120-second waits.
Give the Planner one chance per set of running missions to fill the
spare slot, and only when nothing is already queued and nothing is
waiting on an operator. Asking every tick would be a planning spin.
Whether independent work is worth starting stays the Planner's call;
this only stops the loop from concluding there is none without asking.
Any verdict that would end the campaign is ignored at this point, since
a mission is still in flight and that is not the moment to conclude
anything.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The previous change added parallel planning to a branch the primary
supervisor never reaches: it is inside tick() running the long mission
for hours. The loop that does reach it is the parallel worker -- which
is deliberately constructed with continuous=False and an empty objective
so it cannot drive the campaign. Gating on the supervisor's own config
therefore returned immediately in the only place it mattered, and five
of seven campaigns went a full restart without a single planner call.
Read the campaign's durable objective instead. It is the same objective
either way, a disabled campaign is still skipped, and nothing on this
path can end anything.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Nothing outside the harness ever constrained a campaign, at either end.
Sizing: the planner was told to buy "the cheapest faithful run that measures
the gap". Three campaigns read that as fewest examples and filed wins of three
examples on 120 and one on 48. Naming the evidence run after its cost was the
invitation. It is now named after the reader it has to convince -- the field's
standard split at the field's standard size, repeats enough to put the margin
outside their own spread, and the baselines a referee would ask for unprompted.
A run that will not fit at once is staged and bought in pieces; it is never
shrunk into a run nobody can believe. Cheapness still belongs to the
sub-ten-minute feasibility probes, which is the only place it was ever meant.
Reviewing: three campaigns ran 321 reviews and never once returned `incorrect`.
One of them certified 6% on a benchmark where the model publishes ~80%, because
the Reviewer was asked only relative questions -- not all zeros, not trivially
weak -- and 6% passes both. It now has to write the published number for this
model on this benchmark beside its own before trusting anything built on it,
and report the rate at which generation hit its own limits. A baseline far
under its published score, and a headline margin narrower than the run's own
spread, are hard blockers rather than low scores.
And the re-review boundary, which forbade reopening accepted findings, is what
made all ninety of those reviews agree. Acceptance settles effort, never truth:
a number the paper will stand on that nothing outside the harness has confirmed
can be reopened on any round.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The parallel worker is the only supervisor that can plan while a long mission
runs -- the primary is inside tick() running it -- so it was taught to recover
the campaign's objective from durable state. It read `memory.root`, which is
the GLOBAL state directory. `continuous.json` lives in the project life-dir, so
every read returned the disabled default and the branch turned around at the
first line. run-07 sat through a six-hour mission emitting a wait every two
minutes and not one planner call; run-04 managed one in seventy-three waits.
Two more things had to be true for the slot to actually fill. The Planner cycle
reads the objective off `config`, so recovering it into a local dropped it one
step later; it is now adopted onto the config it is read from. And the helper
was built without a planner runner, which the primary is given -- so the first
call that got through would have failed with `no planner runner wired`.
The test that covered this asserted on source text, which is how a path can
stay broken while looking tested. It now runs the branch against a real
continuous.json and checks that the campaign was planned for, that the same
running set is not planned twice, and that a stopped campaign is left alone.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Engineer was told not to spawn subagents. Next to a 24-tool-call ceiling and no
authority to re-plan, that left every wide job -- the literature sweep, the
artifact scan, the long run -- with nowhere to go but its own context, which is
exactly the growth the ceiling exists to prevent. A subagent is now how that
ceiling is respected: delegate the wide work and take back the answer, not the
transcript. Planner owns the campaign plan, and Engineer is told so, because a
round that re-derives the plan pays for it again every time.
Planner is asked for the other half: write the task so it can be started
without re-reading the campaign. A task whose objective omits the decision, the
inputs and the check makes Engineer reconstruct the plan before it can begin.
And a published number is only a target if you reproduce the protocol that
produced it. One campaign compared its CoT-prompted score against a
tool-integrated published result and read the gap as its own failure. Name the
prompt format, tool access, decoding and generation budget, and say where you
deviated. The generation budget is not a number anyone picks either -- read it
off the length distribution of the model's own completions, so it is what lets
the model finish rather than what happens to fit.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Both resolvers refuse an item whose `pending_question` is empty, so an operator
card left `pending` after its mission ended can never be answered — the cockpit
just keeps offering it. One has been sitting that way on a failed run-07
mission, asking permission to create a virtualenv for work that stopped a day
ago.
A question dies with the mission that asked it. `Backlog.update` already owns
the status-transition invariants, so that is where an unanswered card is
expired when its item goes terminal — as a revision, so a stale answer racing
the transition cannot resurrect it. Answering still resolves; only the
unanswerable expire.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This reverts commit aed4f362d3797c8856cfc766112e8c4b6eae69ec.
Preserve the latest role-boundary guidance while merging overlapping Planner rules so the established hard prompt budgets still pass.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Half of every failed mission across seven campaigns ended on a stall counter,
and each of those reasons described only the refusal: "Reviewer reported no
forward progress for 4 consecutive rounds." Nothing in it says what stalled.
run-01 read it as a verdict on the work. It had just built the ImageNet-C
benchmark that could finally exercise its gate and queued the claim-bearing run
against it, with a 778-character objective. That run hit the counter, and the
next thing the Planner queued was "Does pruning beat 4-bit at equal latency?" --
a different field from the campaign's own objective -- with a 25-character
objective and a one-word reason. The paper's central experiment was replaced by
a question nobody had asked.
A stall measures the approach, not the question. All three counters now say so
and point at the next move: name what these rounds kept failing to move, then
take a different route to the same question.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
An external-work wait wakes every two minutes and emits the same two lines each
time. Eighteen hours of it across five rounds looks exactly like two minutes of
it: five hundred "resumed after 120s" lines, none of which says how long this
has been happening. The cost of the longest thing a campaign does was only
visible by counting events.
The loop already accumulates the total; it just never reached the event. Each
tick now carries `waited_total_s` and says it in words, so a wait that has cost
six hours reads as six hours the first time anyone looks.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Run the Manager audit in read-only safe mode for release installs, meter it under its own mission id, and persist repair/adoption recommendations as release-update requests without attempting source mutation.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
run-06 finished a decisive run -- 750 rows, paired delta -0.357, four
resampling schemes, validity rate 1.0 -- and titled it "A Frozen
Environment-Invariant Causal Subspace Does Not Beat Prompt Steering on
AxBench". It only ever ran the frozen variant. The abstract asks whether
model-internal causal subspaces can replace prompt steering; the evidence
cannot say, because nobody unfroze anything. A reader cannot tell whether the
idea failed or only the restriction did, and that is the difference between a
result and an anecdote.
A qualifier is a claim: a title that says frozen, layer-20 or substituted
promises the paper shows the unfrozen, other-layer or real-model case behaving
differently. Show it or drop the word. And a negative sign earns a venue by
naming the belief it kills, in the abstract, not by being honest about itself.
The same paper printed 0.6946666666666667 and -0.35733333333333334. Numbers get
rounded to what the evidence supports; full float precision reads as a paper
nobody proofread.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Seven campaigns are told to produce ICLR 2027 submissions. The venue registry
held EMNLP, AAAI and a Frontiers journal. run-06 reached the paper
infrastructure review, found no ICLR profile, and stopped to ask the operator
what to do — which was the right thing to do and the reason this was ever
noticed, because the wrong answer was available and silent: an EMNLP profile
would have imposed a two-column eight-page layout on an ICLR submission with
nothing reporting a mismatch.
The profile is taken from the template already on disk in every campaign's
paper directory rather than from memory: single-column article, nine pages of
main text with references and appendix uncounted, `iclr2027_conference` style
and bibliography, and anonymity as the default state rather than a package
option, because the style file ships `\iclrfinalfalse` and the template leaves
`\iclrfinalcopy` commented out.
No aliases. NeurIPS and ICML have their own page limits and style files, and
quietly handing one of them the ICLR template is the failure this registry
exists to prevent.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Seven missions across six campaigns died on the stall counter in ninety
minutes. Every one of them was waiting on a healthy job it had started itself,
including "Does the repaired Qwen CoT harness reproduce MATH-500?" -- the base
gate the entire run-03 paper rests on, and the mission that was finally going
to establish whether that campaign's 6% was ever a real measurement.
The mechanism is circular. While the compute has not finished there is nothing
new for the Reviewer to see, so it returns `continue` with
`forward_progress=false`, correctly. Four of those in a row and the harness
retires the mission -- for doing exactly what it was told to do. The explicit
wait path avoids this, but it only fires when the Engineer emits a wait request
on its final line; an Engineer that simply reports "the run is still going"
walks into the counter instead.
Waiting is not stalling. A round taken while the registry shows healthy running
work does not advance the streak. Work that is stalled, needs attention or has
gone terminal still counts, so a dead job cannot buy unlimited rounds, and the
round budget, the daily budget and the idle exit are all untouched.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
One draft carried thirteen of them: 521 of 750 concept hits appeared as
0.6946666666666667 and the paired delta as -0.35733333333333334. A checklist
line asking for rounded numbers had already been written and the draft still
shipped them, because prose competes for attention with everything else in the
prompt while a structural check simply arrives.
Python's float repr runs to seventeen significant digits and no measurement
carries that, so a decimal that long is a value that was printed rather than
reported. The draft/review/submission structural pass now says how many there
are and shows one. It does not rewrite anything and does not decide what the
right precision is -- that depends on the evidence, and the author is the one
who knows it.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Require safe isolated live acceptance for runnable UI, API, CLI, and service changes while keeping library checks minimal and preserving the cross-platform prompt budget.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep acceptance judgment agent-native, but prevent supported real backends from returning done without any independently observed tool activity. Backends without reliable telemetry remain compatible.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@lbx154
River Li (lbx154) merged commit 455da6c into mainAug 22, 2026
1 check passed
@lbx154
River Li (lbx154) deleted the sync/public-20260822 branch August 22, 2026 16:41
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@lbx154