Skip to content

Latest commit

 

History

History
673 lines (448 loc) · 55.4 KB

File metadata and controls

673 lines (448 loc) · 55.4 KB

Changelog

All notable changes to Axint will be documented in this file.

This project follows Semantic Versioning and the format is based on Keep a Changelog.

Added

  • A2A proof and repair server - added a discoverable A2A Agent Card and an authenticated JSON-RPC server for Apple code checks, failure diagnosis, project proof, and repair planning, with streaming status and cancellation.
  • Durable isolated tasks - A2A task state is stored atomically and scoped by both tenant and authenticated caller, while original input content is omitted from durable history.

Changed

  • Cancelable Xcode execution - proof cancellation now propagates to active build, test, and runtime child process groups through AbortSignal.
  • Dependency security floors - refreshed npm and pnpm resolution policy for patched transitive releases; the npm audit reports zero known vulnerabilities.

[0.6.0] — 2026-07-16

Added

  • Current Apple platform compatibility — added an evidence-aware iOS and iPadOS 27 beta 3 catalog spanning Siri, Shortcuts, App Intents, Foundation Models, CoreAI, SwiftUI, UIKit, Background Assets, and document APIs.
  • Low-noise migration diagnostics — added ten advisory Swift checks for current Apple API and behavior changes, plus deterministic fixes for the renamed SwiftUI toolbar and text-field APIs.
  • Xcode and App Store readiness helpers — added Xcode 27 beta 3 build analysis, bounded test repetition, duplicate Clang module detection, App Store Connect API migration analysis, and Accessibility Nutrition Label common-task reports.
  • Modern hosted MCP transport — the production endpoint now supports both established initialization flows and the current stateless protocol, verified with official SDK clients.
  • Expanded compatibility canaries — CI now covers current Node and Python releases plus forward-looking TypeScript, Python, Xcode, and MCP lanes.
  • Brownfield benchmark v3 — the public benchmark now includes 38 paired cases across ten categories with precision, recall, and clean-project abstention gates.

Changed

  • Artifact and dependency release gates — npm package contents, every Python optional surface, Python wheels/source distributions, and the hosted Worker now receive explicit audit and publishability checks.
  • Marketplace tool semantics — all 36 compact MCP descriptions now preserve explicit purpose, sibling-tool guidance, parameter interaction, defaults, and read/write/network effects without exceeding the manifest budget.

Fixed

  • Hosted runtime drift — deployment and release workflows now verify that the public MCP endpoint matches the package being released.
  • Python MCP startup compatibility — both Python console entrypoints now use the stable SDK's stdio_server() and Server.run(...) contract instead of removed transport and .main() helpers.
  • Bounded Apple SDK scanning — nightly WWDC monitoring no longer follows compatibility symlink loops or walks SDK trees without limits.
  • Beta guidance accuracy — resolved simulator guidance is no longer emitted as an active Foundation Models warning; the current sampling workaround is generated instead.

[0.5.2] — 2026-07-11

Fixed

  • Python MCP console entrypoint — axint-mcp-py now enters the async stdio server through a synchronous asyncio.run(...) boundary instead of returning an un-awaited coroutine and exiting immediately.
  • Installed-package verification — the Python test suite now asserts that console entrypoints remain synchronous even when their transport implementation is asynchronous.

Why this matters

  • A fresh Python package install now starts the MCP server through the same console path users configure in their host.

[0.5.1] — 2026-07-11

Added

  • One-command local proof — axint prove discovers an Apple project, validates Swift, runs the available Xcode build and tests, reconciles evidence, and writes a compact signed receipt without requiring an account or configuration.
  • Portable signed receipts — proof receipts use canonical JSON, SHA-256 payload and artifact hashes, and Ed25519 signatures backed by an automatically generated local identity or an explicitly configured team signing key. axint receipt verify detects payload tampering independently.
  • Finding-level feedback — every Swift diagnostic has a stable source-free ID. axint feedback finding records accurate, irrelevant, or false-positive decisions, and later runs preserve but suppress reviewed findings unless stronger evidence confirms them.
  • Opt-in deterministic repair — axint prove --fix applies only supported deterministic Swift rewrites and reruns the complete proof; the signed receipt records proposed or applied files and diagnostic codes.
  • Brownfield benchmark v2 — the release gate now covers 20 labeled cases across seven categories, publishes per-category metrics and source hashes, enforces minimum precision/recall/abstention thresholds, and accepts private local corpus manifests without publishing source.
  • Help improve Axint program — axint telemetry standard records product-signal consent, while axint telemetry enhanced enables and immediately syncs source-free repair and proof diagnostics. AXINT_DOGFOOD=1 explicitly marks Axint-owned internal runs for separate Pulse attribution.
  • Proof outcome learning — axint prove now queues a source-free outcome packet with gate decision, diagnostic codes, deterministic-repair result, and build/test/runtime evidence so repair reports can be correlated with what actually passed.
  • Product-learning taxonomy — Registry searches and project briefs now classify lifecycle, delivery target, complexity, feature areas, Apple surfaces, and demand gaps; raw searches and project descriptions remain excluded.

Fixed

  • Dry-run evidence honesty — planned Xcode commands are now marked skipped and can only produce evidence_required; they can no longer be mistaken for passing build or test proof.
  • Projects without tests — axint prove detects whether an Xcode unit or UI test target exists, proves the build when possible, and reports missing test evidence without misclassifying the absent test action as a product failure.

Why this matters

  • One local command can produce portable evidence and an exact repair path while keeping static findings subordinate to real Apple tooling.

[0.5.0] — 2026-07-10

Added

  • Evidence-aware Swift diagnostics — every finding now carries confidence, status, blocking behavior, provenance, and supporting or contradicting evidence instead of presenting heuristic output as compiler truth.
  • Xcode reconciliation — build and test evidence can confirm matching findings or suppress compiler-shaped claims contradicted by a successful selected build while preserving accessibility, interaction, privacy, and runtime advisories.
  • Brownfield minimal mode — axint run --integration=minimal --local-only --advisory --no-fix performs a local, non-mutating project check with no network, generated source, project instructions, memory installation, automatic fixes, or persistent Axint state.
  • Brownfield benchmark gate — a transparent labeled corpus now measures precision, recall, and clean-project abstention without presenting a small curated benchmark as a production-wide claim.

Changed

  • Fix Packets expose evidence state — JSON and Markdown receipts include original severity, confidence, active or suppressed status, blocking behavior, and evidence records; verdicts now follow blocking findings instead of raw severity alone.
  • Run and MCP contracts — CLI and MCP run inputs expose the same integration, locality, advisory, fix, and output-directory controls, with persisted background jobs disabled when minimal mode promises no Axint state.
  • Product positioning — README and documentation now present Generate, Check, Run, Team, and Cloud as focused jobs within one proof-and-repair system, with generation remaining optional for existing Swift projects.

Why this matters

  • Existing Swift projects can distinguish compiler-supported findings from probable leads and non-blocking advisories instead of treating every heuristic as fact.

[0.4.36] — 2026-07-07

Changed

  • Glama refresh release — cleaned public README/profile copy for the MCP directory resync, removed stale host-specific public examples, and refreshed package/version metadata so Glama can index a fresh SHA.
  • MCP tool-card freshness — removed stale hard-coded rule/template counts from runtime tool descriptions so marketplace tool cards stay accurate as diagnostics and bundled templates grow.

[0.4.35] — 2026-07-07

Changed

  • MCP marketplace tool-card quality — default runtime tool descriptions now preserve complete Purpose, Use, and Effects signals instead of clipping prose into ellipsis fragments, giving Glama and other MCP directories clearer behavior, side-effect, and sibling-tool guidance without requiring verbose manifest mode.
  • Release truth advances to v0.4.35 — npm, PyPI, editor extension metadata, Xcode extension metadata, MCP server fallbacks, worker metadata, server.json, metrics, README, and roadmap release references are synced.

Fixed

  • Security lockfile refresh — pinned patched transitive floors for hono and vite, refreshed the pnpm lock, and updated the MCP worker lock so Dependabot security alerts resolve on main.
  • Workflow gate metadata — axint.workflow.check is now correctly advertised as non-destructive but not read-only, matching its local .axint/session freshness-stamp write and removing a marketplace annotation contradiction.

[0.4.34] — 2026-07-07

Added

  • Apple platform capability registry — added typed capability metadata for iOS, iPadOS, macOS, watchOS, and visionOS 27-era App Intents, AppIntentsTesting, Foundation Models, Core AI, BackgroundTasks, MetricKit, SwiftUI, WidgetKit, and Xcode agent/plugin surfaces.
  • iOS 27 Beta 3 readiness rules — added a volatile-rule registry for the latest App Intents, Siri, WidgetKit, UIKit, Core AI, Foundation Models, MetricKit, launch-screen, and scene-lifecycle changes, including schema renames and workarounds for UnionValue/entity-resolution edge cases.
  • UnionValue and configurable WidgetKit support — added TypeScript, Python, schema-compile, parser, generator, validator, and MCP coverage for @UnionValue and App Intent-backed widget configuration paths.
  • Apple Intelligence proof helpers — added Foundation Models proof scaffolds, privacy-manifest helpers, richer view blueprints, and an Apple platform audit/implementation roadmap for the next support phases.

Changed

  • Release truth advances to v0.4.34 — npm, PyPI, editor extension metadata, Xcode extension metadata, MCP server fallbacks, worker metadata, server.json, metrics, README, and roadmap release references are synced.
  • WWDC nightly workflow cache action — updated the nightly Apple snapshot workflow from actions/cache@v5 to actions/cache@v6 after fresh CI and CodeQL checks.

Fixed

  • Community plugin validation — the plugin manifest now uses the object-shaped mcpServers schema, the bundled skill includes required marketplace frontmatter, and regression tests keep the manifest valid.

[0.4.33] — 2026-06-25

Added

  • AppIntentsTesting harness generator — generateAppIntentsTestingHarness and axint appintents test <file> create a Swift Testing/AppIntentsTesting readiness scaffold from existing App Intent and App Entity source.
  • Shortcuts Use Model readiness checks — Cloud Check now flags generated UUID() entity ids and thin AppEntity metadata before those entities are exposed to Shortcuts Use Model transcripts.
  • Foundation Models proof hardening — Cloud Check now asks tool-calling sessions for dynamic profile boundaries, asks model sessions for evaluation coverage, and asks Private Cloud Compute sessions for fallback/quota proof.
  • Core AI and ImageCreator migration checks — Cloud Check now asks Core AI code for deployment/availability proof and flags ImageCreator usage as a migration risk.
  • Apple Intelligence proof templates — added shortcuts-use-model-entity, foundation-model-evaluation, and core-ai-local-model to the bundled template registry.
  • WWDC26 Siri/App Schema readiness — the compiler now normalizes and emits EntityCollection<T> parameters, ValueRepresentation(...) aliases, and RelevantEntities helper methods from TypeScript and JSON IR so schema-backed entities can stay current for Siri, Shortcuts, Spotlight, and Apple Intelligence paths.
  • Cloud Check security diagnostics — axint.cloud.check now has a Siri/App Schema readiness coverage row plus diagnostics for confirmation-required actions, authorization boundaries, prompt-injection mitigation, and data-boundary proof around Foundation Models code.
  • Foundation Models tool-calling proof cues — the foundation-model-tool template now names the generated Tool, prompt-version metadata, transcript capture, and sensitive-field redaction proof expected before demoing model-backed Apple actions.
  • SwiftUI interaction template — swiftui-reorderable-swipe-container shows the WWDC26 custom-container path for reorderable(), reorderContainer(...), and swipeActionsContainer().
  • SwiftUI modernization diagnostic — Cloud Check now suggests the new swipeActionsContainer() path when a SwiftUI view still appears to use List primarily to host swipe actions.
  • Dynamic Profile proof cues — dynamic-profile-session now names selected-profile logging, transcript metadata, and tool-call proof for Foundation Models sessions that switch profiles at runtime.

[0.4.32] — 2026-06-10

Added

  • AX127 diagnostic — a param default that disagrees with the declared type (param.string("Length", { default: 8 })) now fails both axint validate and axint compile before any Swift is emitted, with a computed fix ("change the default to a string, or change the param to param.int(...)"). Covers every param type; date and duration params reject literal defaults outright.
  • Diagnostic spans and snippets — TypeScript diagnostics now print --> file.ts:line:col plus a short source excerpt with a caret underline, rust-style. JSON output gains additive line and column fields.
  • Perform-body notice — axint compile prints a one-line note when a TS perform body is discarded into the Swift stub, so nobody discovers the TODO in Xcode later.

Changed

  • axint --help now leads with a Core section (init, compile, validate, validate-swift, templates, suggest, mcp) and groups the remaining commands into Authoring, Registry & cloud, and Project & agents sections.
  • Successful compile, validate-swift, and watch runs no longer print Fix Packet paths or the axint login tip — pass --verbose to bring them back. Failures still print everything.
  • ANSI color is disabled when output is piped or NO_COLOR is set, so agents reading CLI output stop receiving escape bytes.
  • axint.suggest matches consumer phrases to stock domains (habit/streak → health, todo/task/note → productivity, budget/expense/spending → finance) and gives each suggestion in a plan its own rationale instead of repeating one sentence.
  • The default MCP tool manifest is ~45% smaller and lists the hero tools first (compile, validate, swift.validate, swift.fix, scaffold, templates.list, templates.get, repair). Full prose stays behind AXINT_MCP_MANIFEST_MODE=full.
  • param.url string defaults now emit URL(string: "...")! and array defaults emit Swift array literals, so every default the validator accepts produces Swift that compiles.

Fixed

  • AX849 no longer blames the property above the real offender when a stored property precedes a computed property that is missing its return.

[0.4.31] — 2026-06-10

Added

  • AX849 and AX860 diagnostics — the Swift validator now flags computed properties that declare locals but never return the final expression (AX849), and same-file switch self statements that omit a declared enum case without a default branch (AX860).
  • Dogfood routing in axint.suggest — prompts about repairing Axint's own classifier, Cloud Check artifact handling, or version truth now route to a dedicated axint-dogfood plan instead of generic app-feature suggestions.
  • WWDC26 templates — foundation-models-custom-provider (custom LanguageModel provider session with an on-device fallback profile), app-intents-testing-harness (intent plus an AppIntentsTesting XCTest harness), and dynamic-profile-session (Foundation Models session with per-context DynamicProfiles).
  • testHarness intent config — defineIntent accepts a testHarness block; the generator emits an XCTest class that drives perform() with sample inputs behind #if canImport(XCTest) && canImport(AppIntentsTesting).

Changed

  • Public-facing copy now says "audit-grade" and "production readiness" instead of fundraising vocabulary.

[0.4.28] — 2026-05-08

Added

  • Activation proof — axint activate and the axint.activate MCP tool run a source-free compiler smoke test, return axint_activated, and tell agents to leave the activation result in the current thread before editing code.
  • Install/activation telemetry split — first-run telemetry now separates setup initialization and server-start signals from activation/value-proof events, so Pulse can tell whether people actually used Axint after install.
  • Fresh install gauntlet — npm run install:gauntlet packs the current build, installs it into a temporary clean project, verifies axint activate, and checks the no-install create-axint-app launchpad path.

Changed

  • Status, doctor, upgrade, Xcode setup, MCP prompts, project start packs, rehydration files, and README copy now tell agents to run axint.activate after setup instead of stopping at "MCP server started."
  • npm package keywords now include MCP, SwiftUI, WidgetKit, Xcode, iOS, and macOS discovery terms.

[0.4.27] — 2026-05-06

Changed

  • MCP Marketplace tool-card clarity — compact runtime tool descriptions now include explicit Use: and Effects: clauses, with longer parameter descriptions by default. This gives Glama/MCP marketplace evaluators and agent clients clearer purpose, usage guidance, side-effect, auth/network, and parameter-default signals without requiring full verbose mode.

Fixed

  • Published npm audit path — bundled the MCP SDK into Axint's compiled MCP/CLI runtime and moved it out of production dependencies so fresh downstream installs no longer inherit the vulnerable express-rate-limit → ip-address@10.1.0 scanner chain while preserving @axint/compiler/mcp import compatibility.

[0.4.26] — 2026-05-06

Fixed

  • MCP marketplace runtime entrypoint — node dist/mcp/index.js now starts the stdio MCP server when executed directly, while remaining safe to import as @axint/compiler/mcp. This matches Glama-style container launch specs that run mcp-proxy -- node dist/mcp/index.js.

[0.4.25] — 2026-05-06

Fixed

  • GitHub security parity — added the pnpm override and refreshed pnpm-lock.yaml so Dependabot, MCP Marketplace, and package scanners no longer see the stale ip-address@10.1.0 path after the npm lock had already been hardened.

[0.4.24] — 2026-05-06

Added

  • Project-pack version sync — axint project sync-version plus the axint.project.syncVersion MCP tool update Axint-owned project hints after an upgrade, including .axint/project.json, AGENTS.md, CLAUDE.md, .axint/AXINT_MEMORY.md, .axint/AXINT_REHYDRATE.md, .axint/AXINT_DOCS_CONTEXT.md, and .axint/README.md.

Fixed

  • Same-thread upgrade drift — project packs no longer keep telling agents to expect an older Axint version after axint upgrade --apply; users can run one command to refresh the local truth without overwriting unrelated notes.
  • MCP Marketplace security scan — updated the MCP SDK dependency path and pinned the transitive ip-address resolution so package scanners no longer report the old ReDoS / DNS rebinding vulnerability chain.

[0.4.23] — 2026-05-05

Added

  • create-axint-app Day Agent launchpad — axint create plus the create-axint-app bin alias now generate a premium Apple-native mini app with three App Intent source contracts, agent prompts for Codex/Claude/Cursor, a SwiftUI app shell, first-run proof contract, demo script, and interactive local proof preview.

[0.4.22] — 2026-05-05

Added

  • Source-free adoption telemetry controls — axint telemetry status|opt-out|opt-in gives users a clear local control surface. Events are source-free and path-free, honor AXINT_TELEMETRY=off, AXINT_DISABLE_TELEMETRY=1, and DO_NOT_TRACK=1, and send only coarse usage metadata.
  • Snapshot failure diagnosis — Xcode failure summaries and Cloud Check evidence now classify stale or missing snapshot baselines as AX-SNAP-001, with an explicit RECORD_SNAPSHOTS=1 rebaseline path instead of generic UI-test advice.
  • CLI-safe session handoff — axint session start now prints both MCP JSON and a CLI-safe axint workflow check ... command so agents do not accidentally pass JSON booleans as flag values.

Changed

  • axint suggest --dir is accepted as a project-context hint for parity with workflow, run, and other project commands.
  • Cloud Check routes SQL/config/style/document artifacts away from Apple compiler diagnostics so migrations and non-Apple files no longer produce fake Axint parse failures.
  • axint doctor treats a newer running Axint than the project hint as a warning instead of a hard failure unless strict pinning is actually needed.

[0.4.21] — 2026-05-03

Added — closes the recurring cross-file resolution gap (4 dogfooding misses across 2 sprints)

  • AX848 nested-type / static-member access on a project-indexed type — fills the gap AX841 deliberately leaves open. AX841's receiver regex is anchored on lowercase-first identifiers (instance member access). When the receiver is itself a type literal — IntelBriefItem.Kind, MyEnum.somethingMissing — Swift is doing nested-type / static-member lookup, not instance-member lookup, and AX841 skips it. AX848 specifically catches the type-on-type form, only fires when the parent is project-indexed, and emits a "Did you mean…" hint via Levenshtein over the parent's nested types, static members, and enum cases. Resolves the FIFTH cross-file member-resolution miss documented in AXINT_DOGFOODING.md (2026-05-03 entry).
  • AX841 extended with typed-collection-element inference — adds ForEach(store.results) { item in … } and for item in store.results { … } as binding sources. The validator now resolves store to its project-indexed type, looks up results to get [VoiceCaptureResult], peels the array wrapper, and binds the closure parameter / loop variable to VoiceCaptureResult so downstream member access on it actually fires. Previously the closure parameter was indiscriminately added to untypedClosureParameters and silently skipped — closing the dogfooding item.title (real field is headline) miss.
  • axint cloud check --diff-only — new flag that filters diagnostics down to lines this branch actually touched. Pre-existing warnings on unchanged lines stay silent so the warning count means "things I broke" instead of "ambient project state." Walks git diff --unified=0 and parses hunk headers; falls back to a no-op when git isn't usable. Companion flags --diff-base <ref> and --diff-cwd <dir> cover branch and submodule layouts. CloudCheckReport.diffFilter exposes the suppressed-diagnostic count.
  • Snapshot-baseline affinity hint — when the validated Swift file has matching __Snapshots__/<view>*.png baselines on disk, Cloud Check appends a one-line "this view has N snapshot baselines; rebaseline after the next build" reminder to nextSteps. Default-on when sourcePath is provided; opt out with axint cloud check --no-snapshot-affinity. CloudCheckReport.snapshotAffinity exposes the matching baseline paths.
  • Drift-age stamp on axint.workflow.check — every workflow.check call writes a tiny .axint/session/last-workflow-check.json stamp and reads the prior one to compute "minutes since last workflow.check." Surfaced in checked for normal runs and in recommended (with a DRIFT tag) when the gap exceeds the 10-minute checkpoint rule. WorkflowCheckReport.driftAge exposes the structured value.

Changed

  • collectDeclaredMemberNames now includes nested type names (struct/class/actor/enum/typealias declared inside the parent body), so AX841 and AX848 no longer false-positive on project types that legitimately namespace nested kinds.
  • validateSwiftSources member-access loop now honors a closure parameter's inferred type when present, instead of skipping every closure-bound identifier whether or not we managed to resolve it.

[0.4.20] — 2026-05-03

Added — three high-leverage moves from SWARM's strategic feedback

  • swift -typecheck integration in Cloud Check — opt-in via typecheck: true on the axint.cloud.check MCP tool. When the host machine has the Swift toolchain (Mac with Xcode, or Linux with swift installed), Cloud Check shells out to swift -typecheck and merges the compiler diagnostics (AX-SWIFTC-ERROR, AX-SWIFTC-WARNING) into the report. Closes the cross-file conformance / actor-isolation / opaque-return / protocol-method-availability gap that motivated all five new rules in 0.4.19. On Linux/CI without a toolchain it's a no-op so existing pipelines stay green. Honors AXINT_SWIFT_BINARY for non-default toolchains.
  • Snapshot test integration scaffold — new runSnapshotTests helper that drives xcodebuild test -only-testing:<suite>, parses pass/fail counts, and surfaces snapshot failures with their reference-image artifact paths as AX-SNAPSHOT-FAIL diagnostics. Catches the visual regression class (dead-but-rendered, layout drift, white-on-white) that no static analysis can see.
  • axint paint-test scaffold CLI command — auto-generates an XCTest file that mounts every reachable struct X: View at canonical viewports (iPhone 16 Pro, iPad Pro 13") and asserts the body resolves + > 0% non-empty pixels render. Skips App-conforming roots, PreviewProviders, generics, and structs with required init args (with explicit reasons surfaced for each so you can add manual mounts). Standard Apple ImageRenderer + XCTest, no third-party dependencies.

Changed

  • CloudCheckReport now includes a typecheck field exposing toolchain availability, exit code, and how many extra diagnostics came from the compiler — so agents can tell whether the verdict was rule-pack-only or rule-pack + Apple typechecker.

[0.4.19] — 2026-05-03

Added

  • AX847 type-erased SwiftUI protocol method missing — bundled table of methods that exist on a sub-protocol but not on the type-erased name. Catches the dogfooding AnyShape.strokeBorder pattern (strokeBorder lives on InsettableShape; AnyShape only conforms to Shape). Suggests the closest valid replacement (e.g. .stroke for .strokeBorder on AnyShape).
  • AX846 @ViewBuilder requires View return type — flags any @ViewBuilder annotation on a property/function whose return type isn't some View / View. Catches the dogfooding @ViewBuilder some Shape pattern that produces _ConditionalContent (View only) but is asked to satisfy a Shape constraint.
  • AX845 @MainActor static method in init default-value — for any @MainActor class/struct with init parameter defaults that call TypeName.staticMethod() or Self.staticMethod(), fires when the static method isn't nonisolated. Default-value expressions evaluate at the caller's isolation context (often non-isolated), and Swift 6 rejects the actor crossing. Single-keyword fix the diagnostic suggests directly.
  • AX844 synthesized conformance propagation — for any struct that explicitly declares Hashable, Equatable, Codable, Decodable, or Encodable, walks stored properties via project-context index and confirms each property's type also conforms. Catches the LiveTeammate { let builder: BuilderProfile } pattern where the property type lives in another file and doesn't conform. Includes a project-wide extension scan so extension X: Hashable {} declarations elsewhere are honored.
  • AX843 state-machine orphan — for each enum declared in the input set, finds case-write sites (= .foo) and case-read sites (switch/case .foo:/is .foo/==/if case) across the project. Cases with writes but zero reads emit info-severity. Catches the Navigator.rightPane = .voiceInbox pattern where the writer survived a refactor but the consumer view was dropped.
  • axint.registry.search MCP tool — natural-language query against the local Axint Registry. Returns ranked hits with name, version, description, surface areas, install command. Token-overlap scoring with field weighting (name + tags + siri-phrases ranked higher than description). Filters by kind (app-intent, view, widget, ...) and platform (iOS/macOS/...). Use BEFORE axint.feature / axint.compile so agents can install existing packages instead of regenerating Swift.
  • AXINT_REGISTRY_PATH env var — points the registry tooling at any axint-registry checkout. Defaults to the sibling ../axint-registry/ for normal workspace setups.

Changed

  • registryPackages metric is now auto-counted from the sibling axint-registry/first-party/ directory instead of a hardcoded constant. The previous value (14) was stale; the real count from the registry is now what shows up in metrics.json and on every public surface. Honestly smaller, but real.

[0.4.18] — 2026-05-03

Added

  • AX842 SwiftUI view reachability — flags any struct X: View that has zero call sites anywhere in the project. Catches sprint-scale dead-code work where the agent ships features into views the live app never renders. Honors // axint:reachable comment opt-out for views constructed reflectively. Skips App-conforming structs and PreviewProviders.
  • AX841 cross-file member resolution via project context — extends AX768 to index every class/struct/actor/enum declared in the project, not just files in the validation set. Catches voiceInbox.items when VoiceInboxStore actually exposes results. Includes a "Did you mean…" suggestion via Levenshtein when a near-match exists.
  • AX840 cross-module symbol requires unimported framework — bundled table of common Swift framework symbols (UTType, AVPlayer, Chart, MKMapView, Combine, AppIntents, CryptoKit, …) that fires when the file uses one but doesn't import the defining module. Includes SwiftUI shorthand patterns like [.text] for UTType inference.
  • AX787 string-interpolation extension — companion pass that scans \(IDENTIFIER) interpolations for undefined identifiers, regardless of name shape. The original AX787 ran on stripped source (no string literals); this fills the gap so refactor-leftover identifiers like \(projectName) get caught pre-build.
  • validateSwiftSources accepts projectContext: { projectRoot } — opt-in second argument that unlocks AX841 and AX842. Without it, the validator stays in single-input scope (no behavior change for existing callers).

Changed

  • validateSwiftSource and validateSwiftSources now also run AX840 (module-import) on every input, no project context required.

[0.4.17] — 2026-05-02

Added

  • AX787 undefined boolean identifier — catches is*/has*/should*/can*/did*/will* references that no longer resolve in scope after a refactor (the "deleted computed property, call site left behind" pattern). Skips Swift built-ins like isEmpty and hasPrefix.
  • AX788 HStack child collapses siblings — flags HStack that contains a custom View whose body chains .frame(maxWidth: .infinity) without a fixed-width clamp. Static analysis was previously blind to this layout-collapse class even though it breaks rendering on every page.
  • AX789 redundant Task { @MainActor in } in lifecycle — companion to AX730. .onAppear and .task are already main-actor isolated; the wrapper is dead weight.
  • AX768 system-prefix downgrade — references on Apple framework types (NS*, UI*, CK*, AV*, MK*, CL*, SK*, MTL*, CA*, CG*, CI*) that fall outside the bundled member table now emit at info instead of warning, with a suggestion to extend SYSTEM_TYPE_MEMBERS if the member is real. Cuts noise on partial-validation runs.
  • Bundled member coverage for ScrollGeometry, ScrollPhase, Animation, Color, Image, Text, Bindable, Binding, AnyView, EmptyView.

Changed

  • Cloud Check honesty — evidence_required and ready_for_build reasons now state explicitly that static checks do not equal compiler acceptance. Required evidence wording surfaces xcodebuild build (compile proof — non-negotiable) so agents stop reading a clean static gate as a build pass.

0.4.15 — 2026-04-29

Added

  • axint mcp recover — prints a same-thread recovery packet when an MCP client hits Transport closed, including version proof, project path, context-recovery commands, and the CLI fallback run loop.
  • Xcode runner-health classification — axint run now separates UI automation startup failures and hosted macOS test-runner hangs from real app assertion failures.
  • AX768 same-target Swift member validation — when changed Swift files include a declaring type and a consumer, Axint warns on direct member mistakes such as profile.detail when the known type does not expose that member.
  • Public page DSL manifest support — .axint language files can now parse, lower, and print safe page / module declarations for host-rendered public project/profile surfaces.

Changed

  • Cloud Check pending-proof handling now downgrades build-only evidence when behavior text says UI/runtime proof is still pending, so agents cannot claim runtime fixes from prose alone.
  • Focused test timeout guidance now respects existing --only-testing selectors and tells agents to clean up/retry runner infrastructure instead of asking for another focused test when no assertion executed.

[0.4.10] — 2026-04-27

Added

  • Guarded Xcode run loop — axint.xcode.guard and workflow prompts now keep Xcode agents inside the Axint loop across planning, writing, pre-build, pre-commit, and finish checkpoints.

Changed

  • Workflow check next actions — axint.workflow.check now returns the next concrete Axint action even when the checkpoint is ready, so agents do not treat the check itself as the only required Axint step.
  • Stage transitions now advance cleanly from context recovery to suggestion, feature generation, guarded writes, build evidence, pre-commit validation, and finish-state guardrails.

[0.4.9] — 2026-04-26

Added

  • Axint rehydration contract — axint.session.start now refreshes .axint/AXINT_REHYDRATE.md alongside the session token, operating memory, docs context, and project contract so Xcode/Claude/Codex agents can recover Axint after new chats and context compaction.
  • Workflow drift detection — axint.workflow.check now detects compaction, stale MCP, missing Axint, and long-drift language in agent notes, then blocks progress until the agent runs the Axint recovery loop.
  • Semantic generation hardening — feature, component, and suggestion flows now lean on semantic planning and self-audit diagnostics instead of narrow domain templates.

Changed

  • Project start packs, MCP prompts, doctor checks, README proof surfaces, and local docs memory now point agents at the rehydration-first workflow.
  • axint.swift.fix uses the multipass fixer path through MCP so mechanical fixes can converge without reintroducing duplicate declarations.

[0.4.6] — 2026-04-25

Added

  • axint.status MCP tool — reports the exact running MCP server version, package path, uptime, tool count, and Xcode restart/update instructions so agents can prove which Axint process they are connected to.

Changed

  • Xcode startup prompts now tell agents to call axint.status before editing code and stop if the running MCP server is older than expected.
  • axint xcode verify now treats a missing axint.status tool as an old MCP server and prints the update/restart path.

[0.4.5] — 2026-04-24

Added

  • Cloud Check coverage and confidence — axint.cloud.check now reports what it checked, what still needs Xcode/runtime evidence, and how much confidence an agent should place in the result.
  • SwiftUI accessibility propagation diagnostic — new AX736 warning for container .accessibilityIdentifier(...) patterns that can hide nested control identifiers in UI tests.
  • Observation navigation diagnostic — new AX735 warning for @ObservationIgnored navigator/router state inside @Observable coordinators.

Changed

  • Cloud Check repair prompts now include validator coverage details and avoid implying that a clean static check proves there is no runtime/UI bug.
  • Xcode setup prompts now tell agents to work in short validation checkpoints and report Axint validator gaps when Xcode/tests fail after a clean static check.

Fixed

  • AX731 weak-capture parsing now accepts Task { @MainActor [weak self] in ... } while still warning on Task { @MainActor in self... }.
  • Cloud Check validator parity is covered by regression tests so Swift validator findings such as AX731 surface through the Cloud Check MCP path.

[0.3.9] — 2026-04-16

CLI ergonomics, VSCode cloud handoff, and an MCP server refactor.

Added

  • Compression ratio after compile — axint compile prints TS lines → Swift lines (ratio) so authors can eyeball how their intent expanded. Skipped for --from-ir and --stdout runs. Labels as "Compression" or "Expansion" depending on which side is larger.
  • Cloud handoff in the VSCode extension — send the active intent to the cloud compiler from the command palette; the extension opens the resulting Swift side-by-side with your TS source.
  • swift.validate and swift.fix on the hosted MCP worker so remote MCP clients can lint and auto-fix generated Swift without running the CLI locally.
  • Good-first-issue template for new contributors.

Changed

  • MCP server split into manifest, prompts, and schema-compile modules — the old 900-line monolith is now three focused files. Tool surface and behavior are unchanged.
  • axint add accepts bare namespace/slug in addition to @namespace/slug. The registry web URLs drop the leading @, so a copy-paste from the browser now works.
  • Release workflow no longer hard-fails when a version has already been published to npm, PyPI, or GitHub releases — reruns are idempotent.

Fixed

  • axint add install response parsing — the API returns a flat shape (ts_source, swift_output at the root), the CLI was destructuring data.version.swift_output and writing undefined to disk. Install now writes the correct Swift output.

[0.3.8] — 2026-04-15

Xcode agentic coding support, Swift validator, and the axint.feature tool.

Added

  • axint.feature — new MCP tool that takes a natural-language feature description and returns a full intent, view, or widget scaffold. Designed for Xcode-hosted AI assistants that want to go from idea to compilable Swift in one turn.
  • Swift validator with Swift 6 concurrency rules and Live Activities checks. Runs as part of axint compile and is exposed as its own MCP tool.
  • axint doctor — environment diagnostic command. Prints Swift toolchain, Node version, Python (if installed), MCP server status, and registry connectivity.
  • Xcode Source Editor Extension — right-click a .intent.ts file in Xcode and compile it without leaving the editor.
  • Dot-notation prompt demo so hosted MCP clients can preview the guided feature-authoring flow before wiring it up.

Changed

  • Namespace cleanup across the CLI, SPM plugins, and lockfile — the final axintai references from the old unscoped name are gone. Everything is on @axint/compiler (npm) and axintai (PyPI, for the Python SDK only).
  • Dependabot disabled — upstream version drift on the generator fixture packages was producing more noise than signal.
  • Version references aligned across package.json, pyproject.toml, docs, and server.json.

[0.3.7] — 2026-04-14

Dot-notation MCP tools and prompts.

Added

  • axint.compile, axint.validate, axint.eject, axint.explain — dot-notation tool names that work alongside the existing axint_compile / axint_validate / etc. Hosted clients that prefer dotted namespaces (Smithery, Glama) now index cleanly.
  • MCP prompts — three guided prompts (new-intent, new-view, new-widget) that walk an LLM through authoring a surface from a plain-English brief.
  • Enriched tool parameter descriptions — every MCP input now has a docstring-style description, which measurably lifts Glama quality scores.

[0.3.5] — 2026-04-13

MCP tool annotations and parameter descriptions.

Added

  • Tool annotations on every MCP tool (readOnlyHint, destructiveHint, idempotentHint) so agents can reason about side effects.
  • Enriched parameter descriptions across the MCP server to improve tool-use accuracy.

0.3.4 — 2026-04-13

MCP registry hardening and remote transport support.

Added

  • Remote MCP endpoint — Cloudflare Worker serving the Axint MCP server over HTTP transport for Smithery and other hosted MCP clients.
  • server.json and registry markers — machine-readable MCP server metadata for automated registry verification (Glama, Smithery, Pulsemcp).
  • Dockerfile for MCP server inspection and containerized deployments.
  • Glama quality badge in README.
  • Dot-notation MCP tools (axint.compile, axint.validate, etc.) alongside the existing axint_compile names, with enriched parameter descriptions and tool annotations.

Fixed

  • server.json description trimmed to fit registry character limits.
  • MCP tool descriptions rewritten for better indexing on Glama and Smithery quality scores.

0.3.3 — 2026-04-12

Massive internal hardening pass: test coverage jump (249 → 402), Python SDK parity, and Smithery listing.

Added

  • Python MCP server — full CLI parity with the TypeScript MCP server. axintai-mcp serves all six tools over stdio.
  • MCP HTTP transport for Smithery registry listing.
  • 153 new tests (249 → 402) covering validator edge cases, diagnostics, generator corner cases, and type guard paths.
  • Type guard replacements — all unsafe as casts in the parser and generator replaced with narrowing type guards.
  • Shared parser utilities extracted from surface-specific parsers into src/core/parser-utils.ts.
  • Architecture docs (ARCHITECTURE.md) — full compiler pipeline walkthrough.
  • Xcode SPM build plugin support documentation and integration.
  • defineView(), defineWidget(), defineApp() — three new compilation surfaces with parsers, validators, generators, and schema mode support.
  • MCP server test suite — 30 tests covering all 6 tools.

Fixed

  • Entity resolution and serialization bugs in the parser utils layer.
  • Type safety holes in the MCP server and parser — closed a namespace bypass.
  • Codegen bugs for entity queries and dynamic options.
  • CLI test assertions aligned to new output format.
  • Python SDK — fixed mypy errors across the package, fixed broken TOML (bare 0 replaced with pyyaml dep).
  • Registry references removed from the public repo and added to .gitignore.

0.3.2 — 2026-04-10

Security hardening, compiler fixes, and the first PyPI publish.

Added

  • Python SDK on PyPI — pip install axintai now works. v0.1.0, Apache 2.0, published from the release workflow.
  • Registry rate limiting — IP-based rate limiting (120 req/min global, 10/min auth, 30/hr publish) with 10 MB publish payload cap.
  • Registry XSS mitigation — markdown link rendering now blocks javascript:, data:, and vbscript: URI schemes.
  • Authenticated GitHub API proxy on axint.ai — /api/github route with 5-minute edge cache, bumps from 60 to 5,000 req/hr.

Fixed

  • eject --format flag was accepted but never wired to formatSwift(). ejectIntent() is now async and runs swift-format when --format is passed.
  • param.dynamicOptions() inner type was hardcoded to string. Now recursively extracts the actual param type from the second argument.
  • Property-based entity queries now generate EntityPropertyQuery conformance with QueryProperties, comparators, and SortingOptions instead of a placeholder comment.
  • Custom result types now emit a compilable return stub instead of a bare TODO comment.
  • Registry search pagination uses a separate COUNT(*) query for accurate totals.
  • Version strings synced to 0.3.2 across axint.ai, README, ROADMAP, and CHANGELOG.

Removed

  • PEM key from trading-engine/ (security risk, should never have been committed).

0.3.0 — 2026-04-10

Entity support, editor extensions, Python bridge fixes, and a cleanup pass across every surface.

Added

  • defineEntity() and param.entity() SDK helpers — first-class entity authoring in TypeScript with EntityQuery generation and displayRepresentation support.
  • param.dynamicOptions() SDK helper — declare parameters with runtime option suggestions (codegen support landing in v0.3.1).
  • Editor extensions for Claude Code, Claude Desktop, VS Code, Cursor, and Windsurf — each ships as a ready-to-install package under extensions/.
  • Python SDK (axintai) v0.1.0a1 — Python parity with the TypeScript authoring surface. define_intent() + param.* produce the same language-agnostic IR the TS compiler emits, so a Python-authored intent compiles to equivalent Swift.
  • --format and --strict-format CLI flags on axint compile — pipe generated Swift through Apple's swift-format before writing to disk.

Fixed

  • Profile and org READMEs referenced the defunct unscoped axint npm package instead of @axintai/compiler.
  • npx axint compile in the main README used the wrong package name (unscoped axint is 404).
  • SPM build plugin passed --json which prevented file writes, used wrong output filenames, and invoked npx without -p @axintai/compiler.
  • Python IR bridge serialized infoPlistKeys as a flat string list but the TS compiler expected Record<string, string>.
  • --from-ir CLI flag only accepted a single IR object but the Python CLI emits arrays.
  • dynamic-playlist template used param.dynamicOptions() and customResultType which the codegen didn't support yet — simplified to standard param types.
  • CONTRIBUTING.md Discord link was dead.
  • ROADMAP.md claimed v0.3.0 was current when npm had 0.2.2.

0.2.2 — 2026-04-09

The "the README doesn't lie anymore" release. Every flag the docs promised, every scaffolder the tutorials assumed, every badge that was pointing at the wrong package — all fixed in one tight pass.

Added

  • axint init [dir] — zero-config project scaffolder. Drops package.json, tsconfig.json, a starter intent from any bundled template, a pre-wired .vscode/mcp.json, and an ios/Intents/ target directory. 30-second setup from a fresh clone.
  • --emit-info-plist and --emit-entitlements CLI flags — the underlying CompilerOptions existed in 0.2.0 but were never surfaced on the CLI. Now they are, and they write <Name>.plist.fragment.xml / <Name>.entitlements.fragment.xml next to the Swift file exactly the way the README has always claimed.
  • --sandbox flag on compile and validate — stage 4 validation. Drops generated Swift into a deterministic SPM sandbox and runs swift build to prove it compiles before you ever touch Xcode. macOS-only, reuses the .build/ cache across runs (cold 4s, warm 1.2s on M-series).
  • axint templates [name] — list or print bundled intent templates straight from the CLI, with --json for machine-readable output.
  • Sandbox module (src/core/sandbox.ts) — reusable sandboxCompile() API for programmatic stage-4 validation in tests, CI, and the future Xcode extension.
  • Logo SVG — official mark at docs/assets/logo.svg, also used by the README header, axint.ai favicon, and npm package page.

Fixed

  • README npm badge points at @axintai/compiler instead of the unscoped axint.
  • README test count synced to the real vitest output (117, not 124).
  • ROADMAP.md no longer claims "Current release: v0.1.1" — it now tracks v0.2.2 and the WWDC 2026 sprint.
  • Logo reference no longer points at a file that didn't exist.

WWDC 2026 Sprint

Shipped as part of the 60-day run to June 8:

  • Python SDK (in flight, v0.3.0)
  • swift-format integration (in flight, v0.3.0)
  • WWDC API adapter pipeline (scaffolded)
  • docs.axint.ai public docs site (scaffolding)

0.2.1 — 2026-04-09

Changed

  • Package rename: axint → @axintai/compiler. The unscoped name on npm is permanently deprecated — update your install command to npm install -g @axintai/compiler. All imports and MCP configs follow the scoped name going forward.
  • Website vendored compiler sync'd to v0.2.1 source.

Fixed

  • npm provenance enabled on the scoped package.

0.2.0 — 2026-04-09

The "it's a real compiler now" release. Everything the v0.1.x vision pointed at, shipped behind the same public API.

Added

  • Real TypeScript AST parser: replaced the v0.1.x regex matcher with a walker built on the typescript compiler API. Handles shorthand properties, method definitions, arrow/function expressions, nested literals, and reports source line numbers on every error.
  • Numeric type fidelity: param.int, param.double, and param.float now map to Swift Int, Double, and Float respectively. No more collapsing every number into Int.
  • Return-type inference: the compiler walks the top-level perform() body, finds the first return statement, and emits a matching some IntentResult & ReturnsValue<T> signature so generated Swift returns real values instead of .result().
  • Info.plist emission: emitInfoPlist option (CLI flag, MCP arg, and CompilerOptions) generates a ready-to-merge <plist> fragment from the intent's declared infoPlistKeys.
  • Entitlements emission: emitEntitlements option generates a matching .entitlements fragment from the intent's entitlements array.
  • axint_scaffold MCP tool: AI assistants can now call one tool to generate a complete starter intent file from a name, description, domain, and parameter list — no more guessing the SDK surface.
  • axint_list_templates / axint_template MCP tools: exposes the bundled reference templates over MCP so Claude Code, Cursor, etc. can fetch a working starting point in a single call.
  • Ten reference templates: send-message, create-event, book-ride, get-directions, play-track, create-note, log-expense, log-workout, set-thermostat, place-order. Every one compiles cleanly with axint compile.
  • Intent-level metadata: entitlements, infoPlistKeys, and isDiscoverable are now first-class fields on defineIntent() and flow through the IR into codegen.
  • New validator rules: AX107 (duplicate parameter name, error), AX108 (malformed entitlement identifier, warning), AX109 (non-standard Info.plist key prefix, warning).
  • New parser diagnostics: AX006 (params must be an object literal), AX007 (parameter value must be a param.* call), AX008 (missing description argument).
  • Apple target additions: ios26 and macos26 targets for CompilerOptions, ready for the WWDC 2026 App Intents surface.

Changed

  • SDK: param is now built from a typed factory, which means param.int, param.double, param.float, param.string, param.boolean, param.date, param.duration, and param.url all share identical configuration semantics. param.number is preserved as a deprecated alias for param.int and will be removed in v1.0.0.
  • compileSource: now accepts CompilerOptions as an optional third argument, matching compileFile. Parser errors are captured as diagnostics instead of raised as exceptions, so MCP clients get a clean error list.
  • Generator output: the emitted Swift file now imports Foundation, uses a typed ReturnsValue<T> return when the IR knows the type, and includes a sensible Swift default literal for the placeholder return value.
  • Dependencies: handlebars removed (unused since v0.1.0), typescript promoted from devDependency to production dependency (required by the new AST parser).

Fixed

  • Parser no longer silently swallows malformed params blocks — each error case now emits a dedicated diagnostic with a source line and a suggested fix.

Backwards Compatibility

  • param.number(...) still parses and still produces a Swift Int — existing v0.1.x intent files continue to compile unchanged.
  • defineIntent() accepts every field v0.1.x accepted.
  • The CLI surface (axint compile, axint validate) is unchanged; --emit-info-plist and --emit-entitlements are purely additive flags.

0.1.1 — 2026-04-08

Fixed

  • Build hygiene: .gitignore now excludes tests/.tmp-compiler-tests/

0.1.0 — 2026-04-07

Added

  • Core compiler pipeline: parse TypeScript defineIntent() calls into an Intermediate Representation (IR), validate against Apple App Intents constraints, and generate idiomatic Swift
  • CLI: axint compile <file> and axint validate <file> commands with colored, Rust-inspired diagnostics
  • MCP server: axint_compile and axint_validate tools for AI coding assistants (Claude Code, Cursor, Windsurf)
  • SDK: defineIntent() API with type-safe param.string(), param.number(), param.boolean(), param.date(), param.duration(), param.url() helpers
  • Validation: 12 diagnostic codes (AX001–AX005 parser, AX100–AX106 IR, AX200–AX202 Swift) with actionable suggestions
  • Security: escapeSwiftString() prevents code injection in generated Swift string literals
  • Testing: 117 tests at 98%+ coverage — parser, generator, validator, compiler, types, SDK, templates, security edge cases, and injection resistance
  • CI/CD: GitHub Actions with typecheck, lint, test, build, and CLI verification
  • Apache 2.0 license, Code of Conduct, Security Policy, Contributing Guide

Technical Details

  • Node.js 22+ (ESM-only)
  • 3 production dependencies: @modelcontextprotocol/sdk, commander, handlebars
  • tsup for builds with separate CLI/MCP/library entry points
  • Vitest with snapshot testing and V8 coverage