Repository navigation
Hyperloom v1.1.3
Hyperloom v1.1.3
This is a patch release on top of 1.1.2. It adds targeted, repository-wide KernelForge fusion discovery, makes ATOM installable on bare metal, tightens AgentX grading, and hardens GPU ownership, phase transitions, recovery and reporting.
Most 1.1.2 sessions resume on this build. A pre-1.1.3 AgentX session does not carry the median-interactivity anchor this release requires and should not be resumed. The command line, environment contract and several Python and report fields also move; see Breaking changes before upgrading.
The full per-change history lives in docs/release-notes.md.
Highlights
1. KernelForge fusion gains targeted, repository-wide discovery
forge-fuse --fuse-kernel anchors a fusion on an exact traced kernel and derives its neighbours from the trace; --repo-scope lets discovery and authoring inspect the whole framework repository when the chain is not in the resolved model file (#1678). Discovery avoids folding work into a tuned library GEMM's epilogue, validates harness alignment, and checks that a keeper reduces launch count. DeepSeek-V4 harnesses also derive the output groups from o_groups, with --attn-tp recording the attention shard independently of serving TP (#1709).
2. ATOM becomes a first-class setup and optimization target
Bare-metal setup accepts --install-framework atom, installs AITER and ATOM from source, and refuses environments where ATOM would interfere with SGLang or vLLM plugins (#1694). The shared 12-hour demos now cover ATOM in Docker and bare-metal modes. User-selected execution and kernel integration are preserved (#1615), and an unset KERNEL_OPT_BACKEND_ORDER resolves to GEAK for ATOM as it does for every other framework (#1693).
3. AgentX grading uses median interactivity with explicit guards
An AgentX KEEP now requires a 3% gain on e2e_norm_intvty_p50, while P90 interactivity, output throughput, measurement-window duration and request errors must hold (#1652). SBD V6 publishes and renders the objective, guards, comparability inputs and submission validity, so the report shows the axes on which the verdict was actually taken (#1687).
4. GPU ownership and phase transitions fail closed
KERNEL_AGENT work holds a GPU lane until its physical execution settles, and phase transitions wait for a GPU barrier (#1654). Ended holders are reclaimed, Ray waits are bounded without making a still-owned device available, and shutdown no longer waits on its own caller (#1595, #1682). Stack validation stops when it cannot undo its patches instead of continuing from an unknown tree (#1677).
5. Workflow evidence becomes replayable
Fresh sessions publish a versioned workflow-evaluation contract with replayable transition inputs, dispatch provenance and separate process and business outcomes (#1666, #1688). A per-process trajectory ledger records LLM requests, tool events and lifecycle transitions and projects them onto Langfuse spans (#1697). AIPerf KV-cache telemetry is recovered from the endpoint that actually serves it (#1698).
6. AgentX and KernelForge use the remote knowledge store consistently
AgentX gains its own remote Recipe identity, selection metric, evidence and warm-replay path (#1597). Experience rows are stored in the shape their producer writes (#1561), while KernelForge remote experience storage converges on KB Store and refuses the GBrain configuration that previously ran as a silent no-op (#1614).
7. Measurement and publication stop inventing success
Graph-capture fallbacks that changed the measured workload are removed (#1609). Fusion, GEMM tuning and the critic now report unavailable checks, missing measurements and outages as such rather than as PASS, 1.00x or ACCEPT (#1628, #1629, #1635, #1636, #1639). A failed JIT rebuild stops the loop instead of benchmarking a stale binary (#1634), and CLOSE refuses to publish a stack that changed after validation (#1613).
Breaking changes
An operator upgrading from 1.1.2 has to plan for these:
- The manual
fa/framework-agentcommands are removed, together with their JSON request format andgbrain_pr_kbsearch mode (#1655).GBRAIN_BASE_URLandGBRAIN_TOKENno longer configure any Hyperloom path. An unqualifiedintegrate_patchnow defaults to SGLang instead of vLLM. - KernelForge remote experience storage requires
KB_STORE_URLandKB_STORE_TOKEN(#1614). GBrain-only remote mode now fails at startup instead of completing with every read and write skipped. The unused GBrainConfig/KnowledgeConfigfields,remote_backendselector andREMOTE_BACKEND_*constants are removed from the KernelForge Python API. - Malformed boolean, integer and float environment values now raise
EnvValueErrorinstead of taking the default (#1624). Unset values still take the default; the accepted value vocabulary is unchanged. A blankINFERENCE_OPTIMIZER_ALLOW_CUSTOM_ORCH_MODELnow means disabled. - Do not resume a pre-1.1.3 AgentX session (#1652). Its
current_besthas no P50 interactivity anchor, so every later comparison fails withcurrent_best_axes_missing. No migration is provided. Other 1.1.2 sessions remain resumable. - ATOM now defaults to GEAK, not KernelForge, when
KERNEL_OPT_BACKEND_ORDERis unset or empty (#1693). SetKERNEL_OPT_BACKEND_ORDER=forgeto keep the previous behavior. - The critic must answer during startup (#1697).
--critic-protocol autofollows the orchestration backend and model; use an explicit protocol only when the critic should run on the other configured side.
Python and report consumers also need these updates:
RemoteWriteResult.optimized_throughputis replaced byprimary_metricandprimary_value(#1597).reports/optimization_journal.json.baseline_throughputisnull, not fabricated0.0, when no baseline was anchored (#1651).- GEMM
improved_shapes,best_micro_speedupandavg_micro_speeduparenullwhen unmeasured; the average covers every measured shape (#1629). VariantResult.to_dict()no longer emits the unusedfingerprintfield (#1642).- A critic outage records
NOT_REVIEWED, notACCEPT(#1639).
The SBD V6 additions from #1666, #1687 and #1688 are backward-compatible: old records load as legacy, and no existing field is renamed.
What's included
KernelForge, fusion, tuning and profiling
- fix(profile): find the steady-state trace the injected profiler dir redirected - #1573
- forge: keep print and environment-variable logic out of the kernel it delivers - #1599
- fix(tracelens): let the Codex runner write the graph-capture folder - #1607
- Drop the silent graph-capture fallbacks that corrupted timing - #1609
- Reconcile forge-loop kernel integrations with roofline top15 kernel identity - #1610
- fix(kernelforge): run opportunity analysis on resumable Codex without global hooks - #1617
- fix(gpu): read the gfx arch from the board identity table - #1626
- fix(fusion): match a campaign's harness report by what it measured - #1628
- fix(gemm-tune): report an unmeasured micro metric as null, not 1.00x - #1629
- fix(forge-loop): read the published best through one validated loader - #1630
- Stop the MoE tuner from labelling a bf16 sweep as fp8 or int8 - #1632
- Read the fusion decode trace from state.last_profile_trace alone - #1633
- Let a failed JIT rebuild stop the loop instead of benchmarking a stale binary - #1634
- fix(gemm_tune): a tuner may not report a result it did not measure - #1635
- fix(fusion): a check that could not run is not a check that passed - #1636
- fix(gemm_tune): delete the MoE key derived from the model config - #1641
- [kernelforge] Improvements to kernel forge fusion - #1678
- Keep an explicit expert dtype out of the runtime weight rescale - #1680
- Update TraceLens SHA - #1681
- Fix/KernelForge fusion dsv4 o groups harness g - #1709
Orchestration, execution reliability and observability
- fix(orchestrator): decode emit_intent tool input delivered as a JSON string - #1545
- Reclaim resources from holders that ended, and bound the Ray round wait - #1595
- Make the ENABLEMENT self-repair loop deliver, and fail loudly when it cannot - #1604
- fix(orchestrator): fail closed at CLOSE when current_best changed after validation - #1613
- fix(env): make unreadable env values raise instead of taking the default - #1624
- fix(durable): fail publication when the tree walk cannot be completed - #1627
- Stop a rollback from deleting the source it was protecting - #1631
- Record a critic outage as NOT_REVIEWED, not as an ACCEPT - #1639
- fix(orchestrator): own a patch-mode specialist where its ownership is frozen - #1643
- [FIX] Route KERNEL_AGENT work through a lane-holding task and make phase transitions a GPU barrier - #1654
- Probe a framework's help text only when a flag needs it - #1663
- Validate a state field before it reaches SharedState - #1664
- Block a multi-node resume when the per-round launch env changed - #1676
- Halt a stack validation that cannot undo its own patches - #1677
- fix(loop): stop shutdown awaiting its own caller and rewrite close reports per resumed leg - #1682
- Add a per-process trajectory event ledger and project it onto Langfuse spans - #1697
- fix(kv-metrics): recover AIPerf KV telemetry - #1698
AgentX, knowledge stores, reporting and workflow evaluation
- fix(sbd): retain GEAK backend provenance on adoption - #1560
- fix(kb): store experience rows in the shape their producer writes - #1561
- feat(kb): integrate AgentX with remote recipe store - #1597
- Make the Forge remote experience store KB Store only - #1614
- Add golden-AL speculative-decoding reference, gated to AgentX runs - #1618
- fix(sbd): park spool failures on Recorder.record_* and keep CLOSE facts collector-owned - #1644
- fix(journal): report an unanchored baseline as absent, not as zero - #1651
- feat(agentx): grade the median interactivity with the slow tail and output as guards - #1652
- feat(workflow-eval): publish executable workflow evaluation contract - #1666
- Publish and render the axes an AgentX verdict is actually taken on - #1687
- fix(workflow-eval): accept patch recovery stop reason - #1688
Framework integration, setup and evaluation
- fix: read SGLang dictionary startup identity - #1558
- fix(atom): align user-selected execution and kernel integration - #1615
- fix(eval): pin lm_eval past the refused-connection crash and guard against InferenceX's reinstall - #1638
- fix(install): time-box the GPU probes in the torch compatibility gate - #1683
- Let ATOM use GEAK by default, like every other framework - #1693
- feat(setup): install ATOM on bare metal and fold it into the 12h demos; fix the failures of its 12h release run - #1694
Internal architecture, documentation and CI
- docs: do not launch Docker optimize with docker exec -d - #1557
- Drop unreachable Forge compatibility and fallback branches - #1608
- [Bad smell] refactor: collapse duplicated implementations onto single owners - #1611
- Document local HYPERLOOM_RUNTIME_DIR for Codex on NFS - #1616
- [Bad smell] Clean: Remove redundant exception handling and enforce the no-broad-except rule - #1620
- refactor(llm): one owner for the *_CUSTOM_HEADERS wire format - #1625
- ci(skills): grade the federated skill with the catalog's own harness - #1640
- [Bad smell] refactor: one interface each for variant fingerprints, roofline op shapes, PR-backport localization and the final report - #1642
- Drop the stale noqa that reds the lint job - #1645
- [Relocate] Break orchestrator <-> library import cycles by moving code to its owners - #1650
- [Relocate] Framework-agent: retire the fa CLI and give FrameworkPhase one owner - #1655
- [Bad smell] refactor(executors): extract BenchmarkRunExecutor so ProfileExecutor stops refusing baseline policy - #1656
- Remove internal exports nothing calls - #1661
- Let MessageBus and TaskRegistry answer for their own tables - #1662
- Delete the phase base class that adds nothing - #1665
- Read the backend args variable from the framework registry - #1673
- Build the covered-shape set once instead of per shape - #1674
- ci: run the review-pr skill on a /review PR comment - #1686
- ci(pr-review): make the review timeout a variable, defaulting to 120 min - #1691
- ci(pr-review): keep the prefix cache warm and show review progress - #1695
- ci(pr-review): tell Claude Code glm-5-3 has a 1M context window - #1699
- ci(pr-review): verify findings by running code, and trust only write-access comments - #1701
Release
- chore(release): cut 1.1.3 - #1738
Requirements
AMD Instinct MI300X, MI325X or MI355X; Ubuntu 24.04 recommended or Ubuntu 22.04 legacy; ROCm 7.2.x or 10.0; Python >= 3.10; Docker with AMD ROCm support, Kubernetes with AMD GPU nodes, or the supported bare-metal setup; Claude Code IDE with Remote SSH; an Anthropic API key or compatible Anthropic gateway, or an OpenAI-compatible gateway; tmux, jq, Node.js >= 18, and Claude CLI.
The validated images are unchanged from 1.1.2: lmsysorg/sglang-rocm:v0.5.20-rocm10-mi30x-20260920 and lmsysorg/sglang-rocm:v0.5.20-rocm10-mi35x-20260920 for SGLang, rocm/vllm:rocm10.0.0_ubuntu24.04_py3.14_pytorch_2.12.0_vllm_0.27.0 for vLLM, and rocm/atom-dev:v0.1.7-rc0 for ATOM on MI355X. Bare-metal ATOM installs from source into the selected ROCm torch environment and must not share that Python environment with SGLang or vLLM.
Validated component versions are listed in the compatibility matrix: TraceLens 1.0.0, GEAK 4.0.0, IntelliKit 0.1.1, AgentKernelArena 0.2.0, Magpie 0.2.0.
The wheel is published on PyPI:
pip install hyperloom-inference-optimizer==1.1.3 --target .Bare-metal installs read HYPERLOOM_WHEEL_TAG, which now defaults to v1.1.3, so this release must carry the rocm-profiler-hotfix-libs.tar.gz asset.
Stability
v1.1.3 is a patch release under semantic versioning. Most 1.1.2 sessions resume on this build; pre-1.1.3 AgentX sessions should not be resumed because their saved grading anchor has no P50 interactivity measurement. The breaking changes are confined to the retired manual framework-agent surface, KernelForge's remote-store Python API, strict environment parsing, the ATOM backend default, AgentX grading and the report fields listed above.