Skip to content

Ikanos v1.0.0-beta3 — "Brigantine"

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 03 Aug 08:32
· 37 commits to main since this release

Ikanos v1.0.0-beta3

🧭 Beta3 is a housekeeping release: no schema change, no new capability keywords — the spec's ikanos version const simply bumps from 1.0.0-beta2 to 1.0.0-beta3 with 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 a modules/ 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_central helper was added to builder.sh to 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.xml version into the format expected by VS Code Marketplace package.json versioning 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.yml for 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.quarantine or system approval) and on Windows (SmartScreen warning, unsigned binary). Workaround: run via java -jar ikanos.jar from 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 public baseUri directly 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