Skip to content

MOTO v1.1.08 enhancements - #63

Merged
Intrafere merged 21 commits into
mainfrom
dev/moto-v1.1.08
Oct 16, 2026
Merged

Intrafere merged 21 commits into
mainfrom
dev/moto-v1.1.08

Conversation

@Intrafere

Copy link
Copy Markdown
Owner

MOTO v1.1.08: Kimi Code, Mathlib recovery, and CI fixes

Bug fixes

Lean / Mathlib

  • Mathlib setup never recovered after an interrupted update (for example
    when the disk filled up): every retry and restart failed with "would be
    overwritten by checkout". Setup now resets half-written package
    checkouts to their recorded commit (wiping .lake if that fails), and
    the same repair runs on the mid-run retry, so no restart is needed.
  • Every backend start ran lake update, moving Mathlib to the newest
    version and downloading a new cache each time. Mathlib is now installed
    once and kept at its recorded version.
  • Old Mathlib downloads were never deleted. Downloads now go to a
    MOTO-owned .moto_mathlib_cache, and archives the installed version does
    not use are pruned after each setup. The shared ~/.cache/mathlib is
    left alone because other Lean projects may use it.
  • An import of a renamed or removed Mathlib module was treated as a
    broken workspace, so MOTO wiped Mathlib and stopped the run for repair.
    It is now proof feedback for the model.
  • Wiping .lake blocked the backend event loop; it now runs off-thread.

Proof workflows

  • A reply cut off at the output-token limit had its unfinished thinking
    used as the answer (in retries and Supercharge). It is now treated as
    empty.
  • One very long Lean diagnostic could overflow proof prompts. Each
    attempt's Lean output (30k chars) and goal states (10k) are now bounded
    in prompts; stored feedback keeps everything.
  • One candidate that overflowed the context stopped the whole round or
    Autonomous run, and ended manual pruning loops. That candidate is now
    set aside as a failed open target while the others continue; only a
    round where no candidate can reach the model stops.
  • Manual checks of Autonomous sources were treated as the Autonomous
    workflow for that stop. They no longer are.
  • Saved Lean timeouts of 600/900 s and an SMT timeout of 30 s were reset
    to defaults on every load. Proof settings are now versioned, so chosen
    values are kept.

Providers and settings

  • Sakana Fugu and xAI model-load errors were never shown in the settings
    panels; every panel now shows a banner per provider.
  • The Sakana reasoning-effort control kept unsupported values and stayed
    editable during a run in Aggregator/Compiler. It is now normalized per
    provider and locked while running.
  • The OpenRouter/OAuth modal offered and polled providers the backend
    reported unavailable. It no longer does.
  • The startup add-on card ignored Sakana. It is now also hidden in hosted
    mode.
  • A failed provider status check kept the old "configured" state with
    the wrong message.
  • Provider notifications fell back to "OAuth provider" instead of the
    provider's name.
  • The legacy SAKANA_API_KEY / FUGU_API_KEY variables overrode
    MOTO_SAKANA_FUGU_API_KEY. The MOTO_ variable now wins.
  • A keyring failure while saving an API key escaped the route unhandled.
    It now returns a clean error and keeps the previous key.
  • One malformed entry broke the whole Sakana model list, and models MOTO
    did not already know had no context/output limits.
  • The xAI Grok client was not closed at backend shutdown.

CI

  • The SyntheticLib release-evidence workflow failed on every main push
    since v1.1.08: it installs only pytest, and tests/conftest.py imported
    pydantic at startup. It also ran only after merging, so the failure was
    first seen on main. The conftest guards now stand down when MOTO's
    dependencies are missing, the workflow also runs on pull requests and
    dev/** pushes, a test fails if any workflow loses those triggers, and
    npm run test:github runs these tests with only pytest installed.
  • The frontend npm audit failed whenever npm's advisory service did not
    answer, because npm exits 1 for that just as for a vulnerability. The
    audit now retries only a failed advisory request, and still fails at
    once on high/critical findings or any other npm error.
  • The README said the launcher runs npm audit fix. It runs a read-only
    audit and warns.

New

  • Kimi Code subscription provider: membership API key, region detected
    on save, low/high/max reasoning, usage windows and a quota display.
  • Cloud providers are driven by one registry (backend metadata mirrored
    in the frontend). Sakana Fugu moves onto the shared API-key client,
    and "max" reasoning is allowed for any provider that supports it.
  • API keys are scrubbed from provider error text, and requests send a
    MOTO-Autonomous-ASI User-Agent.
  • npm run test:codeql and npm run test:github run every GitHub check
    locally; a CI job fails dev pushes that add CodeQL alerts main lacks.
  • API contract build6-v122: /api/features adds kimi_code_available
    and subscription_providers, plus the subscription_provider_error event.

Pat and others added 21 commits September 3, 2026 17:58
## Changes

- Increased automatic brainstorm proof checks from one to two rounds when Mathematical Proofs and Paper Writing are both enabled. Proofs-only checks remain capped at four rounds, and completed-paper checks remain single-round.

## Bug Fixes

- Fixed mandatory proof discovery, proof solver, and Validator context overflows failing to stop continuous proof loops. Autonomous runs now cancel sibling work, preserve a recoverable checkpoint, and show a route-specific model-context notification; repaired role settings resume without stale overflow state.

  Authored by Patrick White, Patrick@Intrafere.com
Signed-off-by: Intrafere Research Group <208883623+Intrafere@users.noreply.github.com>
Signed-off-by: Pat <pat@local>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Pin *.sha256 to LF so Windows checkouts keep the detached receipt digest byte-exact.
- Regenerate the preflight attestation and bundle manifest from LF verifier source.
- Classify the Codex websocket event-loop stall monitor as a non-retry wait.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Translate unavailable OS keyring errors into InstallationIdentityError so
  proof storage degrades to unqualified records instead of failing outright.
- Isolate tests from the real installation-global keyring entry with a
  per-test in-memory identity store; add keyring-unavailable regressions.
- Make the launcher Git reprobe test platform-independent.
- Install frontend dependencies in the Python CI job for Vitest selector evidence.
- Move RELEASE_ROOT out of job-level env (runner context is not allowed there),
  which made GitHub reject the release-evidence workflow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Relocate the credential-free compatibility evidence to
  syntheticlib-trade/compatibility/ and keep PLANS/ fully private.
- Allowlist only the approved evidence members at the new location and
  guard against re-allowlisting anything under PLANS/.
- Point the verifier, both workflows, tests, and rules at the new path;
  regenerate the verifier-hash-bound evidence members.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Make novelty the only admission gate across proof discovery, follow-up
  proof rounds, failed-proof hints, proof framing, novelty ranking, rigor
  discovery, the brainstorm submitter and Validators (including Lean-verified
  rules and the cleanup keep list), topic selection/validation/exploration,
  completion review, and paper continuation. Whole-question attacks stay
  first in priority; genuinely novel incremental or indirect progress toward
  the user prompt is now accepted, while known, routine, trivial, redundant,
  and no-path results stay rejected. Rules updated; guard tests added.
- Number published proof-run activity in a bounded process-local journal and
  add GET /api/proofs/runs/{proof_run_id}/activity so reloaded or resumed
  tabs replay missed Live Activity once without driving run state
  (api_contract_version build6-v120).
- Seal compile receipts over their JSON serialization; receipts sealed by
  v1.1.08 over raw datetimes are accepted and re-sealed on store instead of
  failing as invalid.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
App-level proof-run activity recovery (e2571d7) lists runs via
GET /api/proofs/runs on every WebSocket connect. The Playwright fake
backend did not mock that route, so six smoke specs failed their
no-unexpected-requests assertion in CI. Return an empty
ProofRunCollectionResponse-shaped collection.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Formalization, tactic-script, Lean placeholder, and brainstorm proof-gate
repair wording now refer to the selected target instead of a
"high-impact target", and ask for the precise formal reading that best
preserves the source claim rather than permitting a narrowed lemma. The
Aggregator Lean route prefers the highest-impact theorem the submitter
can completely prove, and relevance rationales say "plausibly helps".
Adds a regression test that formalization prompts carry no contradictory
narrowing guidance.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Failed proof targets are no longer re-run unchanged in a separate retry
pass after each completed paper. Discovery now sees unresolved targets
(the brainstorm's own, or a completed paper's source brainstorms') as
open targets and may link a materially different retry through a
validated retry_open_target_id, which resolves or updates the original
FailedProofCandidate. Discovery and rigor prompts weigh direct solutions
against the 5-attempt Lean budget and fall back to the strongest
provable novel piece.

Also raises the default Lean proof timeout to 2000s (migrating the old
600/900 shipped defaults), and adds a Codex >15-minute known-issue
warning with a safe external link to the 1.1.08 release notes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A broken or unusable Lean/Mathlib workspace is now a typed repair stop
(LeanWorkspaceRepairRequiredError) rather than proof feedback, a failed
open target, or a spent attempt. Autonomous, Aggregator, Compiler,
LeanOJ, and manual proof checks stop with a durable
lean_workspace_repair_required message and keep their checkpoint;
Autonomous saves the round as resumable lean_workspace_blocked. Lean-bound
model calls are skipped when setup is known failed, and each proof
round, rigor cycle, and final-solver attempt gives a failed setup one
fresh retry first. Stored workspace failures from older builds are
filtered out of attempt history, failure hints, and Live Activity.

On Windows, when <data root>/lean4_workspace is too long for Mathlib's
build files, the workspace moves to a per-data-root folder under
%LOCALAPPDATA%\MOTO\lean and the launcher removes the unusable in-root
MOTO workspace. If no short location exists, the launcher disables Lean
with lean_workspace_path_too_long and the path problem is latched before
any lake work.

Bumps api_contract_version to build6-v121 for the new WebSocket event.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A later status write could reopen a run whose terminal event was already
published (for example a repair-required stop followed by a stray
"stopping" update), so the source looked busy again. The run manager now
ignores status changes once a run is terminal, the frontend merge keeps a
terminal snapshot over a stale same-generation one, and the repair
guidance also shows when the backend ends a repair run as status "error".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- py/weak-sensitive-data-hashing (high): the OpenRouter validation state
  was keyed by a SHA-256 of the API key. It now keeps the validated key in
  memory, like rag_config already does, and compares with
  hmac.compare_digest, so no credential is hashed.
- js/prototype-polluting-assignment (medium) and
  js/remote-property-injection (high, extended suite): the proof-run
  activity tracker stored cursors in a plain object keyed by run ID, so a
  run ID of "__proto__" wrote onto Object.prototype. It now uses a Map and
  persists the same JSON shape.

Verified with CodeQL 2.27.2 locally (actions, python,
javascript-typescript; default and security-extended suites): no alerts
beyond those already on main.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Subscription providers
- Cloud providers are now registry-driven: subscription_providers/metadata.py
  lists every provider and derives validation, route labels, locks, and
  status sets; the frontend oauthProviders.js mirrors it (parity tested).
- Sakana Fugu moves onto a shared SubscriptionApiKeyClient, and Kimi Code
  (membership API key, region detected on save, low|high|max effort,
  /usages quota reset for 403 usage windows) is added on the same client.
  Every registered adapter runs the subscription conformance suite.
- Settings panels, the OpenRouter/OAuth modal, and reasoning controls
  render from the registry.

Lean/Mathlib setup recovery
- A git checkout cut short (for example by a full disk) left Mathlib's
  package half-updated, so every later setup failed the same way until
  .lake was deleted by hand. Setup now resets interrupted package
  checkouts to their recorded commit (wiping .lake if that fails), and
  that error output also counts as stale Lake state. Because this runs
  inside setup, the per-round retry and Start recover without a restart.
- Mathlib is installed once and kept at its recorded version instead of
  running `lake update` (newest master) on every backend start.
- Downloads go to a MOTO-owned .moto_mathlib_cache (an operator
  MATHLIB_CACHE_DIR wins) and `lake exe cache clean` prunes archives the
  installed version no longer uses. The shared ~/.cache/mathlib older
  builds filled is only pointed out in the log, since other Lean
  projects may use it.
- A missing .olean for a renamed or removed module is proof feedback,
  not a workspace repair.

Proofs and completions
- Each attempt's Lean output and goal states are bounded in prompts
  (durable feedback keeps everything), so one huge diagnostic cannot
  overflow the context window.
- A candidate whose formalization overflows the context is set aside
  while siblings and later rounds continue; only a round where nothing
  can reach the model stops.
- A reply cut off at the output-token limit before any answer is treated
  as empty instead of replaying its unfinished thinking.
- Proof runtime settings are versioned so unchanged defaults follow new
  shipped defaults.

Tooling
- `npm run test:codeql` runs GitHub's CodeQL analyses locally and fails
  on alerts origin/main lacks; `npm run test:github` runs every ci.yml
  check, release evidence, and CodeQL before a push.

Bumps api_contract_version to build6-v122.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The SyntheticLib release-evidence workflow ran only on pushes to main and
installs only pytest. tests/conftest.py (added in v1.1.08) imports MOTO's
config, which needs pydantic, so the workflow failed at startup and the
break first showed up after a merge.

- conftest guards that need MOTO runtime modules stand down when those
  modules' dependencies are not installed; a missing backend module
  still fails.
- The policy-version cross-check test, which imports pydantic-backed
  models, skips without pydantic; the full CI job still runs it.
- The release workflow also runs on pull requests and dev/** pushes;
  only main uploads the release evidence.
- A test fails if any workflow stops running on pull requests and dev
  pushes.
- `npm run test:github` runs the release workflow's focused tests with
  every package except pytest and its dependencies hidden, reproducing
  the runner's environment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CI's frontend audit step failed in about a second on 2f5d689. The same
audit finds 0 vulnerabilities against the committed lockfile, and no high
or critical npm advisory from the past month matches it. `npm audit`
exits 1 both for findings and when the registry's advisory request fails,
so a registry error fails the build like a vulnerability.

scripts/run_npm_audit.py tells npm's three --json outcomes apart:
- a finished audit (metadata.vulnerabilities): pass on exit 0, otherwise
  fail at once and list the high/critical packages;
- a failed advisory request (top-level message, per npm's
  audit-error.js): retry with 15s/45s backoff, fail if all 3 attempts fail;
- any other npm error (for example ENOLOCK): fail at once with npm's code
  and summary.
It decodes npm's output as UTF-8 (Windows' cp1252 default broke on
advisory text such as curly quotes) and passes --offline=false so an
offline npm config cannot skip the request and report a clean audit.

CI's frontend job and `npm run test:github` both run it. Also corrects
the README, which said the launcher runs `npm audit fix`; it runs a
read-only audit and warns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Intrafere
Intrafere merged commit f13d953 into main Oct 16, 2026
14 checks passed
@Intrafere
Intrafere deleted the dev/moto-v1.1.08 branch October 16, 2026 00:12
Sign up for free to 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