Appearance
Status of 1.0.0-alpha
Furnace is in daily use and every page on this site describes behaviour that was run against the fleet, with dates. It is still an alpha because the list below is not empty. Nothing here is hidden from a run: a gap the tool knows about is reported as n/a, skip or a certification gap, never as a pass.
Proven, with dates
| What | Where | When |
|---|---|---|
Install by composer require from the staged working tree, full ladder without e2e: 8 packages, two upgrades, 3 cron jobs, 93 integration tests, production mode on both storefronts, clean teardown | m248, m2-faqs | 2026-10-25 |
The same from composer archive output (--source=archive) | m248 | 2026-10-25 |
A released version from the private registry (--release=1.0.0); the release's own integration tests ran and found two failures the checkout no longer has | m248, m2-faqs 1.0.0 | 2026-10-26 |
Registry credential check in doctor and credential sync in init, after the first version broke a cell by copying a stale global token | fleet | 2026-10-26 |
A release harness (manifest without modules) from its directory and via --package from a local repository; source gates on the cell; the 1.0.0 unit-test finding | m248 | 2026-10-26 |
Fresh install: setup:install on an empty database with the extension in place, 85 s, 427 tables, 404 modules, home page served, cell fully green afterwards | m248, m2-faqs | 2026-10-28 |
| The tool's own suite: 201 tests, PHPStan clean | furnace checkout | 2026-10-28 |
The fleet is nine cells covering Magento 2.4.6 to 2.4.9 and Mage-OS 1.3 to 3.4 on PHP 8.1 to 8.5, each with a Luma and a Hyvä store view; see cells.
Not done
A public Packagist release has never been run through it. The registry path is verified against Private Packagist only. It is the same code path without credentials, but it has not been exercised.
The CI certify tier has no host. furnace:static runs anywhere. The cells exist only on the workstation; the runner host has no fleet, no MageBox and no furnace checkout. Building that fleet is what gates CI certification.
Varnish is not in the path. Every cell runs Magento's built-in full page cache. Cacheability, cache tags and private-content holes are exercised; VCL purging, ESI, the X-Magento-Tags header size limit and grace mode are not. The production gate's own probe fetches each page once, so it only ever sees a cache miss. A Varnish cell or cell option is the clean way to add this.
Two cells lack PHPStan and PHPCS. m248 and m249 ship no vendor/bin/phpstan or vendor/bin/phpcs, so a harness run reports static analysis n/a there. For a checkout the static tier runs on the host and is unaffected.
Most Qoliber modules export-ignore their tests. A registry-only run (harness) can only judge a release by the tests its dist carries. m2-faqs ships them; most other modules do not, so for those a release is certified from a checkout. The decision to ship tests in dists is open.
The harness package is not published. qoliber/furnace-advanced-faq exists as a local repository. Until it is on the registry, --package needs --repository=<local dir>.
Legacy suites are not conformant yet. m2-faqs keeps its Playwright specs under dev/playwright/specs and ships a phpunit.xml.dist, both of which conformance names. Its e2e layer stays off until the specs move to dev/tests/specs.
The 1.0.0 release of m2-faqs fails its own unit tests. Fifteen errors in FaqsTest: the test passes six constructor arguments to a block that takes seven. The checkout is fixed; the release is not. Until the next release a harness run against 1.0.0 stops at the unit gate, which is the correct verdict.
Before a public 1.0.0
Furnace was built for one vendor's extension catalogue, and a few of those assumptions are still in the code. None is hard to generalise.
- Extension discovery looks for
app/code/Qoliber/*in project-shaped repositories, and the scaffolder writes that glob and falls back to aqoliber/package prefix. A configurable vendor list is the general form. - The default cell root is
~/qoliber-furnaceandfurnace sweepdefaults to~/qoliber-extensions. Both are overridable; the defaults should become neutral. - Cells are MageBox instances (
.magebox.yamlis where the PHP version and hostname come from). Supporting another local stack means teaching discovery one more file to read. - The GitLab template clones
qoliber-internal/furnaceand expects/opt/furnaceon the cell host. A GitHub Actions equivalent does not exist. config/platforms.yamlencodes which Magento and Mage-OS patches are worth certifying against as of the date in its header. Publish the date with the policy and expect contributors to bump it.- Pick a licence, add a
CONTRIBUTING.mdthat states the two design rules, and keeptests/run.phpand PHPStan green in CI; both have caught real bugs every week this tool has existed.