Ikanos v1.0.0-beta3 — "Brigantine"
Pre-releaseIkanos v1.0.0-beta3
🧭 Beta3 is a housekeeping release: no schema change, no new capability keywords — the spec's
ikanosversion const simply bumps from1.0.0-beta2to1.0.0-beta3with an identical contract. The effort went into fixing two real runtime bugs (bearer auth on outgoing requests, HTTP 204 handling), tidying dependency governance, and a repo-wide reorganization that moves every Maven module under amodules/folder for clearer navigation.
What is Ikanos?
Ikanos is the first open-source engine for Spec-Driven Integration. Capabilities are declared entirely in YAML — no Java, no code generation, no compilation step. The engine reads the spec at startup and immediately serves it as a multi-protocol server: MCP, Skill, REST, and Control. The spec is the artifact and the runtime contract.
Ikanos comes from the Greek ικανός — capable.
This v1.0.0-beta3 release builds on v1.0.0-beta2 ("Shooner") with a focus on runtime correctness and project layout: outgoing HTTP requests now carry authentication headers correctly, HTTP 204 responses are no longer misreported as errors, and the whole codebase moves under a modules/ folder. No breaking schema change since beta2 — the spec version const is bumped, but the contract itself is unchanged.
🌐 Ecosystem
Polychro — Spec Linting for Ikanos Capabilities
Polychro remains the companion spec linting engine for the Ikanos ecosystem. It validates Ikanos capability files against rulesets declared in YAML, surfacing diagnostics as SARIF, JSON, or LLM-native output — directly inside your editor, CI pipeline, or AI agent. See the Polychro release notes for its own changelog.
✨ Highlights
🔐 Bearer Auth Fixed on Outgoing Requests (#684, closes #654)
Bearer tokens were silently dropped from outgoing HTTP requests because binds were not taken into account when resolving variables on the client side.
- The capability is now the single source of truth for binding variables and their values
- Both server and client adapters resolve variables through the same mechanism — the capability's
bindings - Outgoing requests now correctly take binding variables into account when resolving headers
📭 HTTP 204 No Content Handled Correctly (#687, closes #685)
MCP tool results were wrongly reporting a successful 204 No Content response as an error. The engine now handles 204 explicitly, returning an empty result instead of failing the call.
📁 Maven Modules Moved Under modules/ (#653, closes #525)
All Maven modules (ikanos-spec, ikanos-engine, ikanos-cli, ikanos-docs, ikanos-coverage, ikanos-tunnel-ziti) now live under a modules/ subfolder for clearer project navigation. As part of this change:
- Tests that need a mock server now spin up a Microcks instance on demand instead of requiring one to be started manually — no more running Microcks locally before
mvn test, and CI no longer needs a separate "launch Microcks" step - A new
print_centralhelper was added tobuilder.shto preview what artifacts would be published to Maven Central, useful for future migrations - Pure reorganization — no production behavior changed by this PR
🔄 Crafter Version Sync Refinements (#672, #675)
- The Ikanos → Crafter version sync now converts the
pom.xmlversion into the format expected by VS Code Marketplacepackage.jsonversioning guidance (Crafter#77) - A follow-up fix corrects the Crafter version number format produced by the sync
🧹 Schema Version Sync Cleanup (#668)
- Removed the now-redundant YAML version update for Shipyard tutorial files — Shipyard updates this itself at deploy time
- Removed the hardcoded version number from the schema
description - Renamed
synchronize-schema-version-in-repository.ymlfor naming consistency with the other sync workflows
🤖 Dependabot Restricted to Security Updates (#686, partially closes #665)
dependabot.yml now restricts automated PRs to security updates only, cutting down on routine version-bump noise while keeping vulnerability patching automated.
🧪 Test Logging Fixed for CI Parity (#674, closes #670)
Two tests asserting against logged records were silently passing/failing inconsistently because org.restlet.ext.slf4j.Slf4jLogger overrides java.util.logging.Logger::log without invoking registered handlers. Tests now assert against the underlying Logback appender instead, and org.restlet.engine.loggerFacadeClass is pinned so tests behave identically locally and in CI.
📚 Documentation
- Shipyard links updated for the beta2 documentation set (#680)
⚠️ Known Issues & Limitations
- CLI pre-built binary installation — running the CLI binary directly is not straightforward on macOS (Gatekeeper quarantine requires
xattr -dr com.apple.quarantineor system approval) and on Windows (SmartScreen warning, unsigned binary). Workaround: run viajava -jar ikanos.jarfrom the JAR instead (#281) - Reverse tunnel remains declarative-only in the schema — capabilities that declare
tunnel:parse and validate today, but the engine still dials the publicbaseUridirectly until the embedded tunnel feature is enabled. Use the sidecar pattern from the Reverse Tunnel guide for production today. - CLI pre-built binaries available for macOS ARM64, Linux AMD64, Linux ARM64, and Windows AMD64.
🔢 By the Numbers
- 14 commits merged since v1.0.0-beta2
- 642 files changed, +810 / −872 lines (the high file count reflects the
modules/folder reorganization touching every module's path) - 5 contributors
🙏 Contributors
Huge thanks to the team for shipping this release:
- @neyeahmed — bearer auth fix on outgoing requests (#684), HTTP 204 handling (#687), Maven
modules/reorganization (#653), Dependabot security-only restriction (#686), Logback test logging fix (#674), release coordination - @jeremnaf — Crafter version format sync (#672, #675), schema version sync cleanup (#668)
- @briansloane — Shipyard documentation links updated for beta2 (#680)
Full Changelog: v1.0.0-beta2...v1.0.0-beta3