npm install -g huqan now serves 0.11.1. The previous release on this page was v0.10.0 — v0.10.1 and v0.11.0 were tagged but never reached the registry, so everything under those headings ships here for the first time.
Added
- fractal-learn (#1714). New
huqan.fractal-learnMCP tool running a bounded recursive knowledge-synthesis loop: it chainskernel.dreamrounds (hypothesis generation admitted through the mutation gate) and stops when the per-round entropy gain saturates (exhausted/saturated/maxRounds). Every write is receipted and the tool is gatedmutating_requires_review, so the graph never grows silently. - autoTune (#1716).
huqan.fractal-learngains a one-wayautoTunemode: after each round it reads review feedback and tightensminScore/entropyFloor, but never loosens them automatically. Tightening is recorded per round; loosening always requires human approval. - Graph health scoring and threshold tuning advice.
huqan fitnessscores graph health (coverage, precision, connectivity, consistency → A–F grade);huqan tuningturns review feedback into a threshold proposal — advice only, it never applies a change. - Graceful shutdown on SIGTERM/SIGINT (#1697).
server.jsstops accepting connections and drains the HTTP server before closing observability timers, viewer state, approval storage, external-client resources and the kernel graph. A five-second fail-safe exits non-zero if the drain does not finish, so a container stop no longer severs in-flight requests silently.
Fixed
- Mutation journal replay tracking (#1671). Journal sections are null-prototype maps. On a plain object
operations['__proto__'] = entryre-points the prototype instead of creating an own property, so a completed mutation left no record and the same operationId ran a second time;constructorandtoStringfailed the other way, reading an inherited value back as a journal row. Persisted records keep own-property semantics across a JSON round trip. - External client transport (#1672).
scripts/external-client.jsrequires HTTPS for any bearer-authenticated destination that is not loopback. It previously sentauthorization: Bearer <HUQAN_API_KEY>in the clear to whatever URL it was given. Plain HTTP survives only for127.0.0.0/8,[::1]andlocalhost, where the request never reaches a network interface, and the check runs before the credential is read. - Release authority (#1673).
publish.ymlchecks the ref for every trigger, not only for tag pushes. A manualworkflow_dispatchcould reachnpm publishfrom any ref, skipping the tag/version binding entirely. A publish now requires an immutablev<version>tag matching the manifest whose commit is an ancestor of the default branch, and the job runs in thenpm-publishenvironment. - Publishing from a release tag (#1745). The live Git guard in
scripts/agent-context.jsknew two shapes — sitting on the baseline branch, or working on a branch that already contains it.publish.ymlchecks out an immutablev<version>tag, which is deliberately behindorigin/mainby however many commits landed since the release, so the guard read a reviewed, merged commit as an unrebased feature branch and failed closed. A release checkout is now a third recognised state, admitted only on all three of: a detached HEAD, av*tag at that commit, and reachability fromorigin/main. A detached HEAD without a tag, and a tag outside canonical ancestry, both still fail closed.
Note on this artifact
This tarball was uploaded by hand rather than by the release workflow, so it carries no npm provenance attestation — it cannot be cryptographically traced back to this tag. The source it was built from is ffbe070, the commit this tag points at.
The publish pipeline has since been moved off stored npm tokens onto GitHub OIDC trusted publishing (#1690), which attests every upload automatically. Releases from the next tag onward will carry provenance.