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.
- 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.
- 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.
- 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.
- 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.
- 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()andServer.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.
- Python MCP console entrypoint —
axint-mcp-pynow enters the async stdio server through a synchronousasyncio.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.
- A fresh Python package install now starts the MCP server through the same console path users configure in their host.
- One-command local proof —
axint provediscovers 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 verifydetects payload tampering independently. - Finding-level feedback — every Swift diagnostic has a stable source-free ID.
axint feedback findingrecords 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 --fixapplies 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 standardrecords product-signal consent, whileaxint telemetry enhancedenables and immediately syncs source-free repair and proof diagnostics.AXINT_DOGFOOD=1explicitly marks Axint-owned internal runs for separate Pulse attribution. - Proof outcome learning —
axint provenow 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.
- 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 provedetects 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.
- One local command can produce portable evidence and an exact repair path while keeping static findings subordinate to real Apple tooling.
- 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-fixperforms 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.
- 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.
- Existing Swift projects can distinguish compiler-supported findings from probable leads and non-blocking advisories instead of treating every heuristic as fact.
- 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.
- MCP marketplace tool-card quality — default runtime tool descriptions now preserve complete
Purpose,Use, andEffectssignals 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.
- Security lockfile refresh — pinned patched transitive floors for
honoandvite, refreshed the pnpm lock, and updated the MCP worker lock so Dependabot security alerts resolve on main. - Workflow gate metadata —
axint.workflow.checkis now correctly advertised as non-destructive but not read-only, matching its local.axint/sessionfreshness-stamp write and removing a marketplace annotation contradiction.
- 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
@UnionValueand 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.
- 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@v5toactions/cache@v6after fresh CI and CodeQL checks.
- Community plugin validation — the plugin manifest now uses the object-shaped
mcpServersschema, the bundled skill includes required marketplace frontmatter, and regression tests keep the manifest valid.
- AppIntentsTesting harness generator —
generateAppIntentsTestingHarnessandaxint 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
ImageCreatorusage as a migration risk. - Apple Intelligence proof templates — added
shortcuts-use-model-entity,foundation-model-evaluation, andcore-ai-local-modelto the bundled template registry. - WWDC26 Siri/App Schema readiness — the compiler now normalizes and emits
EntityCollection<T>parameters,ValueRepresentation(...)aliases, andRelevantEntitieshelper 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.checknow 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-tooltemplate now names the generatedTool, prompt-version metadata, transcript capture, and sensitive-field redaction proof expected before demoing model-backed Apple actions. - SwiftUI interaction template —
swiftui-reorderable-swipe-containershows the WWDC26 custom-container path forreorderable(),reorderContainer(...), andswipeActionsContainer(). - SwiftUI modernization diagnostic — Cloud Check now suggests the new
swipeActionsContainer()path when a SwiftUI view still appears to useListprimarily to host swipe actions. - Dynamic Profile proof cues —
dynamic-profile-sessionnow names selected-profile logging, transcript metadata, and tool-call proof for Foundation Models sessions that switch profiles at runtime.
- AX127 diagnostic — a param default that disagrees with the declared type (
param.string("Length", { default: 8 })) now fails bothaxint validateandaxint compilebefore 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:colplus a short source excerpt with a caret underline, rust-style. JSON output gains additivelineandcolumnfields. - Perform-body notice —
axint compileprints a one-line note when a TSperformbody is discarded into the Swift stub, so nobody discovers the TODO in Xcode later.
axint --helpnow 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, andwatchruns no longer print Fix Packet paths or theaxint logintip — pass--verboseto bring them back. Failures still print everything. - ANSI color is disabled when output is piped or
NO_COLORis set, so agents reading CLI output stop receiving escape bytes. axint.suggestmatches 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.urlstring defaults now emitURL(string: "...")!and array defaults emit Swift array literals, so every default the validator accepts produces Swift that compiles.
- AX849 no longer blames the property above the real offender when a stored property precedes a computed property that is missing its
return.
- AX849 and AX860 diagnostics — the Swift validator now flags computed properties that declare locals but never
returnthe final expression (AX849), and same-fileswitch selfstatements that omit a declared enum case without adefaultbranch (AX860). - Dogfood routing in
axint.suggest— prompts about repairing Axint's own classifier, Cloud Check artifact handling, or version truth now route to a dedicatedaxint-dogfoodplan 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), anddynamic-profile-session(Foundation Models session with per-context DynamicProfiles). testHarnessintent config —defineIntentaccepts atestHarnessblock; the generator emits an XCTest class that drivesperform()with sample inputs behind#if canImport(XCTest) && canImport(AppIntentsTesting).
- Public-facing copy now says "audit-grade" and "production readiness" instead of fundraising vocabulary.
- Activation proof —
axint activateand theaxint.activateMCP tool run a source-free compiler smoke test, returnaxint_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:gauntletpacks the current build, installs it into a temporary clean project, verifiesaxint activate, and checks the no-installcreate-axint-applaunchpad path.
- Status, doctor, upgrade, Xcode setup, MCP prompts, project start packs, rehydration files, and README copy now tell agents to run
axint.activateafter setup instead of stopping at "MCP server started." - npm package keywords now include MCP, SwiftUI, WidgetKit, Xcode, iOS, and macOS discovery terms.
- MCP Marketplace tool-card clarity — compact runtime tool descriptions now include explicit
Use:andEffects: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.
- 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.0scanner chain while preserving@axint/compiler/mcpimport compatibility.
- MCP marketplace runtime entrypoint —
node dist/mcp/index.jsnow 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 runmcp-proxy -- node dist/mcp/index.js.
- GitHub security parity — added the pnpm override and refreshed
pnpm-lock.yamlso Dependabot, MCP Marketplace, and package scanners no longer see the staleip-address@10.1.0path after the npm lock had already been hardened.
- Project-pack version sync —
axint project sync-versionplus theaxint.project.syncVersionMCP 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.
- 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-addressresolution so package scanners no longer report the old ReDoS / DNS rebinding vulnerability chain.
create-axint-appDay Agent launchpad —axint createplus thecreate-axint-appbin 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.
- Source-free adoption telemetry controls —
axint telemetry status|opt-out|opt-ingives users a clear local control surface. Events are source-free and path-free, honorAXINT_TELEMETRY=off,AXINT_DISABLE_TELEMETRY=1, andDO_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 explicitRECORD_SNAPSHOTS=1rebaseline path instead of generic UI-test advice. - CLI-safe session handoff —
axint session startnow prints both MCP JSON and a CLI-safeaxint workflow check ...command so agents do not accidentally pass JSON booleans as flag values.
axint suggest --diris accepted as a project-context hint for parity withworkflow,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 doctortreats a newer running Axint than the project hint as a warning instead of a hard failure unless strict pinning is actually needed.
AX848nested-type / static-member access on a project-indexed type — fills the gapAX841deliberately 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, andAX841skips it.AX848specifically 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 inAXINT_DOGFOODING.md(2026-05-03 entry).AX841extended with typed-collection-element inference — addsForEach(store.results) { item in … }andfor item in store.results { … }as binding sources. The validator now resolvesstoreto its project-indexed type, looks upresultsto get[VoiceCaptureResult], peels the array wrapper, and binds the closure parameter / loop variable toVoiceCaptureResultso downstream member access on it actually fires. Previously the closure parameter was indiscriminately added tountypedClosureParametersand silently skipped — closing the dogfoodingitem.title(real field isheadline) 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." Walksgit diff --unified=0and 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.diffFilterexposes the suppressed-diagnostic count.- Snapshot-baseline affinity hint — when the validated Swift file has matching
__Snapshots__/<view>*.pngbaselines on disk, Cloud Check appends a one-line "this view has N snapshot baselines; rebaseline after the next build" reminder tonextSteps. Default-on whensourcePathis provided; opt out withaxint cloud check --no-snapshot-affinity.CloudCheckReport.snapshotAffinityexposes the matching baseline paths. - Drift-age stamp on
axint.workflow.check— every workflow.check call writes a tiny.axint/session/last-workflow-check.jsonstamp and reads the prior one to compute "minutes since last workflow.check." Surfaced incheckedfor normal runs and inrecommended(with aDRIFTtag) when the gap exceeds the 10-minute checkpoint rule.WorkflowCheckReport.driftAgeexposes the structured value.
collectDeclaredMemberNamesnow includes nested type names (struct/class/actor/enum/typealiasdeclared inside the parent body), soAX841andAX848no longer false-positive on project types that legitimately namespace nested kinds.validateSwiftSourcesmember-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.
swift -typecheckintegration in Cloud Check — opt-in viatypecheck: trueon theaxint.cloud.checkMCP tool. When the host machine has the Swift toolchain (Mac with Xcode, or Linux with swift installed), Cloud Check shells out toswift -typecheckand 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. HonorsAXINT_SWIFT_BINARYfor non-default toolchains.- Snapshot test integration scaffold — new
runSnapshotTestshelper that drivesxcodebuild test -only-testing:<suite>, parses pass/fail counts, and surfaces snapshot failures with their reference-image artifact paths asAX-SNAPSHOT-FAILdiagnostics. Catches the visual regression class (dead-but-rendered, layout drift, white-on-white) that no static analysis can see. axint paint-test scaffoldCLI command — auto-generates anXCTestfile that mounts every reachablestruct X: Viewat 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 AppleImageRenderer+XCTest, no third-party dependencies.
CloudCheckReportnow includes atypecheckfield 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.
AX847type-erased SwiftUI protocol method missing — bundled table of methods that exist on a sub-protocol but not on the type-erased name. Catches the dogfoodingAnyShape.strokeBorderpattern (strokeBorder lives on InsettableShape; AnyShape only conforms to Shape). Suggests the closest valid replacement (e.g..strokefor.strokeBorderon AnyShape).AX846@ViewBuilder requires View return type — flags any@ViewBuilderannotation on a property/function whose return type isn'tsome View/View. Catches the dogfooding@ViewBuilder some Shapepattern that produces_ConditionalContent(View only) but is asked to satisfy a Shape constraint.AX845@MainActor static method in init default-value — for any@MainActorclass/struct with init parameter defaults that callTypeName.staticMethod()orSelf.staticMethod(), fires when the static method isn'tnonisolated. 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.AX844synthesized conformance propagation — for any struct that explicitly declaresHashable,Equatable,Codable,Decodable, orEncodable, walks stored properties via project-context index and confirms each property's type also conforms. Catches theLiveTeammate { let builder: BuilderProfile }pattern where the property type lives in another file and doesn't conform. Includes a project-wide extension scan soextension X: Hashable {}declarations elsewhere are honored.AX843state-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 emitinfo-severity. Catches theNavigator.rightPane = .voiceInboxpattern where the writer survived a refactor but the consumer view was dropped.axint.registry.searchMCP 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 bykind(app-intent, view, widget, ...) andplatform(iOS/macOS/...). Use BEFOREaxint.feature/axint.compileso agents can install existing packages instead of regenerating Swift.AXINT_REGISTRY_PATHenv var — points the registry tooling at any axint-registry checkout. Defaults to the sibling../axint-registry/for normal workspace setups.
registryPackagesmetric is now auto-counted from the siblingaxint-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 inmetrics.jsonand on every public surface. Honestly smaller, but real.
AX842SwiftUI view reachability — flags anystruct X: Viewthat 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:reachablecomment opt-out for views constructed reflectively. SkipsApp-conforming structs andPreviewProviders.AX841cross-file member resolution via project context — extendsAX768to index everyclass/struct/actor/enumdeclared in the project, not just files in the validation set. CatchesvoiceInbox.itemswhenVoiceInboxStoreactually exposesresults. Includes a "Did you mean…" suggestion via Levenshtein when a near-match exists.AX840cross-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.AX787string-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.validateSwiftSourcesacceptsprojectContext: { 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).
validateSwiftSourceandvalidateSwiftSourcesnow also run AX840 (module-import) on every input, no project context required.
AX787undefined boolean identifier — catchesis*/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 likeisEmptyandhasPrefix.AX788HStack child collapses siblings — flagsHStackthat contains a customViewwhose 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.AX789redundantTask { @MainActor in }in lifecycle — companion toAX730..onAppearand.taskare already main-actor isolated; the wrapper is dead weight.AX768system-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 atinfoinstead ofwarning, with a suggestion to extendSYSTEM_TYPE_MEMBERSif the member is real. Cuts noise on partial-validation runs.- Bundled member coverage for
ScrollGeometry,ScrollPhase,Animation,Color,Image,Text,Bindable,Binding,AnyView,EmptyView.
- Cloud Check honesty —
evidence_requiredandready_for_buildreasons now state explicitly that static checks do not equal compiler acceptance. Required evidence wording surfacesxcodebuild build (compile proof — non-negotiable)so agents stop reading a clean static gate as a build pass.
0.4.15 — 2026-04-29
axint mcp recover— prints a same-thread recovery packet when an MCP client hitsTransport closed, including version proof, project path, context-recovery commands, and the CLI fallback run loop.- Xcode runner-health classification —
axint runnow separates UI automation startup failures and hosted macOS test-runner hangs from real app assertion failures. AX768same-target Swift member validation — when changed Swift files include a declaring type and a consumer, Axint warns on direct member mistakes such asprofile.detailwhen the known type does not expose that member.- Public page DSL manifest support —
.axintlanguage files can now parse, lower, and print safepage/moduledeclarations for host-rendered public project/profile surfaces.
- 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-testingselectors and tells agents to clean up/retry runner infrastructure instead of asking for another focused test when no assertion executed.
- Guarded Xcode run loop —
axint.xcode.guardand workflow prompts now keep Xcode agents inside the Axint loop across planning, writing, pre-build, pre-commit, and finish checkpoints.
- Workflow check next actions —
axint.workflow.checknow 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.
- Axint rehydration contract —
axint.session.startnow refreshes.axint/AXINT_REHYDRATE.mdalongside 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.checknow 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.
- Project start packs, MCP prompts, doctor checks, README proof surfaces, and local docs memory now point agents at the rehydration-first workflow.
axint.swift.fixuses the multipass fixer path through MCP so mechanical fixes can converge without reintroducing duplicate declarations.
axint.statusMCP 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.
- Xcode startup prompts now tell agents to call
axint.statusbefore editing code and stop if the running MCP server is older than expected. axint xcode verifynow treats a missingaxint.statustool as an old MCP server and prints the update/restart path.
- Cloud Check coverage and confidence —
axint.cloud.checknow 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
AX736warning for container.accessibilityIdentifier(...)patterns that can hide nested control identifiers in UI tests. - Observation navigation diagnostic — new
AX735warning for@ObservationIgnorednavigator/router state inside@Observablecoordinators.
- 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.
AX731weak-capture parsing now acceptsTask { @MainActor [weak self] in ... }while still warning onTask { @MainActor in self... }.- Cloud Check validator parity is covered by regression tests so Swift validator findings such as
AX731surface through the Cloud Check MCP path.
CLI ergonomics, VSCode cloud handoff, and an MCP server refactor.
- Compression ratio after compile —
axint compileprintsTS lines → Swift lines (ratio)so authors can eyeball how their intent expanded. Skipped for--from-irand--stdoutruns. 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.validateandswift.fixon 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.
- MCP server split into
manifest,prompts, andschema-compilemodules — the old 900-line monolith is now three focused files. Tool surface and behavior are unchanged. axint addaccepts barenamespace/slugin 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.
axint addinstall response parsing — the API returns a flat shape (ts_source,swift_outputat the root), the CLI was destructuringdata.version.swift_outputand writingundefinedto disk. Install now writes the correct Swift output.
Xcode agentic coding support, Swift validator, and the axint.feature tool.
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 compileand 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.tsfile 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.
- Namespace cleanup across the CLI, SPM plugins, and lockfile — the final
axintaireferences from the old unscoped name are gone. Everything is on@axint/compiler(npm) andaxintai(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, andserver.json.
Dot-notation MCP tools and prompts.
axint.compile,axint.validate,axint.eject,axint.explain— dot-notation tool names that work alongside the existingaxint_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.
MCP tool annotations and parameter descriptions.
- 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.
- Remote MCP endpoint — Cloudflare Worker serving the Axint MCP server over HTTP transport for Smithery and other hosted MCP clients.
server.jsonand 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 existingaxint_compilenames, with enriched parameter descriptions and tool annotations.
server.jsondescription 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.
- Python MCP server — full CLI parity with the TypeScript MCP server.
axintai-mcpserves 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
ascasts 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.
- 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 0replaced withpyyamldep). - 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.
- Python SDK on PyPI —
pip install axintainow 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:, andvbscript:URI schemes. - Authenticated GitHub API proxy on axint.ai —
/api/githubroute with 5-minute edge cache, bumps from 60 to 5,000 req/hr.
eject --formatflag was accepted but never wired toformatSwift().ejectIntent()is now async and runs swift-format when--formatis passed.param.dynamicOptions()inner type was hardcoded tostring. Now recursively extracts the actual param type from the second argument.- Property-based entity queries now generate
EntityPropertyQueryconformance withQueryProperties, comparators, andSortingOptionsinstead 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.
- 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.
defineEntity()andparam.entity()SDK helpers — first-class entity authoring in TypeScript withEntityQuerygeneration anddisplayRepresentationsupport.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. --formatand--strict-formatCLI flags onaxint compile— pipe generated Swift through Apple'sswift-formatbefore writing to disk.
- Profile and org READMEs referenced the defunct unscoped
axintnpm package instead of@axintai/compiler. npx axint compilein the main README used the wrong package name (unscopedaxintis 404).- SPM build plugin passed
--jsonwhich prevented file writes, used wrong output filenames, and invokednpxwithout-p @axintai/compiler. - Python IR bridge serialized
infoPlistKeysas a flat string list but the TS compiler expectedRecord<string, string>. --from-irCLI flag only accepted a single IR object but the Python CLI emits arrays.dynamic-playlisttemplate usedparam.dynamicOptions()andcustomResultTypewhich 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.
axint init [dir]— zero-config project scaffolder. Dropspackage.json,tsconfig.json, a starter intent from any bundled template, a pre-wired.vscode/mcp.json, and anios/Intents/target directory. 30-second setup from a fresh clone.--emit-info-plistand--emit-entitlementsCLI flags — the underlyingCompilerOptionsexisted in 0.2.0 but were never surfaced on the CLI. Now they are, and they write<Name>.plist.fragment.xml/<Name>.entitlements.fragment.xmlnext to the Swift file exactly the way the README has always claimed.--sandboxflag oncompileandvalidate— stage 4 validation. Drops generated Swift into a deterministic SPM sandbox and runsswift buildto 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--jsonfor machine-readable output.- Sandbox module (
src/core/sandbox.ts) — reusablesandboxCompile()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.
- README npm badge points at
@axintai/compilerinstead of the unscopedaxint. - 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.
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
- Package rename:
axint→@axintai/compiler. The unscoped name on npm is permanently deprecated — update your install command tonpm 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.
- 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.
- Real TypeScript AST parser: replaced the v0.1.x regex matcher with a walker built on the
typescriptcompiler 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, andparam.floatnow map to SwiftInt,Double, andFloatrespectively. No more collapsing every number intoInt. - Return-type inference: the compiler walks the top-level
perform()body, finds the firstreturnstatement, and emits a matchingsome IntentResult & ReturnsValue<T>signature so generated Swift returns real values instead of.result(). - Info.plist emission:
emitInfoPlistoption (CLI flag, MCP arg, andCompilerOptions) generates a ready-to-merge<plist>fragment from the intent's declaredinfoPlistKeys. - Entitlements emission:
emitEntitlementsoption generates a matching.entitlementsfragment from the intent'sentitlementsarray. axint_scaffoldMCP 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_templateMCP 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 withaxint compile. - Intent-level metadata:
entitlements,infoPlistKeys, andisDiscoverableare now first-class fields ondefineIntent()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 (
paramsmust be an object literal), AX007 (parameter value must be aparam.*call), AX008 (missing description argument). - Apple target additions:
ios26andmacos26targets forCompilerOptions, ready for the WWDC 2026 App Intents surface.
- SDK:
paramis now built from a typed factory, which meansparam.int,param.double,param.float,param.string,param.boolean,param.date,param.duration, andparam.urlall share identical configuration semantics.param.numberis preserved as a deprecated alias forparam.intand will be removed in v1.0.0. compileSource: now acceptsCompilerOptionsas an optional third argument, matchingcompileFile. 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 typedReturnsValue<T>return when the IR knows the type, and includes a sensible Swift default literal for the placeholder return value. - Dependencies:
handlebarsremoved (unused since v0.1.0),typescriptpromoted from devDependency to production dependency (required by the new AST parser).
- Parser no longer silently swallows malformed
paramsblocks — each error case now emits a dedicated diagnostic with a source line and a suggested fix.
param.number(...)still parses and still produces a SwiftInt— 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-plistand--emit-entitlementsare purely additive flags.
0.1.1 — 2026-04-08
- Build hygiene:
.gitignorenow excludestests/.tmp-compiler-tests/
0.1.0 — 2026-04-07
- 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>andaxint validate <file>commands with colored, Rust-inspired diagnostics - MCP server:
axint_compileandaxint_validatetools for AI coding assistants (Claude Code, Cursor, Windsurf) - SDK:
defineIntent()API with type-safeparam.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
- 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