Uh oh!
There was an error while loading. Please reload this page.
Synchronize latest Public updates - #19
Merged
Merged
Conversation
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>
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>
Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Direct synchronization of the latest Public commits without additional modifications.